diff --git a/Unity/Better Tracking/AssetBundles/AssetBundles b/Unity/Better Tracking/AssetBundles/AssetBundles index 8f41a0a..b4502cb 100644 Binary files a/Unity/Better Tracking/AssetBundles/AssetBundles and b/Unity/Better Tracking/AssetBundles/AssetBundles differ diff --git a/Unity/Better Tracking/AssetBundles/AssetBundles.manifest b/Unity/Better Tracking/AssetBundles/AssetBundles.manifest index 1752779..e52ecc0 100644 --- a/Unity/Better Tracking/AssetBundles/AssetBundles.manifest +++ b/Unity/Better Tracking/AssetBundles/AssetBundles.manifest @@ -1,5 +1,5 @@ ManifestFileVersion: 0 -CRC: 449767686 +CRC: 2046902892 AssetBundleManifest: AssetBundleInfos: Info_0: diff --git a/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.btk b/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.btk index de57407..0548da0 100644 Binary files a/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.btk and b/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.btk differ diff --git a/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.manifest b/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.manifest index dc93187..62b0a65 100644 --- a/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.manifest +++ b/Unity/Better Tracking/AssetBundles/better_tracking_prefabs.manifest @@ -1,12 +1,12 @@ ManifestFileVersion: 0 -CRC: 4171134025 +CRC: 1838937835 Hashes: AssetFileHash: serializedVersion: 2 - Hash: 0c38472384934af1d5a5591b4d5ad009 + Hash: 558ce64a905ab6c89efb46acce5f0373 TypeTreeHash: serializedVersion: 2 - Hash: 3243792c6bf9a8eb9536a285cdf2617c + Hash: 61389c8fe673aaf5d3ca3190cd8d0b43 HashAppended: 0 ClassTypes: - Class: 1 @@ -24,45 +24,39 @@ ClassTypes: - Class: 95 Script: {instanceID: 0} - Class: 114 - Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} - Class: 114 - Script: {fileID: -1862395651, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 1282408397, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 - Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 1495016603, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 - Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} - Class: 114 - Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 1029228552, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 - Script: {fileID: -146154839, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, type: 3} - Class: 114 - Script: {fileID: -234403039, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} - Class: 114 - Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} - Class: 114 - Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} - Class: 114 - Script: {fileID: -1184210157, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} - Class: 114 - Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + Script: {fileID: 11500000, guid: 7a98125502f715b4b83cfb77b434e436, type: 3} - Class: 114 Script: {fileID: -1832230928, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 Script: {fileID: 1756429067, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 Script: {fileID: 1219123181, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} -- Class: 114 - Script: {fileID: 1495016603, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} -- Class: 114 - Script: {fileID: 1029228552, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 Script: {fileID: 795088687, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 Script: {fileID: 368674652, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 Script: {fileID: -1582228015, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} -- Class: 114 - Script: {fileID: 1282408397, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 @@ -71,6 +65,12 @@ ClassTypes: Script: {fileID: 2095264307, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - Class: 114 Script: {fileID: 619713579, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} +- Class: 114 + Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} +- Class: 114 + Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} +- Class: 114 + Script: {fileID: 11500000, guid: 2fafe2cfe61f6974895a912c3755e8f1, type: 3} - Class: 115 Script: {instanceID: 0} - Class: 128 @@ -83,6 +83,7 @@ ClassTypes: Script: {instanceID: 0} - Class: 687078895 Script: {instanceID: 0} +SerializeReferenceClassIdentifiers: [] Assets: - Assets/Prefabs/SortDropDown.prefab - Assets/Prefabs/SortHeader.prefab diff --git a/Unity/Better Tracking/Assets/Icons/AZ_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/AZ_Icon.png.meta index 7c95ed6..2c156ee 100644 --- a/Unity/Better Tracking/Assets/Icons/AZ_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/AZ_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 5962d8983ce79c54c99acc36f0c1007c -timeCreated: 1521497454 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/AntiClockwise_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/AntiClockwise_Icon.png.meta index 7f518c9..ff974b6 100644 --- a/Unity/Better Tracking/Assets/Icons/AntiClockwise_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/AntiClockwise_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: b2b0c7897b59e644497ee0a1f294b621 -timeCreated: 1521498563 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/ClockIcon.png.meta b/Unity/Better Tracking/Assets/Icons/ClockIcon.png.meta index 7e87721..9611f6b 100644 --- a/Unity/Better Tracking/Assets/Icons/ClockIcon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/ClockIcon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: e54b0097e5f0c4f4e93059169a12ed38 -timeCreated: 1520886157 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Clockwise_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/Clockwise_Icon.png.meta index 698fb9a..2dad495 100644 --- a/Unity/Better Tracking/Assets/Icons/Clockwise_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Clockwise_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 2bf49b9bae09ce840b5b6b55933aa2db -timeCreated: 1521498562 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Close_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/Close_Icon.png.meta index b986526..de5330c 100644 --- a/Unity/Better Tracking/Assets/Icons/Close_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Close_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: ddaf13f3e1ca0804d94938e36177199a -timeCreated: 1522684197 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Connector_Bypass.png.meta b/Unity/Better Tracking/Assets/Icons/Connector_Bypass.png.meta index 0aad71a..c9e73cd 100644 --- a/Unity/Better Tracking/Assets/Icons/Connector_Bypass.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Connector_Bypass.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 8048df11791b6544ca1f2052857bc79b -timeCreated: 1520038673 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Connector_Multiple.png.meta b/Unity/Better Tracking/Assets/Icons/Connector_Multiple.png.meta index 49757eb..1c50492 100644 --- a/Unity/Better Tracking/Assets/Icons/Connector_Multiple.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Connector_Multiple.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 3b7b78f41e6c1c245b3aab34a249398a -timeCreated: 1519863977 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 0 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 0 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Connector_Single.png.meta b/Unity/Better Tracking/Assets/Icons/Connector_Single.png.meta index 24522ba..1c88b1f 100644 --- a/Unity/Better Tracking/Assets/Icons/Connector_Single.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Connector_Single.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 5a23e32843a50a34aa1918344fd0f92d -timeCreated: 1519863977 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 0 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 0 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + 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: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Drag_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/Drag_Icon.png.meta index 6af7081..bbe7660 100644 --- a/Unity/Better Tracking/Assets/Icons/Drag_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Drag_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 5fe141b9474d09147a9f941e9f942284 -timeCreated: 1521470438 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Menu_Flat_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/Menu_Flat_Icon.png.meta index d9786de..9b66372 100644 --- a/Unity/Better Tracking/Assets/Icons/Menu_Flat_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Menu_Flat_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 1a3b2b30a4947d4478a36fb20033113c -timeCreated: 1519864480 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/OrbitIcon.png.meta b/Unity/Better Tracking/Assets/Icons/OrbitIcon.png.meta index 81d8b27..896e135 100644 --- a/Unity/Better Tracking/Assets/Icons/OrbitIcon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/OrbitIcon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 91fa95387caa953479ab61a7171f6a90 -timeCreated: 1588290675 -licenseType: Pro TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: 1 wrapW: -1 @@ -44,39 +45,60 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/OrbitIconOff.png.meta b/Unity/Better Tracking/Assets/Icons/OrbitIconOff.png.meta index 33df0cc..190376c 100644 --- a/Unity/Better Tracking/Assets/Icons/OrbitIconOff.png.meta +++ b/Unity/Better Tracking/Assets/Icons/OrbitIconOff.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 62b047a0393bc8344bbd80a1623a1d99 -timeCreated: 1588291035 -licenseType: Pro TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: 1 wrapW: -1 @@ -44,39 +45,60 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/PlanetIcon.png.meta b/Unity/Better Tracking/Assets/Icons/PlanetIcon.png.meta index 67db351..95f37c5 100644 --- a/Unity/Better Tracking/Assets/Icons/PlanetIcon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/PlanetIcon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 6eb665fbe8c608f48b15b286cfd73ec2 -timeCreated: 1520885501 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/PlanetIcon_2.png.meta b/Unity/Better Tracking/Assets/Icons/PlanetIcon_2.png.meta index 11c18ac..b7628d4 100644 --- a/Unity/Better Tracking/Assets/Icons/PlanetIcon_2.png.meta +++ b/Unity/Better Tracking/Assets/Icons/PlanetIcon_2.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 97f544df3c05d4c47b7bbcc27e44a7b7 -timeCreated: 1520886157 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/PlanetIcon_Wide.png.meta b/Unity/Better Tracking/Assets/Icons/PlanetIcon_Wide.png.meta index 97b2415..3207c14 100644 --- a/Unity/Better Tracking/Assets/Icons/PlanetIcon_Wide.png.meta +++ b/Unity/Better Tracking/Assets/Icons/PlanetIcon_Wide.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 3b26ce89ef305b74bb6c0b06d0bb0150 -timeCreated: 1521562117 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/ProbeIcon.png.meta b/Unity/Better Tracking/Assets/Icons/ProbeIcon.png.meta index 2fa1ba0..32ea68d 100644 --- a/Unity/Better Tracking/Assets/Icons/ProbeIcon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/ProbeIcon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 85d52e31a2339f84cb71567ccecd0c90 -timeCreated: 1520885501 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/ProbeIcon_Wide.png.meta b/Unity/Better Tracking/Assets/Icons/ProbeIcon_Wide.png.meta index 4c4b9e5..ce1081c 100644 --- a/Unity/Better Tracking/Assets/Icons/ProbeIcon_Wide.png.meta +++ b/Unity/Better Tracking/Assets/Icons/ProbeIcon_Wide.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: aa05ed1efc4bff542b122864db4b128e -timeCreated: 1521562118 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/Search_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/Search_Icon.png.meta index bce5a9d..36bcad3 100644 --- a/Unity/Better Tracking/Assets/Icons/Search_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/Search_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: f5d9f2105884db9498ed0e128e69a85b -timeCreated: 1522684197 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/SortAsc_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/SortAsc_Icon.png.meta index 7d1e20d..18fdb60 100644 --- a/Unity/Better Tracking/Assets/Icons/SortAsc_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/SortAsc_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 05378317459e26d43afd6349162b5551 -timeCreated: 1521558246 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/SortDesc_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/SortDesc_Icon.png.meta index 7efb80b..2a0408a 100644 --- a/Unity/Better Tracking/Assets/Icons/SortDesc_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/SortDesc_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 67dd60690bb644649932478781f7893a -timeCreated: 1521558179 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Icons/UIIcons.spriteatlas b/Unity/Better Tracking/Assets/Icons/UIIcons.spriteatlas index 34a4527..e161ddc 100644 --- a/Unity/Better Tracking/Assets/Icons/UIIcons.spriteatlas +++ b/Unity/Better Tracking/Assets/Icons/UIIcons.spriteatlas @@ -3,35 +3,44 @@ --- !u!687078895 &4343727234628468602 SpriteAtlas: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_Name: UIIcons m_EditorData: + serializedVersion: 2 textureSettings: + serializedVersion: 2 anisoLevel: 1 compressionQuality: 50 maxTextureSize: 512 textureCompression: 2 - colorSpace: 1 filterMode: 1 generateMipMaps: 0 readable: 0 crunchedCompression: 0 - platformSettings: [] - packingParameters: - paddingPower: 2 + sRGB: 0 + platformSettings: + - serializedVersion: 3 + m_BuildTarget: DefaultTexturePlatform + m_MaxTextureSize: 512 + m_ResizeAlgorithm: 0 + m_TextureFormat: -1 + m_TextureCompression: 2 + m_CompressionQuality: 50 + m_CrunchedCompression: 0 + m_AllowsAlphaSplitting: 0 + m_Overridden: 0 + m_AndroidETC2FallbackOverride: 0 + m_ForceMaximumCompressionQuality_BC6H_BC7: 0 + packingSettings: + serializedVersion: 2 + padding: 4 blockOffset: 1 allowAlphaSplitting: 0 enableRotation: 1 enableTightPacking: 0 - packedHash: - serializedVersion: 2 - Hash: 64b807dc1f506405a07ee57a88c067c7 variantMultiplier: 1 - bindAsDefault: 1 - finalFormat: 25 - hashString: 64b807dc1f506405a07ee57a88c067c7 - totalSpriteSurfaceArea: 24004 packables: - {fileID: 2800000, guid: 3b7b78f41e6c1c245b3aab34a249398a, type: 3} - {fileID: 2800000, guid: 5a23e32843a50a34aa1918344fd0f92d, type: 3} @@ -48,54 +57,39 @@ SpriteAtlas: - {fileID: 2800000, guid: 67dd60690bb644649932478781f7893a, type: 3} - {fileID: 2800000, guid: aa05ed1efc4bff542b122864db4b128e, type: 3} - {fileID: 2800000, guid: 3b26ce89ef305b74bb6c0b06d0bb0150, type: 3} - packedSpriteRenderDataKeys: - - 85d52e31a2339f84cb71567ccecd0c90: 21300000 - - 97f544df3c05d4c47b7bbcc27e44a7b7: 21300000 - - 3b26ce89ef305b74bb6c0b06d0bb0150: 21300000 - - aa05ed1efc4bff542b122864db4b128e: 21300000 - - 2bf49b9bae09ce840b5b6b55933aa2db: 21300000 - - b2b0c7897b59e644497ee0a1f294b621: 21300000 - - 5fe141b9474d09147a9f941e9f942284: 21300000 - - 5962d8983ce79c54c99acc36f0c1007c: 21300000 - - 671cbcba3b67d8140a0983c09b42d32d: 21300000 - - 8048df11791b6544ca1f2052857bc79b: 21300000 - - 3b7b78f41e6c1c245b3aab34a249398a: 21300000 - - 5a23e32843a50a34aa1918344fd0f92d: 21300000 - - 1a3b2b30a4947d4478a36fb20033113c: 21300000 - - 67dd60690bb644649932478781f7893a: 21300000 - - 05378317459e26d43afd6349162b5551: 21300000 + bindAsDefault: 1 m_MasterAtlas: {fileID: 0} m_PackedSprites: - - {fileID: 21300000, guid: 85d52e31a2339f84cb71567ccecd0c90, type: 3} - - {fileID: 21300000, guid: 97f544df3c05d4c47b7bbcc27e44a7b7, type: 3} - - {fileID: 21300000, guid: 3b26ce89ef305b74bb6c0b06d0bb0150, type: 3} - - {fileID: 21300000, guid: aa05ed1efc4bff542b122864db4b128e, type: 3} - - {fileID: 21300000, guid: 2bf49b9bae09ce840b5b6b55933aa2db, type: 3} - - {fileID: 21300000, guid: b2b0c7897b59e644497ee0a1f294b621, type: 3} - - {fileID: 21300000, guid: 5fe141b9474d09147a9f941e9f942284, type: 3} - - {fileID: 21300000, guid: 5962d8983ce79c54c99acc36f0c1007c, type: 3} - - {fileID: 21300000, guid: 671cbcba3b67d8140a0983c09b42d32d, type: 3} + - {fileID: 21300000, guid: 1a3b2b30a4947d4478a36fb20033113c, type: 3} - {fileID: 21300000, guid: 8048df11791b6544ca1f2052857bc79b, type: 3} + - {fileID: 21300000, guid: 85d52e31a2339f84cb71567ccecd0c90, type: 3} - {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, type: 3} + - {fileID: 21300000, guid: 05378317459e26d43afd6349162b5551, type: 3} - {fileID: 21300000, guid: 5a23e32843a50a34aa1918344fd0f92d, type: 3} - - {fileID: 21300000, guid: 1a3b2b30a4947d4478a36fb20033113c, type: 3} + - {fileID: 21300000, guid: 5962d8983ce79c54c99acc36f0c1007c, type: 3} - {fileID: 21300000, guid: 67dd60690bb644649932478781f7893a, type: 3} - - {fileID: 21300000, guid: 05378317459e26d43afd6349162b5551, type: 3} + - {fileID: 21300000, guid: b2b0c7897b59e644497ee0a1f294b621, type: 3} + - {fileID: 21300000, guid: 3b26ce89ef305b74bb6c0b06d0bb0150, type: 3} + - {fileID: 21300000, guid: 5fe141b9474d09147a9f941e9f942284, type: 3} + - {fileID: 21300000, guid: 671cbcba3b67d8140a0983c09b42d32d, type: 3} + - {fileID: 21300000, guid: 2bf49b9bae09ce840b5b6b55933aa2db, type: 3} + - {fileID: 21300000, guid: aa05ed1efc4bff542b122864db4b128e, type: 3} + - {fileID: 21300000, guid: 97f544df3c05d4c47b7bbcc27e44a7b7, type: 3} m_PackedSpriteNamesToIndex: - - ProbeIcon - - PlanetIcon_2 - - PlanetIcon_Wide - - ProbeIcon_Wide - - Clockwise_Icon - - AntiClockwise_Icon - - Drag_Icon - - AZ_Icon - - ZA_Icon + - Menu_Flat_Icon - Connector_Bypass + - ProbeIcon - Connector_Multiple + - SortAsc_Icon - Connector_Single - - Menu_Flat_Icon + - AZ_Icon - SortDesc_Icon - - SortAsc_Icon + - AntiClockwise_Icon + - PlanetIcon_Wide + - Drag_Icon + - ZA_Icon + - Clockwise_Icon + - ProbeIcon_Wide + - PlanetIcon_2 m_Tag: UIIcons m_IsVariant: 0 diff --git a/Unity/Better Tracking/Assets/Icons/ZA_Icon.png.meta b/Unity/Better Tracking/Assets/Icons/ZA_Icon.png.meta index 9da776b..fbfe1bf 100644 --- a/Unity/Better Tracking/Assets/Icons/ZA_Icon.png.meta +++ b/Unity/Better Tracking/Assets/Icons/ZA_Icon.png.meta @@ -1,10 +1,9 @@ fileFormatVersion: 2 guid: 671cbcba3b67d8140a0983c09b42d32d -timeCreated: 1521497454 -licenseType: Free TextureImporter: - fileIDToRecycleName: {} - serializedVersion: 4 + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 11 mipmaps: mipMapMode: 0 enableMipMap: 0 @@ -22,6 +21,8 @@ TextureImporter: heightScale: 0.25 normalMapFilter: 0 isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 grayScaleToAlpha: 0 generateCubemap: 6 cubemapConvolution: 0 @@ -32,7 +33,7 @@ TextureImporter: serializedVersion: 2 filterMode: -1 aniso: -1 - mipBias: -1 + mipBias: -100 wrapU: 1 wrapV: -1 wrapW: -1 @@ -44,47 +45,72 @@ TextureImporter: spriteMeshType: 1 alignment: 0 spritePivot: {x: 0.5, y: 0.5} - spriteBorder: {x: 0, y: 0, z: 0, w: 0} spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 spriteTessellationDetail: -1 textureType: 8 textureShape: 1 + singleChannelComponent: 0 maxTextureSizeSet: 0 compressionQualitySet: 0 textureFormatSet: 0 + applyGammaDecoding: 1 platformSettings: - - buildTarget: DefaultTexturePlatform + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Standalone + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Standalone maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 - - buildTarget: Android + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 + - serializedVersion: 3 + buildTarget: Android maxTextureSize: 2048 + resizeAlgorithm: 0 textureFormat: -1 textureCompression: 1 compressionQuality: 50 crunchedCompression: 0 allowsAlphaSplitting: 0 overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 1 spriteSheet: serializedVersion: 2 sprites: [] outline: [] physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll b/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll index 0ab9760..6d2fb27 100644 Binary files a/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll and b/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll differ diff --git a/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll.meta b/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll.meta index d1c60ac..95a30d4 100644 --- a/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll.meta +++ b/Unity/Better Tracking/Assets/Plugins/BetterTracking.Unity.dll.meta @@ -1,34 +1,33 @@ fileFormatVersion: 2 guid: 7eba39e79049ff14dbe8f25273865bbb -timeCreated: 1519936207 -licenseType: Free PluginImporter: + externalObjects: {} serializedVersion: 2 iconMap: {} executionOrder: {} + defineConstraints: [] isPreloaded: 0 isOverridable: 0 + isExplicitlyReferenced: 0 + validateReferences: 1 platformData: - data: - first: - Any: - second: - enabled: 1 - settings: {} - data: - first: - Editor: Editor - second: - enabled: 0 - settings: - DefaultValueInitialized: true - data: - first: - Windows Store Apps: WindowsStoreApps - second: - enabled: 0 - settings: - CPU: AnyCPU + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU userData: assetBundleName: assetBundleVariant: diff --git a/Unity/Better Tracking/Assets/Prefabs/SortHeader.prefab b/Unity/Better Tracking/Assets/Prefabs/SortHeader.prefab index 62ea771..db4acde 100644 --- a/Unity/Better Tracking/Assets/Prefabs/SortHeader.prefab +++ b/Unity/Better Tracking/Assets/Prefabs/SortHeader.prefab @@ -1,22 +1,12 @@ %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: 1079703479649124} - m_IsPrefabParent: 1 --- !u!1 &1004989375832644 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 224340456103479180} m_Layer: 5 @@ -26,12 +16,33 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 0 +--- !u!224 &224340456103479180 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004989375832644} + 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: 224202302427146472} + m_Father: {fileID: 224509435262653102} + 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: -42, y: 0} + m_SizeDelta: {x: 238, y: 36} + m_Pivot: {x: 1, y: 0.5} --- !u!1 &1019205855245556 GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 224507943566314178} - component: {fileID: 222436396552611090} @@ -43,12 +54,69 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!224 &224507943566314178 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019205855245556} + 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: 224040924736694708} + 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: -14, y: -12} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222436396552611090 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019205855245556} + m_CullTransparentMesh: 0 +--- !u!114 &114165051723221096 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1019205855245556} + 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.9117647, g: 0.9117647, b: 0.9117647, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: aa05ed1efc4bff542b122864db4b128e, 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 &1044744574920238 GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 224345554583999664} - component: {fileID: 222585427363577916} @@ -60,12 +128,69 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!224 &224345554583999664 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1044744574920238} + 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: 224098438260143302} + 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: -12} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222585427363577916 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1044744574920238} + m_CullTransparentMesh: 0 +--- !u!114 &114371658814654034 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1044744574920238} + 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.9117647, g: 0.9117647, b: 0.9117647, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 85d52e31a2339f84cb71567ccecd0c90, 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 &1079703479649124 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 224509435262653102} - component: {fileID: 114642158487845274} @@ -78,12 +203,99 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 +--- !u!224 &224509435262653102 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079703479649124} + 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: 224678651573728018} + - {fileID: 224340456103479180} + - {fileID: 224224325816154286} + 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: 5, y: -72} + m_SizeDelta: {x: 280, y: 36} + m_Pivot: {x: 0, y: 1} +--- !u!114 &114642158487845274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079703479649124} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fafe2cfe61f6974895a912c3755e8f1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_AllowSwitchOff: 0 +--- !u!114 &114026044982301434 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079703479649124} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 795088687, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_BodyToggle: {fileID: 114174253124018326} + m_TypeToggle: {fileID: 114514994629153994} + m_CustomToggle: {fileID: 0} + m_DefaultToggle: {fileID: 114812458396416842} + m_SortPrefab: {fileID: 114928148147372180, guid: 4d36941009922194ea7d7e3b6308e77e, + type: 3} + m_DrowDownAnchor: {fileID: 224040924736694708} + m_SortOrderImage: {fileID: 114247475592758098} + m_SortModeImage: {fileID: 114165051723221096} + m_SortAscIcon: {fileID: 21300000, guid: 05378317459e26d43afd6349162b5551, type: 3} + m_SortDescIcon: {fileID: 21300000, guid: 67dd60690bb644649932478781f7893a, type: 3} + m_SortToggle: {fileID: 114704748117980296} + m_SortOrderButton: {fileID: 1313883772128700} + m_SearchField: {fileID: 114672476668687076} + m_TimerAscIcon: {fileID: 21300000, guid: 2bf49b9bae09ce840b5b6b55933aa2db, type: 3} + m_TimerDescIcon: {fileID: 21300000, guid: b2b0c7897b59e644497ee0a1f294b621, type: 3} + m_AlphaAscIcon: {fileID: 21300000, guid: 5962d8983ce79c54c99acc36f0c1007c, type: 3} + m_AlphaDescIcon: {fileID: 21300000, guid: 671cbcba3b67d8140a0983c09b42d32d, type: 3} + m_BodySortIcon: {fileID: 21300000, guid: 3b26ce89ef305b74bb6c0b06d0bb0150, type: 3} + m_TypeSortIcon: {fileID: 21300000, guid: aa05ed1efc4bff542b122864db4b128e, type: 3} +--- !u!95 &95298766197305832 +Animator: + serializedVersion: 3 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1079703479649124} + m_Enabled: 1 + m_Avatar: {fileID: 0} + m_Controller: {fileID: 9100000, guid: f30341019dd97e5468f6e3b2c8158295, type: 2} + m_CullingMode: 0 + m_UpdateMode: 0 + m_ApplyRootMotion: 0 + m_LinearVelocityBlending: 0 + m_WarningMessage: + m_HasTransformHierarchy: 1 + m_AllowConstantClipSamplingOptimization: 1 + m_KeepAnimatorControllerStateOnDisable: 0 --- !u!1 &1116075959901758 GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 224202302427146472} - component: {fileID: 222102756591236912} @@ -99,377 +311,54 @@ GameObject: m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!1 &1145191253219642 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224081636205921096} - - component: {fileID: 222438321610241364} - - component: {fileID: 114430086557355706} - m_Layer: 5 - m_Name: Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1159461579570318 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224677328541265090} - - component: {fileID: 222263478213719990} - - component: {fileID: 114247475592758098} - m_Layer: 5 - m_Name: Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1176582740260148 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224915053735129230} - - component: {fileID: 114352490905562298} - m_Layer: 5 - m_Name: Viewport - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1232667166150616 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224356207379614996} - - component: {fileID: 222579245914629622} - - component: {fileID: 114988076294437434} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1313883772128700 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224403092143504310} - - component: {fileID: 222612027167295598} - - component: {fileID: 114987057516978160} - - component: {fileID: 114479649561120072} - - component: {fileID: 114601146367080808} - m_Layer: 5 - m_Name: SortOrder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1375998054285320 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224527529559244674} - - component: {fileID: 222744671259552484} - - component: {fileID: 114982096257224424} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1492028314266330 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224222954258574500} - - component: {fileID: 222920450723790228} - - component: {fileID: 114927818856671412} - m_Layer: 5 - m_Name: Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1501331473634722 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224577714027378902} - - component: {fileID: 222265925058330976} - - component: {fileID: 114665848465987868} - - component: {fileID: 114509083991614712} - - component: {fileID: 114812458396416842} - m_Layer: 5 - m_Name: DefaultSort - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1536215335229718 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224098438260143302} - - component: {fileID: 222244285330053368} - - component: {fileID: 114105792296782870} - - component: {fileID: 114117730926054076} - - component: {fileID: 114514994629153994} - m_Layer: 5 - m_Name: TypeSort - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1547885476305944 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224856190753668186} - - component: {fileID: 222988819538152208} - - component: {fileID: 114766796620298714} - - component: {fileID: 114888663938833392} - - component: {fileID: 114174253124018326} - m_Layer: 5 - m_Name: BodySort - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1555615630909732 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224584276998871358} - - component: {fileID: 222497491888162432} - - component: {fileID: 114452525705491228} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1582580449496240 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224358381518566570} - - component: {fileID: 222556702507327042} - - component: {fileID: 114266950692220600} - m_Layer: 5 - m_Name: Checkmark - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1627118758140320 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224167669019447722} - - component: {fileID: 222625071045219572} - - component: {fileID: 114217201041328036} - m_Layer: 5 - m_Name: Checkbox - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1677518054841210 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224982495509198078} - - component: {fileID: 222091331057708396} - - component: {fileID: 114303407221724890} - m_Layer: 5 - m_Name: Icon - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1774366262556766 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224215370592247426} - - component: {fileID: 222628251956327088} - - component: {fileID: 114829413656179712} - - component: {fileID: 114152030025960346} - m_Layer: 5 - m_Name: Text - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1777224235642912 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224083800829410114} - - component: {fileID: 222893974617706066} - - component: {fileID: 114336699489116560} - - component: {fileID: 114375137660506780} - m_Layer: 5 - m_Name: Placeholder - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1915934651037344 -GameObject: +--- !u!224 &224202302427146472 +RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224224325816154286} - - component: {fileID: 222331645770500022} - - component: {fileID: 114793791616122270} - - component: {fileID: 114534417980192050} - - component: {fileID: 114785436058095892} - m_Layer: 5 - m_Name: Search - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1957564743260002 -GameObject: + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116075959901758} + 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: 224915053735129230} + m_Father: {fileID: 224340456103479180} + m_RootOrder: 0 + 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: -10, y: 0} + m_SizeDelta: {x: 218, y: 30} + m_Pivot: {x: 1, y: 0.5} +--- !u!222 &222102756591236912 +CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224678651573728018} - m_Layer: 5 - m_Name: SortGroup - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!1 &1973442662781932 -GameObject: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - serializedVersion: 5 - m_Component: - - component: {fileID: 224040924736694708} - - component: {fileID: 222036237456105288} - - component: {fileID: 114012165493529018} - - component: {fileID: 114879491870630286} - - component: {fileID: 114704748117980296} - m_Layer: 5 - m_Name: SortDropDown - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!95 &95298766197305832 -Animator: - serializedVersion: 3 - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1079703479649124} - m_Enabled: 1 - m_Avatar: {fileID: 0} - m_Controller: {fileID: 9100000, guid: f30341019dd97e5468f6e3b2c8158295, type: 2} - m_CullingMode: 0 - m_UpdateMode: 0 - m_ApplyRootMotion: 0 - m_LinearVelocityBlending: 0 - m_WarningMessage: - m_HasTransformHierarchy: 1 - m_AllowConstantClipSamplingOptimization: 1 ---- !u!114 &114012165493529018 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116075959901758} + m_CullTransparentMesh: 0 +--- !u!114 &114826707960503924 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1973442662781932} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116075959901758} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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_Maskable: 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_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} m_Type: 1 m_PreserveAspect: 0 m_FillCenter: 1 @@ -477,97 +366,106 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 ---- !u!114 &114026044982301434 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1079703479649124} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 795088687, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_BodyToggle: {fileID: 114174253124018326} - m_TypeToggle: {fileID: 114514994629153994} - m_CustomToggle: {fileID: 0} - m_DefaultToggle: {fileID: 114812458396416842} - m_SortPrefab: {fileID: 114928148147372180, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - m_DrowDownAnchor: {fileID: 224040924736694708} - m_SortOrderImage: {fileID: 114247475592758098} - m_SortModeImage: {fileID: 114165051723221096} - m_SortAscIcon: {fileID: 21300000, guid: 05378317459e26d43afd6349162b5551, type: 3} - m_SortDescIcon: {fileID: 21300000, guid: 67dd60690bb644649932478781f7893a, type: 3} - m_SortToggle: {fileID: 114704748117980296} - m_SortOrderButton: {fileID: 1313883772128700} - m_SearchField: {fileID: 114672476668687076} - m_TimerAscIcon: {fileID: 21300000, guid: 2bf49b9bae09ce840b5b6b55933aa2db, type: 3} - m_TimerDescIcon: {fileID: 21300000, guid: b2b0c7897b59e644497ee0a1f294b621, type: 3} - m_AlphaAscIcon: {fileID: 21300000, guid: 5962d8983ce79c54c99acc36f0c1007c, type: 3} - m_AlphaDescIcon: {fileID: 21300000, guid: 671cbcba3b67d8140a0983c09b42d32d, type: 3} - m_BodySortIcon: {fileID: 21300000, guid: 3b26ce89ef305b74bb6c0b06d0bb0150, type: 3} - m_TypeSortIcon: {fileID: 21300000, guid: aa05ed1efc4bff542b122864db4b128e, type: 3} ---- !u!114 &114098253643916316 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114258544033912644 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1116075959901758} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_StyleType: 6 ---- !u!114 &114105792296782870 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1536215335229718} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: d199490a83bb2b844b9695cbf13b01ef, 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_Navigation: + m_Mode: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 0 + 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: 114826707960503924} + m_TextComponent: {fileID: 114829413656179712} + m_Placeholder: {fileID: 114336699489116560} + m_ContentType: 0 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 0 + m_LineType: 0 + m_HideMobileInput: 0 + m_CharacterValidation: 0 + m_CharacterLimit: 25 + m_OnEndEdit: 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: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114117730926054076 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + 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 &114672476668687076 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1536215335229718} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116075959901758} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1219123181, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!114 &114098253643916316 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1116075959901758} m_Enabled: 1 m_EditorHideFlags: 0 m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} m_Name: m_EditorClassIdentifier: - m_StyleType: 1 + m_StyleType: 6 --- !u!114 &114120963868620446 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1116075959901758} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -1862395651, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: d0b148fe25e99eb48b9724523833bab1, type: 3} m_Name: m_EditorClassIdentifier: m_Delegates: @@ -586,123 +484,71 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 - m_TypeName: UnityEngine.EventSystems.EventTrigger+TriggerEvent, UnityEngine.UI, - Version=1.0.0.0, Culture=neutral, PublicKeyToken=null - delegates: [] ---- !u!114 &114152030025960346 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1774366262556766} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1282408397, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &114165051723221096 +--- !u!1 &1145191253219642 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224081636205921096} + - component: {fileID: 222438321610241364} + - component: {fileID: 114430086557355706} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224081636205921096 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145191253219642} + 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: 224577714027378902} + 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.5, y: 0} + m_SizeDelta: {x: -19, y: -12} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222438321610241364 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145191253219642} + m_CullTransparentMesh: 0 +--- !u!114 &114430086557355706 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1019205855245556} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1145191253219642} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.9117647, g: 0.9117647, b: 0.9117647, a: 1} m_RaycastTarget: 0 + m_Maskable: 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: 21300000, guid: aa05ed1efc4bff542b122864db4b128e, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114174253124018326 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1547885476305944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, 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: 2 - 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: 114766796620298714} - toggleTransition: 1 - graphic: {fileID: 114452525705491228} - m_Group: {fileID: 114642158487845274} - onValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 114026044982301434} - m_MethodName: SortBody - m_Mode: 0 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_IsOn: 1 ---- !u!114 &114217201041328036 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1627118758140320} - 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_Sprite: {fileID: 21300000, guid: e54b0097e5f0c4f4e93059169a12ed38, type: 3} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -710,25 +556,72 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1159461579570318 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224677328541265090} + - component: {fileID: 222263478213719990} + - component: {fileID: 114247475592758098} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224677328541265090 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159461579570318} + 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: 224403092143504310} + 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: 14, y: 24} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222263478213719990 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1159461579570318} + m_CullTransparentMesh: 0 --- !u!114 &114247475592758098 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1159461579570318} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.9117647, g: 0.9117647, b: 0.9117647, a: 1} m_RaycastTarget: 0 + m_Maskable: 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: 21300000, guid: 05378317459e26d43afd6349162b5551, type: 3} m_Type: 0 m_PreserveAspect: 0 @@ -737,225 +630,125 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 ---- !u!114 &114258544033912644 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116075959901758} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 575553740, guid: f70555f144d8491a825f0804e09c671c, 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: 0 - 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: 114826707960503924} - m_TextComponent: {fileID: 114829413656179712} - m_Placeholder: {fileID: 114336699489116560} - m_ContentType: 0 - m_InputType: 0 - m_AsteriskChar: 42 - m_KeyboardType: 0 - m_LineType: 0 - m_HideMobileInput: 0 - m_CharacterValidation: 0 - m_CharacterLimit: 25 - 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 &114266950692220600 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1582580449496240} - 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: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114303407221724890 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1677518054841210} - 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.9117647, g: 0.9117647, b: 0.9117647, 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_Sprite: {fileID: 21300000, guid: 97f544df3c05d4c47b7bbcc27e44a7b7, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114336699489116560 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1777224235642912} - 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: 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: 10102, guid: 0000000000000000e000000000000000, type: 0} - m_FontSize: 14 - m_FontStyle: 2 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 6 - m_AlignByGeometry: 0 - m_RichText: 1 - m_HorizontalOverflow: 0 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: '...' + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1176582740260148 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224915053735129230} + - component: {fileID: 114352490905562298} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224915053735129230 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1176582740260148} + 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: 224083800829410114} + - {fileID: 224215370592247426} + m_Father: {fileID: 224202302427146472} + 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: -12, y: -3} + m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &114352490905562298 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1176582740260148} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -146154839, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &114371658814654034 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1044744574920238} - 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.9117647, g: 0.9117647, b: 0.9117647, 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_Sprite: {fileID: 21300000, guid: 85d52e31a2339f84cb71567ccecd0c90, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114375137660506780 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1777224235642912} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 1282408397, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: ---- !u!114 &114430086557355706 + m_Padding: {x: 0, y: 0, z: 0, w: 0} + m_Softness: {x: 0, y: 0} +--- !u!1 &1232667166150616 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224356207379614996} + - component: {fileID: 222579245914629622} + - component: {fileID: 114988076294437434} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224356207379614996 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232667166150616} + 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: 224577714027378902} + 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 &222579245914629622 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232667166150616} + m_CullTransparentMesh: 0 +--- !u!114 &114988076294437434 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1145191253219642} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1232667166150616} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} - m_Color: {r: 0.9117647, g: 0.9117647, b: 0.9117647, a: 1} - m_RaycastTarget: 0 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 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: 21300000, guid: e54b0097e5f0c4f4e93059169a12ed38, type: 3} + m_Sprite: {fileID: 0} m_Type: 0 m_PreserveAspect: 0 m_FillCenter: 1 @@ -963,38 +756,91 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 ---- !u!114 &114452525705491228 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &1313883772128700 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224403092143504310} + - component: {fileID: 222612027167295598} + - component: {fileID: 114987057516978160} + - component: {fileID: 114479649561120072} + - component: {fileID: 114601146367080808} + m_Layer: 5 + m_Name: SortOrder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224403092143504310 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1313883772128700} + 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: 224677328541265090} + m_Father: {fileID: 224678651573728018} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -58, y: -2} + m_SizeDelta: {x: 20, y: 32} + m_Pivot: {x: 1, y: 1} +--- !u!222 &222612027167295598 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1313883772128700} + m_CullTransparentMesh: 0 +--- !u!114 &114987057516978160 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1555615630909732} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1313883772128700} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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_Maskable: 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_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 &114479649561120072 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1313883772128700} m_Enabled: 1 m_EditorHideFlags: 0 @@ -1002,27 +848,16 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: m_StyleType: 3 ---- !u!114 &114509083991614712 +--- !u!114 &114601146367080808 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1501331473634722} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1313883772128700} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_StyleType: 1 ---- !u!114 &114514994629153994 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1536215335229718} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: @@ -1036,29 +871,29 @@ MonoBehaviour: 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: 114105792296782870} - toggleTransition: 1 - graphic: {fileID: 114982096257224424} - m_Group: {fileID: 114642158487845274} - onValueChanged: + m_TargetGraphic: {fileID: 114987057516978160} + m_OnClick: m_PersistentCalls: m_Calls: - m_Target: {fileID: 114026044982301434} - m_MethodName: SortType - m_Mode: 0 + m_MethodName: ToggleSortOrder + m_Mode: 1 m_Arguments: m_ObjectArgument: {fileID: 0} m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine @@ -1067,104 +902,222 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_IsOn: 0 ---- !u!114 &114534417980192050 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1915934651037344} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_StyleType: 1 ---- !u!114 &114601146367080808 +--- !u!1 &1375998054285320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224527529559244674} + - component: {fileID: 222744671259552484} + - component: {fileID: 114982096257224424} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224527529559244674 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375998054285320} + 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: 224098438260143302} + 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 &222744671259552484 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375998054285320} + m_CullTransparentMesh: 0 +--- !u!114 &114982096257224424 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1313883772128700} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1375998054285320} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, 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: 2 - 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: 114987057516978160} - m_OnClick: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 114026044982301434} - m_MethodName: ToggleSortOrder - m_Mode: 1 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null ---- !u!114 &114642158487845274 + 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 &1492028314266330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224222954258574500} + - component: {fileID: 222920450723790228} + - component: {fileID: 114927818856671412} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224222954258574500 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492028314266330} + 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: 224224325816154286} + 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: -10, y: -10} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222920450723790228 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492028314266330} + m_CullTransparentMesh: 0 +--- !u!114 &114927818856671412 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1079703479649124} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1492028314266330} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -1184210157, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: - m_AllowSwitchOff: 0 + m_Material: {fileID: 0} + m_Color: {r: 0.9117647, g: 0.9117647, b: 0.9117647, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: f5d9f2105884db9498ed0e128e69a85b, 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 &1501331473634722 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224577714027378902} + - component: {fileID: 222265925058330976} + - component: {fileID: 114665848465987868} + - component: {fileID: 114509083991614712} + - component: {fileID: 114812458396416842} + m_Layer: 5 + m_Name: DefaultSort + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224577714027378902 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501331473634722} + 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: 224356207379614996} + - {fileID: 224081636205921096} + m_Father: {fileID: 224678651573728018} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 105, y: -2} + m_SizeDelta: {x: 40, y: 32} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222265925058330976 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501331473634722} + m_CullTransparentMesh: 0 --- !u!114 &114665848465987868 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1501331473634722} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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_Maskable: 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: 0 @@ -1173,26 +1126,31 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 ---- !u!114 &114672476668687076 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114509083991614712 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116075959901758} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501331473634722} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1219123181, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} m_Name: m_EditorClassIdentifier: ---- !u!114 &114704748117980296 + m_StyleType: 1 +--- !u!114 &114812458396416842 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1973442662781932} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1501331473634722} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: @@ -1206,28 +1164,31 @@ MonoBehaviour: 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: 114012165493529018} + m_TargetGraphic: {fileID: 114665848465987868} toggleTransition: 1 - graphic: {fileID: 114217201041328036} - m_Group: {fileID: 0} + graphic: {fileID: 114988076294437434} + m_Group: {fileID: 114642158487845274} onValueChanged: m_PersistentCalls: m_Calls: - m_Target: {fileID: 114026044982301434} - m_MethodName: ToggleSortMenu + m_MethodName: SortDefault m_Mode: 0 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -1237,111 +1198,75 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null m_IsOn: 0 ---- !u!114 &114766796620298714 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1547885476305944} - 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: 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 ---- !u!114 &114785436058095892 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1915934651037344} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, 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: 2 - 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: 114793791616122270} - toggleTransition: 1 - graphic: {fileID: 114266950692220600} - m_Group: {fileID: 0} - onValueChanged: - m_PersistentCalls: - m_Calls: - - m_Target: {fileID: 114026044982301434} - m_MethodName: ToggleSearch - m_Mode: 0 - m_Arguments: - m_ObjectArgument: {fileID: 0} - m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine - m_IntArgument: 0 - m_FloatArgument: 0 - m_StringArgument: - m_BoolArgument: 0 - m_CallState: 2 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null - m_IsOn: 0 ---- !u!114 &114793791616122270 +--- !u!1 &1536215335229718 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224098438260143302} + - component: {fileID: 222244285330053368} + - component: {fileID: 114105792296782870} + - component: {fileID: 114117730926054076} + - component: {fileID: 114514994629153994} + m_Layer: 5 + m_Name: TypeSort + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224098438260143302 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536215335229718} + 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: 224527529559244674} + - {fileID: 224345554583999664} + m_Father: {fileID: 224678651573728018} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 55, y: -2} + m_SizeDelta: {x: 40, y: 32} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222244285330053368 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536215335229718} + m_CullTransparentMesh: 0 +--- !u!114 &114105792296782870 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1915934651037344} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536215335229718} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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_Maskable: 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: 0 @@ -1350,15 +1275,31 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 ---- !u!114 &114812458396416842 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &114117730926054076 MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1501331473634722} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536215335229718} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_StyleType: 1 +--- !u!114 &114514994629153994 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1536215335229718} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 2109663825, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: @@ -1372,28 +1313,31 @@ MonoBehaviour: 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: 114665848465987868} + m_TargetGraphic: {fileID: 114105792296782870} toggleTransition: 1 - graphic: {fileID: 114988076294437434} + graphic: {fileID: 114982096257224424} m_Group: {fileID: 114642158487845274} onValueChanged: m_PersistentCalls: m_Calls: - m_Target: {fileID: 114026044982301434} - m_MethodName: SortDefault + m_MethodName: SortType m_Mode: 0 m_Arguments: m_ObjectArgument: {fileID: 0} @@ -1403,538 +1347,186 @@ MonoBehaviour: m_StringArgument: m_BoolArgument: 0 m_CallState: 2 - m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null m_IsOn: 0 ---- !u!114 &114826707960503924 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116075959901758} - 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 ---- !u!114 &114829413656179712 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1774366262556766} - 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: 14 - m_FontStyle: 0 - m_BestFit: 0 - m_MinSize: 10 - m_MaxSize: 40 - m_Alignment: 3 - m_AlignByGeometry: 0 - m_RichText: 0 - m_HorizontalOverflow: 1 - m_VerticalOverflow: 0 - m_LineSpacing: 1 - m_Text: ---- !u!114 &114879491870630286 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1973442662781932} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_StyleType: 1 ---- !u!114 &114888663938833392 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1547885476305944} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} - m_Name: - m_EditorClassIdentifier: - m_StyleType: 1 ---- !u!114 &114927818856671412 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1492028314266330} - 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.9117647, g: 0.9117647, b: 0.9117647, 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_Sprite: {fileID: 21300000, guid: f5d9f2105884db9498ed0e128e69a85b, type: 3} - m_Type: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114982096257224424 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1375998054285320} - 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: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!114 &114987057516978160 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1313883772128700} - 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: 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 ---- !u!114 &114988076294437434 -MonoBehaviour: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1232667166150616} - 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: 0 - m_PreserveAspect: 0 - m_FillCenter: 1 - m_FillMethod: 4 - m_FillAmount: 1 - m_FillClockwise: 1 - m_FillOrigin: 0 ---- !u!222 &222036237456105288 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1973442662781932} ---- !u!222 &222091331057708396 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1677518054841210} ---- !u!222 &222102756591236912 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116075959901758} ---- !u!222 &222244285330053368 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1536215335229718} ---- !u!222 &222263478213719990 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1159461579570318} ---- !u!222 &222265925058330976 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1501331473634722} ---- !u!222 &222331645770500022 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1915934651037344} ---- !u!222 &222436396552611090 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1019205855245556} ---- !u!222 &222438321610241364 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1145191253219642} ---- !u!222 &222497491888162432 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1555615630909732} ---- !u!222 &222556702507327042 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1582580449496240} ---- !u!222 &222579245914629622 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1232667166150616} ---- !u!222 &222585427363577916 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1044744574920238} ---- !u!222 &222612027167295598 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1313883772128700} ---- !u!222 &222625071045219572 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1627118758140320} ---- !u!222 &222628251956327088 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1774366262556766} ---- !u!222 &222744671259552484 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1375998054285320} ---- !u!222 &222893974617706066 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1777224235642912} ---- !u!222 &222920450723790228 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1492028314266330} ---- !u!222 &222988819538152208 -CanvasRenderer: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1547885476305944} ---- !u!224 &224040924736694708 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1973442662781932} - 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: 224167669019447722} - - {fileID: 224507943566314178} - m_Father: {fileID: 224678651573728018} - m_RootOrder: 4 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -8, y: -2} - m_SizeDelta: {x: 50, y: 32} - m_Pivot: {x: 1, y: 1} ---- !u!224 &224081636205921096 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1145191253219642} - 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: 224577714027378902} - 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.5, y: 0} - m_SizeDelta: {x: -19, y: -12} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224083800829410114 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1777224235642912} - 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: 224915053735129230} - 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 &224098438260143302 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1536215335229718} - 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: 224527529559244674} - - {fileID: 224345554583999664} - m_Father: {fileID: 224678651573728018} - m_RootOrder: 1 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 55, y: -2} - m_SizeDelta: {x: 40, y: 32} - m_Pivot: {x: 0, y: 1} ---- !u!224 &224167669019447722 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1627118758140320} - 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: 224040924736694708} - 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 &224202302427146472 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1116075959901758} - 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: 224915053735129230} - m_Father: {fileID: 224340456103479180} - m_RootOrder: 0 - 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: -10, y: 0} - m_SizeDelta: {x: 218, y: 30} - m_Pivot: {x: 1, y: 0.5} ---- !u!224 &224215370592247426 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1774366262556766} - 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: 224915053735129230} - 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: 0, y: 0} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224222954258574500 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1492028314266330} - 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: 224224325816154286} - 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: -10, y: -10} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224224325816154286 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1915934651037344} - 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: 224358381518566570} - - {fileID: 224222954258574500} - m_Father: {fileID: 224509435262653102} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 1} - m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -5, y: -2} - m_SizeDelta: {x: 32, y: 32} - m_Pivot: {x: 1, y: 1} ---- !u!224 &224340456103479180 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1004989375832644} - 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: 224202302427146472} - m_Father: {fileID: 224509435262653102} - 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: -42, y: 0} - m_SizeDelta: {x: 238, y: 36} - m_Pivot: {x: 1, y: 0.5} ---- !u!224 &224345554583999664 +--- !u!1 &1547885476305944 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224856190753668186} + - component: {fileID: 222988819538152208} + - component: {fileID: 114766796620298714} + - component: {fileID: 114888663938833392} + - component: {fileID: 114174253124018326} + m_Layer: 5 + m_Name: BodySort + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224856190753668186 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1044744574920238} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1547885476305944} + 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: 224098438260143302} - m_RootOrder: 1 + m_Children: + - {fileID: 224584276998871358} + - {fileID: 224982495509198078} + m_Father: {fileID: 224678651573728018} + 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: -12} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224356207379614996 + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 5, y: -2} + m_SizeDelta: {x: 40, y: 32} + m_Pivot: {x: 0, y: 1} +--- !u!222 &222988819538152208 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1547885476305944} + m_CullTransparentMesh: 0 +--- !u!114 &114766796620298714 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1547885476305944} + 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_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 &114888663938833392 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1547885476305944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_StyleType: 1 +--- !u!114 &114174253124018326 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1547885476305944} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 2 + 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: 114766796620298714} + toggleTransition: 1 + graphic: {fileID: 114452525705491228} + m_Group: {fileID: 114642158487845274} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114026044982301434} + m_MethodName: SortBody + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_IsOn: 1 +--- !u!1 &1555615630909732 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224584276998871358} + - component: {fileID: 222497491888162432} + - component: {fileID: 114452525705491228} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224584276998871358 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1232667166150616} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555615630909732} 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: 224577714027378902} + m_Father: {fileID: 224856190753668186} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1942,11 +1534,67 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222497491888162432 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555615630909732} + m_CullTransparentMesh: 0 +--- !u!114 &114452525705491228 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1555615630909732} + 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_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 &1582580449496240 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224358381518566570} + - component: {fileID: 222556702507327042} + - component: {fileID: 114266950692220600} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!224 &224358381518566570 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1582580449496240} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1960,113 +1608,313 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224403092143504310 +--- !u!222 &222556702507327042 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582580449496240} + m_CullTransparentMesh: 0 +--- !u!114 &114266950692220600 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1582580449496240} + 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_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 &1627118758140320 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224167669019447722} + - component: {fileID: 222625071045219572} + - component: {fileID: 114217201041328036} + m_Layer: 5 + m_Name: Checkbox + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224167669019447722 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1313883772128700} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627118758140320} 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: 224677328541265090} - m_Father: {fileID: 224678651573728018} - m_RootOrder: 3 + m_Children: [] + m_Father: {fileID: 224040924736694708} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 1, y: 1} + m_AnchorMin: {x: 0, y: 0} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: -58, y: -2} - m_SizeDelta: {x: 20, y: 32} - m_Pivot: {x: 1, y: 1} ---- !u!224 &224507943566314178 + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &222625071045219572 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627118758140320} + m_CullTransparentMesh: 0 +--- !u!114 &114217201041328036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1627118758140320} + 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_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 &1677518054841210 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224982495509198078} + - component: {fileID: 222091331057708396} + - component: {fileID: 114303407221724890} + m_Layer: 5 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224982495509198078 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1019205855245556} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677518054841210} 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: 224040924736694708} + m_Father: {fileID: 224856190753668186} 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: -14, y: -12} + m_AnchoredPosition: {x: 0.5, y: 0} + m_SizeDelta: {x: -15, y: -8} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224509435262653102 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1079703479649124} - 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: 224678651573728018} - - {fileID: 224340456103479180} - - {fileID: 224224325816154286} - 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: 5, y: -36} - m_SizeDelta: {x: 280, y: 36} - m_Pivot: {x: 0, y: 1} ---- !u!224 &224527529559244674 +--- !u!222 &222091331057708396 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677518054841210} + m_CullTransparentMesh: 0 +--- !u!114 &114303407221724890 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1677518054841210} + 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.9117647, g: 0.9117647, b: 0.9117647, a: 1} + m_RaycastTarget: 0 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 97f544df3c05d4c47b7bbcc27e44a7b7, 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 &1774366262556766 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224215370592247426} + - component: {fileID: 222628251956327088} + - component: {fileID: 114829413656179712} + - component: {fileID: 114152030025960346} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224215370592247426 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1375998054285320} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774366262556766} + 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: 224098438260143302} - m_RootOrder: 0 + m_Father: {fileID: 224915053735129230} + 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: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224577714027378902 +--- !u!222 &222628251956327088 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774366262556766} + m_CullTransparentMesh: 0 +--- !u!114 &114829413656179712 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774366262556766} + 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_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 0 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 3 + m_AlignByGeometry: 0 + m_RichText: 0 + m_HorizontalOverflow: 1 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: +--- !u!114 &114152030025960346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1774366262556766} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1282408397, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1777224235642912 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224083800829410114} + - component: {fileID: 222893974617706066} + - component: {fileID: 114336699489116560} + - component: {fileID: 114375137660506780} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224083800829410114 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1501331473634722} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777224235642912} 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: 224356207379614996} - - {fileID: 224081636205921096} - m_Father: {fileID: 224678651573728018} - m_RootOrder: 2 - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 1} - m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 105, y: -2} - m_SizeDelta: {x: 40, y: 32} - m_Pivot: {x: 0, y: 1} ---- !u!224 &224584276998871358 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1555615630909732} - 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: 224856190753668186} + m_Father: {fileID: 224915053735129230} m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -2074,29 +1922,230 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224677328541265090 +--- !u!222 &222893974617706066 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777224235642912} + m_CullTransparentMesh: 0 +--- !u!114 &114336699489116560 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777224235642912} + 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: 0.5} + m_RaycastTarget: 1 + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_FontData: + m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} + m_FontSize: 14 + m_FontStyle: 2 + m_BestFit: 0 + m_MinSize: 10 + m_MaxSize: 40 + m_Alignment: 6 + m_AlignByGeometry: 0 + m_RichText: 1 + m_HorizontalOverflow: 0 + m_VerticalOverflow: 0 + m_LineSpacing: 1 + m_Text: ... +--- !u!114 &114375137660506780 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1777224235642912} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 1282408397, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1 &1915934651037344 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224224325816154286} + - component: {fileID: 222331645770500022} + - component: {fileID: 114793791616122270} + - component: {fileID: 114534417980192050} + - component: {fileID: 114785436058095892} + m_Layer: 5 + m_Name: Search + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224224325816154286 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1159461579570318} - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915934651037344} + 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: 224403092143504310} - m_RootOrder: 0 + m_Children: + - {fileID: 224358381518566570} + - {fileID: 224222954258574500} + m_Father: {fileID: 224509435262653102} + m_RootOrder: 2 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: 14, y: 24} - m_Pivot: {x: 0.5, y: 0.5} + m_AnchorMin: {x: 1, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -5, y: -2} + m_SizeDelta: {x: 32, y: 32} + m_Pivot: {x: 1, y: 1} +--- !u!222 &222331645770500022 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915934651037344} + m_CullTransparentMesh: 0 +--- !u!114 &114793791616122270 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915934651037344} + 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_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 &114534417980192050 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915934651037344} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_StyleType: 1 +--- !u!114 &114785436058095892 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1915934651037344} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 2 + 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: 114793791616122270} + toggleTransition: 1 + graphic: {fileID: 114266950692220600} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114026044982301434} + m_MethodName: ToggleSearch + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_IsOn: 0 +--- !u!1 &1957564743260002 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224678651573728018} + m_Layer: 5 + m_Name: SortGroup + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 --- !u!224 &224678651573728018 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1957564743260002} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2115,61 +2164,152 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 238, y: 36} m_Pivot: {x: 0, y: 0.5} ---- !u!224 &224856190753668186 +--- !u!1 &1973442662781932 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 224040924736694708} + - component: {fileID: 222036237456105288} + - component: {fileID: 114012165493529018} + - component: {fileID: 114879491870630286} + - component: {fileID: 114704748117980296} + m_Layer: 5 + m_Name: SortDropDown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &224040924736694708 RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1547885476305944} + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973442662781932} 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: 224584276998871358} - - {fileID: 224982495509198078} + - {fileID: 224167669019447722} + - {fileID: 224507943566314178} m_Father: {fileID: 224678651573728018} - 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: 5, y: -2} - m_SizeDelta: {x: 40, y: 32} - m_Pivot: {x: 0, y: 1} ---- !u!224 &224915053735129230 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1176582740260148} - 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: 224083800829410114} - - {fileID: 224215370592247426} - m_Father: {fileID: 224202302427146472} - 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: -12, y: -3} - m_Pivot: {x: 0.5, y: 0.5} ---- !u!224 &224982495509198078 -RectTransform: - m_ObjectHideFlags: 1 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 100100000} - m_GameObject: {fileID: 1677518054841210} - 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: 224856190753668186} - m_RootOrder: 1 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} - m_AnchorMin: {x: 0, y: 0} + m_AnchorMin: {x: 1, y: 1} m_AnchorMax: {x: 1, y: 1} - m_AnchoredPosition: {x: 0.5, y: 0} - m_SizeDelta: {x: -15, y: -8} - m_Pivot: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -8, y: -2} + m_SizeDelta: {x: 50, y: 32} + m_Pivot: {x: 1, y: 1} +--- !u!222 &222036237456105288 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973442662781932} + m_CullTransparentMesh: 0 +--- !u!114 &114012165493529018 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973442662781932} + 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_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 &114879491870630286 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973442662781932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: -1929307367, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: + m_StyleType: 1 +--- !u!114 &114704748117980296 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1973442662781932} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, 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: 2 + 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: 114012165493529018} + toggleTransition: 1 + graphic: {fileID: 114217201041328036} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: + - m_Target: {fileID: 114026044982301434} + m_MethodName: ToggleSortMenu + m_Mode: 0 + m_Arguments: + m_ObjectArgument: {fileID: 0} + m_ObjectArgumentAssemblyTypeName: UnityEngine.Object, UnityEngine + m_IntArgument: 0 + m_FloatArgument: 0 + m_StringArgument: + m_BoolArgument: 0 + m_CallState: 2 + m_IsOn: 0 diff --git a/Unity/Better Tracking/Assets/UI.unity b/Unity/Better Tracking/Assets/UI.unity index 4a0290e..43fad68 100644 --- a/Unity/Better Tracking/Assets/UI.unity +++ b/Unity/Better Tracking/Assets/UI.unity @@ -13,7 +13,7 @@ OcclusionCullingSettings: --- !u!104 &2 RenderSettings: m_ObjectHideFlags: 0 - serializedVersion: 8 + serializedVersion: 9 m_Fog: 0 m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} m_FogMode: 3 @@ -39,6 +39,7 @@ RenderSettings: m_CustomReflection: {fileID: 0} m_Sun: {fileID: 0} m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1} + m_UseRadianceAmbientProbe: 0 --- !u!157 &3 LightmapSettings: m_ObjectHideFlags: 0 @@ -49,20 +50,19 @@ LightmapSettings: m_BounceScale: 1 m_IndirectOutputScale: 1 m_AlbedoBoost: 1 - m_TemporalCoherenceThreshold: 1 m_EnvironmentLightingMode: 0 m_EnableBakedLightmaps: 1 m_EnableRealtimeLightmaps: 1 m_LightmapEditorSettings: - serializedVersion: 9 + serializedVersion: 12 m_Resolution: 2 m_BakeResolution: 40 - m_TextureWidth: 1024 - m_TextureHeight: 1024 + m_AtlasSize: 1024 m_AO: 0 m_AOMaxDistance: 1 m_CompAOExponent: 1 m_CompAOExponentDirect: 0 + m_ExtractAmbientOcclusion: 0 m_Padding: 2 m_LightmapParameters: {fileID: 0} m_LightmapsBakeMode: 1 @@ -77,15 +77,26 @@ LightmapSettings: m_PVRDirectSampleCount: 32 m_PVRSampleCount: 500 m_PVRBounces: 2 - m_PVRFiltering: 0 - m_PVRFilteringMode: 1 + m_PVREnvironmentSampleCount: 500 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 2 + m_PVRDenoiserTypeDirect: 0 + m_PVRDenoiserTypeIndirect: 0 + m_PVRDenoiserTypeAO: 0 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 0 m_PVRCulling: 1 m_PVRFilteringGaussRadiusDirect: 1 m_PVRFilteringGaussRadiusIndirect: 5 m_PVRFilteringGaussRadiusAO: 2 - m_PVRFilteringAtrousColorSigma: 1 - m_PVRFilteringAtrousNormalSigma: 1 - m_PVRFilteringAtrousPositionSigma: 1 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 m_LightingDataAsset: {fileID: 0} m_UseShadowmask: 1 --- !u!196 &4 @@ -107,13 +118,16 @@ NavMeshSettings: manualTileSize: 0 tileSize: 256 accuratePlacement: 0 + debug: + m_Flags: 0 m_NavMeshData: {fileID: 0} --- !u!1 &3773566 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 3773567} m_Layer: 5 @@ -126,8 +140,9 @@ GameObject: --- !u!224 &3773567 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 3773566} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -145,9 +160,10 @@ RectTransform: --- !u!1 &20480516 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 20480517} - component: {fileID: 20480519} @@ -162,8 +178,9 @@ GameObject: --- !u!224 &20480517 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 20480516} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -180,22 +197,22 @@ RectTransform: --- !u!114 &20480518 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 20480516} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.78676474, g: 0.6999494, b: 0, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -204,611 +221,612 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &20480519 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 20480516} + m_CullTransparentMesh: 0 --- !u!1001 &40931376 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 266903591} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (2) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1001 &54684421 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1243286170} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (3) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -50 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (3) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -50 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1001 &71586506 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 714235846} m_Modifications: - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1642997649195054, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} + propertyPath: m_Name + value: MoonGroup (1) objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -260 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 210 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.y + type: 3} + propertyPath: m_AnchoredPosition.y + value: -260 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_SizeDelta.y + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -60 + objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 1642997649195054, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - propertyPath: m_Name - value: MoonGroup (1) + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_SizeDelta.y + value: 60 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: -30 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} +--- !u!1001 &75281554 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1399615592} + m_Modifications: + - target: {fileID: 1896166732951740, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} + propertyPath: m_Name + value: HeaderGroup (1) + objectReference: {fileID: 0} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.y - value: 60 - objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -60 + value: 150 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.y value: 150 objectReference: {fileID: 0} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - m_IsPrefabParent: 0 ---- !u!1001 &75281554 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1399615592} - m_Modifications: - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -60 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.x - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.z + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -730 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 210 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1896166732951740, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - propertyPath: m_Name - value: HeaderGroup (1) + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -730 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -30 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -60 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 150 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 150 + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} --- !u!1 &77248101 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 77248102} - component: {fileID: 77248104} @@ -824,8 +842,9 @@ GameObject: --- !u!224 &77248102 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 77248101} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -844,12 +863,13 @@ RectTransform: --- !u!114 &77248103 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 77248101} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalFit: 0 @@ -857,12 +877,13 @@ MonoBehaviour: --- !u!114 &77248104 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 77248101} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} m_Name: m_EditorClassIdentifier: m_Padding: @@ -876,251 +897,254 @@ MonoBehaviour: m_ChildForceExpandHeight: 0 m_ChildControlWidth: 1 m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 --- !u!114 &77248105 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 77248101} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -1184210157, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 2fafe2cfe61f6974895a912c3755e8f1, type: 3} m_Name: m_EditorClassIdentifier: m_AllowSwitchOff: 1 --- !u!224 &81839974 stripped RectTransform: - m_PrefabParentObject: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - m_PrefabInternal: {fileID: 768169615} + m_CorrespondingSourceObject: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, + type: 3} + m_PrefabInstance: {fileID: 768169615} + m_PrefabAsset: {fileID: 0} --- !u!1001 &95787667 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1243286170} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (1) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (1) + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1001 &101236131 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.y + - target: {fileID: 1763762444772044, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 4 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_RootOrder - value: 4 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1763762444772044, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 2} - propertyPath: m_IsActive + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 3} --- !u!224 &113552200 stripped RectTransform: - m_PrefabParentObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 1926373719} + m_CorrespondingSourceObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 1926373719} + m_PrefabAsset: {fileID: 0} --- !u!1 &121975249 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 121975254} - component: {fileID: 121975253} - - component: {fileID: 121975252} - component: {fileID: 121975251} - component: {fileID: 121975250} m_Layer: 0 @@ -1133,34 +1157,36 @@ GameObject: --- !u!81 &121975250 AudioListener: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 121975249} m_Enabled: 1 --- !u!124 &121975251 Behaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - m_GameObject: {fileID: 121975249} - m_Enabled: 1 ---- !u!92 &121975252 -Behaviour: - m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 121975249} m_Enabled: 1 --- !u!20 &121975253 Camera: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 121975249} m_Enabled: 1 serializedVersion: 2 m_ClearFlags: 1 m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_FocalLength: 50 m_NormalizedViewPortRect: serializedVersion: 2 x: 0 @@ -1182,16 +1208,17 @@ Camera: m_TargetEye: 3 m_HDR: 1 m_AllowMSAA: 1 + m_AllowDynamicResolution: 0 m_ForceIntoRT: 0 m_OcclusionCulling: 1 m_StereoConvergence: 10 m_StereoSeparation: 0.022 - m_StereoMirrorMode: 0 --- !u!4 &121975254 Transform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 121975249} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 1, z: -10} @@ -1202,366 +1229,382 @@ Transform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!224 &129581967 stripped RectTransform: - m_PrefabParentObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 971455944} + m_CorrespondingSourceObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 971455944} + m_PrefabAsset: {fileID: 0} --- !u!224 &199048431 stripped RectTransform: - m_PrefabParentObject: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - m_PrefabInternal: {fileID: 101236131} + m_CorrespondingSourceObject: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + m_PrefabInstance: {fileID: 101236131} + m_PrefabAsset: {fileID: 0} --- !u!224 &203010959 stripped RectTransform: - m_PrefabParentObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 963911576} + m_CorrespondingSourceObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 963911576} + m_PrefabAsset: {fileID: 0} --- !u!114 &203010960 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 963911576} + m_CorrespondingSourceObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 963911576} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: -142179781, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!114 &220022306 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 971455944} + m_CorrespondingSourceObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 971455944} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 619713579, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!224 &226032135 stripped RectTransform: - m_PrefabParentObject: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - m_PrefabInternal: {fileID: 1547176704} + m_CorrespondingSourceObject: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, + type: 3} + m_PrefabInstance: {fileID: 1547176704} + m_PrefabAsset: {fileID: 0} --- !u!1001 &260698788 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 77248102} m_Modifications: - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.z - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.x - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.y + value: 200 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 + objectReference: {fileID: 0} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -470 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.y + value: 670 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -60 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 730 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -30 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 60 + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.y - value: -60 + value: 0 objectReference: {fileID: 0} - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 470 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -470 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.y - value: 670 + value: 470 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.y - value: 200 + value: 60 + objectReference: {fileID: 0} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 + objectReference: {fileID: 0} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} --- !u!224 &266903591 stripped RectTransform: - m_PrefabParentObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 963911576} + m_CorrespondingSourceObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 963911576} + m_PrefabAsset: {fileID: 0} --- !u!1001 &270321038 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + type: 3} + propertyPath: m_RootOrder + value: 8 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 8 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_IsActive + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1 &271130004 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 271130005} - component: {fileID: 271130007} @@ -1576,8 +1619,9 @@ GameObject: --- !u!224 &271130005 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 271130004} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -1594,22 +1638,22 @@ RectTransform: --- !u!114 &271130006 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 271130004} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.16971238, g: 0.27981296, b: 0.31617647, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -1618,548 +1662,555 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &271130007 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 271130004} + m_CullTransparentMesh: 0 --- !u!1001 &334554387 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 671295926} m_Modifications: + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_SizeDelta.y + value: 50 + objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_SizeDelta.y - value: 50 + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} +--- !u!1001 &349051652 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1688347543} + m_Modifications: + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (1) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y + type: 3} + propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y + type: 3} + propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 ---- !u!1001 &349051652 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1688347543} - m_Modifications: + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_SizeDelta.y + value: 50 + objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: -150 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_SizeDelta.y - value: 50 + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} +--- !u!1001 &453214326 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 77248102} + m_Modifications: + - target: {fileID: 1896166732951740, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} + propertyPath: m_Name + value: HeaderGroup (1) objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.y + value: 150 + objectReference: {fileID: 0} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (1) + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 ---- !u!1001 &453214326 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 77248102} - m_Modifications: - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.y + value: 150 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.z - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -60 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.z - value: 0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -730 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 210 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1896166732951740, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - propertyPath: m_Name - value: HeaderGroup (1) + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -730 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -30 - objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -60 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 150 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 150 + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} --- !u!114 &459075214 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 71586506} + m_CorrespondingSourceObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 71586506} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 619713579, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &465913010 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 878834193} m_Modifications: + - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 1607860693} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 1607860693} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 3} --- !u!1 &584468517 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 584468518} - component: {fileID: 584468520} @@ -2174,8 +2225,9 @@ GameObject: --- !u!224 &584468518 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 584468517} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2195,22 +2247,22 @@ RectTransform: --- !u!114 &584468519 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 584468517} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.31617647, g: 1, b: 0.40578103, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -2219,249 +2271,259 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &584468520 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 584468517} + m_CullTransparentMesh: 0 --- !u!1001 &590856213 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 129581967} m_Modifications: + - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 220022306} + - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} - - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 220022306} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} --- !u!224 &606163453 stripped RectTransform: - m_PrefabParentObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 75281554} + m_CorrespondingSourceObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 75281554} + m_PrefabAsset: {fileID: 0} --- !u!114 &606163454 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 75281554} + m_CorrespondingSourceObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 75281554} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: -142179781, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &616893159 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1210165746} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (3) objectReference: {fileID: 0} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + type: 3} + propertyPath: m_RootOrder + value: 3 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -150 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (3) + type: 3} + propertyPath: m_AnchoredPosition.y + value: -150 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1 &651935091 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 651935092} - component: {fileID: 651935094} @@ -2476,8 +2538,9 @@ GameObject: --- !u!224 &651935092 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 651935091} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2494,22 +2557,22 @@ RectTransform: --- !u!114 &651935093 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 651935091} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.5514706, g: 0.16219722, b: 0.16219722, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -2518,28 +2581,35 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &651935094 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 651935091} + m_CullTransparentMesh: 0 --- !u!224 &669624292 stripped RectTransform: - m_PrefabParentObject: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - m_PrefabInternal: {fileID: 270321038} + m_CorrespondingSourceObject: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + m_PrefabInstance: {fileID: 270321038} + m_PrefabAsset: {fileID: 0} --- !u!224 &671295926 stripped RectTransform: - m_PrefabParentObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 1926373719} + m_CorrespondingSourceObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 1926373719} + m_PrefabAsset: {fileID: 0} --- !u!1 &692357224 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 692357226} - component: {fileID: 692357225} @@ -2553,16 +2623,19 @@ GameObject: --- !u!108 &692357225 Light: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 692357224} m_Enabled: 1 - serializedVersion: 8 + serializedVersion: 10 m_Type: 1 + m_Shape: 0 m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1} m_Intensity: 1 m_Range: 10 m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 m_CookieSize: 10 m_Shadows: m_Type: 2 @@ -2572,6 +2645,24 @@ Light: m_Bias: 0.05 m_NormalBias: 0.4 m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 m_Cookie: {fileID: 0} m_DrawHalo: 0 m_Flare: {fileID: 0} @@ -2579,18 +2670,23 @@ Light: m_CullingMask: serializedVersion: 2 m_Bits: 4294967295 + m_RenderingLayerMask: 1 m_Lightmapping: 4 + m_LightShadowCasterMode: 0 m_AreaSize: {x: 1, y: 1} m_BounceIntensity: 1 m_ColorTemperature: 6570 m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 m_ShadowRadius: 0 m_ShadowAngle: 0 --- !u!4 &692357226 Transform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 692357224} m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} m_LocalPosition: {x: 0, y: 3, z: 0} @@ -2601,25 +2697,29 @@ Transform: m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} --- !u!224 &714235846 stripped RectTransform: - m_PrefabParentObject: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 963911576} + m_CorrespondingSourceObject: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 963911576} + m_PrefabAsset: {fileID: 0} --- !u!224 &739413636 stripped RectTransform: - m_PrefabParentObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 71586506} + m_CorrespondingSourceObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 71586506} + m_PrefabAsset: {fileID: 0} --- !u!224 &744070430 stripped RectTransform: - m_PrefabParentObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 75281554} + m_CorrespondingSourceObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 75281554} + m_PrefabAsset: {fileID: 0} --- !u!1 &748843140 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 748843141} - component: {fileID: 748843143} @@ -2634,8 +2734,9 @@ GameObject: --- !u!224 &748843141 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 748843140} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -2653,22 +2754,22 @@ RectTransform: --- !u!114 &748843142 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 748843140} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.05644465, g: 0.2647059, b: 0.08373408, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -2677,353 +2778,355 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &748843143 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 748843140} + m_CullTransparentMesh: 0 --- !u!1001 &755770618 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 739413636} m_Modifications: - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 459075214} + - target: {fileID: 114474820105768212, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_Text + value: Minmus objectReference: {fileID: 0} + - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114474820105768212, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Text - value: Minmus + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} - - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 459075214} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} --- !u!1001 &768169615 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_LocalPosition.z + - target: {fileID: 1540132086011438, guid: 4d36941009922194ea7d7e3b6308e77e, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.x + value: 1 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.x value: 1 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_RootOrder - value: 2 + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 0 + type: 3} + propertyPath: m_AnchorMin.x + value: 1 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -34 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 70 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 163 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_AnchorMin.x - value: 1 + type: 3} + propertyPath: m_LocalPosition.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_AnchorMax.x - value: 1 + type: 3} + propertyPath: m_LocalPosition.z + value: 0 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_Pivot.x - value: 1 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1540132086011438, guid: 4d36941009922194ea7d7e3b6308e77e, type: 2} - propertyPath: m_IsActive + - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} + - target: {fileID: 224299866350888444, guid: 4d36941009922194ea7d7e3b6308e77e, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -34 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 4d36941009922194ea7d7e3b6308e77e, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 4d36941009922194ea7d7e3b6308e77e, type: 3} --- !u!1001 &769057688 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1688347543} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (3) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (3) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1 &771240742 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 771240743} - component: {fileID: 771240745} @@ -3038,8 +3141,9 @@ GameObject: --- !u!224 &771240743 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 771240742} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3056,22 +3160,22 @@ RectTransform: --- !u!114 &771240744 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 771240742} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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_Maskable: 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: 0 @@ -3080,403 +3184,413 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &771240745 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 771240742} + m_CullTransparentMesh: 0 --- !u!224 &784309372 stripped RectTransform: - m_PrefabParentObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 453214326} + m_CorrespondingSourceObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 453214326} + m_PrefabAsset: {fileID: 0} --- !u!114 &784309373 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 453214326} + m_CorrespondingSourceObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 453214326} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: -142179781, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &873466293 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.x + - target: {fileID: 1896166732951740, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.z - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.x - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_RootOrder value: 3 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 1896166732951740, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - propertyPath: m_IsActive - value: 0 - objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} --- !u!224 &878834193 stripped RectTransform: - m_PrefabParentObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 260698788} + m_CorrespondingSourceObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 260698788} + m_PrefabAsset: {fileID: 0} --- !u!1001 &884140065 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 957900070} m_Modifications: - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 784309373} + - target: {fileID: 114566724737009558, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_Text + value: Duna objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114566724737009558, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Text - value: Duna + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 784309373} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 3} --- !u!1001 &923710059 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 744070430} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (2) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -50 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -50 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1 &927130821 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 927130822} - component: {fileID: 927130825} @@ -3492,8 +3606,9 @@ GameObject: --- !u!224 &927130822 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 927130821} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -3512,22 +3627,22 @@ RectTransform: --- !u!114 &927130823 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 927130821} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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: 0.392} m_RaycastTarget: 1 + m_Maskable: 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 @@ -3536,21 +3651,26 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &927130824 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 927130821} + m_CullTransparentMesh: 0 --- !u!114 &927130825 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 927130821} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1367256648, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} m_Name: m_EditorClassIdentifier: m_Content: {fileID: 1681680013} @@ -3571,782 +3691,777 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.UI.ScrollRect+ScrollRectEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null --- !u!1001 &937121157 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 671295926} m_Modifications: + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (1) + objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_RootOrder + value: 3 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_SizeDelta.y + value: 50 + objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: -150 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} +--- !u!224 &957900070 stripped +RectTransform: + m_CorrespondingSourceObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 453214326} + m_PrefabAsset: {fileID: 0} +--- !u!1001 &963911576 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1399615592} + m_Modifications: + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_SizeDelta.y - value: 50 + value: 200 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x - value: 0 + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -470 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x - value: 0 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.y + value: 670 + objectReference: {fileID: 0} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -60 + objectReference: {fileID: 0} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (1) - objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 ---- !u!224 &957900070 stripped -RectTransform: - m_PrefabParentObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 453214326} ---- !u!1001 &963911576 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1399615592} - m_Modifications: - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.y + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalPosition.z - value: 0 + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.z - value: 0 + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_SizeDelta.y + value: 730 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 730 + type: 3} + propertyPath: m_LocalRotation.w + value: 1 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_Pivot.y + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_SizeDelta.y + value: 470 objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -30 - objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -60 - objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 470 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} + - target: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} propertyPath: m_AnchoredPosition.y - value: -470 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224547728183722724, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 670 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - propertyPath: m_SizeDelta.y - value: 200 + value: -30 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, type: 3} --- !u!1001 &971455944 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 714235846} m_Modifications: - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 260 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchoredPosition.y - value: -30 + value: -60 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -60 - objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_SizeDelta.y - value: 200 + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} --- !u!1001 &1013671613 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 266903591} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (1) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -50 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (1) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -50 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1001 &1018108298 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1567675986} m_Modifications: - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1642997649195054, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} + propertyPath: m_Name + value: MoonGroup (1) objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -260 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 210 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.y + type: 3} + propertyPath: m_AnchoredPosition.y + value: -260 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_SizeDelta.y + value: 150 objectReference: {fileID: 0} - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + type: 3} + propertyPath: m_AnchoredPosition.x + value: 131 objectReference: {fileID: 0} - - target: {fileID: 1642997649195054, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - propertyPath: m_Name - value: MoonGroup (1) + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -60 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 131 + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -30 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -60 - objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_SizeDelta.y - value: 150 + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} --- !u!1 &1042412791 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1042412792} - component: {fileID: 1042412794} @@ -4361,8 +4476,9 @@ GameObject: --- !u!224 &1042412792 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1042412791} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -4380,22 +4496,22 @@ RectTransform: --- !u!114 &1042412793 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1042412791} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.05644465, g: 0.2647059, b: 0.08373408, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -4404,23 +4520,29 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1042412794 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1042412791} + m_CullTransparentMesh: 0 --- !u!224 &1075562055 stripped RectTransform: - m_PrefabParentObject: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - m_PrefabInternal: {fileID: 2039401329} + m_CorrespondingSourceObject: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + m_PrefabInstance: {fileID: 2039401329} + m_PrefabAsset: {fileID: 0} --- !u!1 &1134458289 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1134458290} - component: {fileID: 1134458292} @@ -4435,8 +4557,9 @@ GameObject: --- !u!224 &1134458290 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1134458289} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -4454,22 +4577,22 @@ RectTransform: --- !u!114 &1134458291 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1134458289} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.5441177, g: 0.41208914, b: 0.41208914, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -4478,472 +4601,476 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1134458292 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1134458289} + m_CullTransparentMesh: 0 --- !u!1001 &1159587215 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.y + - target: {fileID: 1991594256525764, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 6 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_RootOrder - value: 6 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1991594256525764, guid: 3d533dfe98139104da1bd452df8647aa, type: 2} - propertyPath: m_IsActive + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} --- !u!1001 &1160012372 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1697813583} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (2) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1001 &1176748956 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 266903591} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (3) objectReference: {fileID: 0} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + type: 3} + propertyPath: m_RootOrder + value: 3 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 3 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -150 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (3) + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -150 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1001 &1195767234 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1688347543} m_Modifications: + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!224 &1210165746 stripped RectTransform: - m_PrefabParentObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 260698788} + m_CorrespondingSourceObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 260698788} + m_PrefabAsset: {fileID: 0} --- !u!224 &1242202952 stripped RectTransform: - m_PrefabParentObject: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 1951193418} + m_CorrespondingSourceObject: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 1951193418} + m_PrefabAsset: {fileID: 0} --- !u!224 &1243286170 stripped RectTransform: - m_PrefabParentObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 71586506} + m_CorrespondingSourceObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 71586506} + m_PrefabAsset: {fileID: 0} --- !u!1 &1313684492 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1313684495} - component: {fileID: 1313684494} @@ -4958,12 +5085,13 @@ GameObject: --- !u!114 &1313684493 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1313684492} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalAxis: Horizontal @@ -4976,12 +5104,13 @@ MonoBehaviour: --- !u!114 &1313684494 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1313684492} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} m_Name: m_EditorClassIdentifier: m_FirstSelected: {fileID: 0} @@ -4990,8 +5119,9 @@ MonoBehaviour: --- !u!4 &1313684495 Transform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1313684492} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -5001,466 +5131,465 @@ Transform: m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &1313748358 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1210165746} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (2) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1001 &1346224896 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1363499058} m_Modifications: - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 606163454} + - target: {fileID: 114566724737009558, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_Text + value: Duna objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114566724737009558, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Text - value: Duna + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 606163454} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 3} --- !u!1001 &1359718376 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 671295926} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (3) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (3) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!224 &1363499058 stripped RectTransform: - m_PrefabParentObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 75281554} + m_CorrespondingSourceObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 75281554} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1366760337 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2115864238} m_Modifications: + - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 203010960} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMin.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_RootOrder - value: 0 + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 0 + type: 3} + propertyPath: m_SizeDelta.y + value: 60 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchoredPosition.y + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_SizeDelta.y - value: 60 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMin.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, + type: 3} + propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224884407461670538, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114463480143905480, guid: 6ba9d77a882f7a54493db5c06ac2a693, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 203010960} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 6ba9d77a882f7a54493db5c06ac2a693, type: 3} --- !u!224 &1371668105 stripped RectTransform: - m_PrefabParentObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 1018108298} + m_CorrespondingSourceObject: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 1018108298} + m_PrefabAsset: {fileID: 0} --- !u!1 &1399615591 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1399615592} - component: {fileID: 1399615595} @@ -5475,8 +5604,9 @@ GameObject: --- !u!224 &1399615592 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1399615591} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -5495,24 +5625,26 @@ RectTransform: --- !u!114 &1399615593 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1399615591} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -1184210157, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 2fafe2cfe61f6974895a912c3755e8f1, type: 3} m_Name: m_EditorClassIdentifier: m_AllowSwitchOff: 1 --- !u!114 &1399615595 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1399615591} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} m_Name: m_EditorClassIdentifier: m_Padding: @@ -5526,236 +5658,237 @@ MonoBehaviour: m_ChildForceExpandHeight: 0 m_ChildControlWidth: 1 m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 --- !u!1001 &1413314689 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1698242655} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (2) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -50 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -50 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1001 &1415542833 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1698242655} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (3) objectReference: {fileID: 0} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (3) + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1 &1438942519 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1438942520} - component: {fileID: 1438942522} @@ -5770,8 +5903,9 @@ GameObject: --- !u!224 &1438942520 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1438942519} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -5789,22 +5923,22 @@ RectTransform: --- !u!114 &1438942521 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1438942519} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.1581423, g: 0.3985428, b: 0.47794116, a: 0.778} m_RaycastTarget: 1 + m_Maskable: 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 @@ -5813,18 +5947,23 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1438942522 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1438942519} + m_CullTransparentMesh: 0 --- !u!1 &1442920248 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1442920249} - component: {fileID: 1442920251} @@ -5839,8 +5978,9 @@ GameObject: --- !u!224 &1442920249 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1442920248} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -5862,22 +6002,22 @@ RectTransform: --- !u!114 &1442920250 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1442920248} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.43382353, g: 0.43382353, b: 0.43382353, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -5886,133 +6026,137 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1442920251 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1442920248} + m_CullTransparentMesh: 0 --- !u!1001 &1473758506 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 671295926} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (2) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -50 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -50 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1 &1474912326 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1474912327} - component: {fileID: 1474912329} @@ -6027,8 +6171,9 @@ GameObject: --- !u!224 &1474912327 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1474912326} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -6045,22 +6190,22 @@ RectTransform: --- !u!114 &1474912328 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1474912326} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.78676474, g: 0.6999494, b: 0, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -6069,704 +6214,738 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1474912329 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1474912326} + m_CullTransparentMesh: 0 --- !u!1001 &1499088046 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1697813583} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (3) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -50 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (3) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -50 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!224 &1517623809 stripped RectTransform: - m_PrefabParentObject: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - m_PrefabInternal: {fileID: 1159587215} + m_CorrespondingSourceObject: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + m_PrefabInstance: {fileID: 1159587215} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1537227535 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_LocalPosition.y + - target: {fileID: 1275596693714124, guid: 81382c8fd0be12943959844030474fa8, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 10 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_RootOrder - value: 10 - objectReference: {fileID: 0} - - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1275596693714124, guid: 81382c8fd0be12943959844030474fa8, type: 2} - propertyPath: m_IsActive + - target: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, + type: 3} + propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 81382c8fd0be12943959844030474fa8, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 81382c8fd0be12943959844030474fa8, type: 3} --- !u!224 &1537227536 stripped RectTransform: - m_PrefabParentObject: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, - type: 2} - m_PrefabInternal: {fileID: 1537227535} + m_CorrespondingSourceObject: {fileID: 224039279777124048, guid: 81382c8fd0be12943959844030474fa8, + type: 3} + m_PrefabInstance: {fileID: 1537227535} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1547176704 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: + - target: {fileID: 1079703479649124, guid: bf671a8251e10904bba65dc806c9dd12, type: 3} + propertyPath: m_Name + value: SortHeader + objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_LocalPosition.z - value: 0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_LocalRotation.x + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_LocalRotation.y - value: 0 + type: 3} + propertyPath: m_AnchorMax.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_LocalRotation.z + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_RootOrder - value: 1 + type: 3} + propertyPath: m_SizeDelta.x + value: 280 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_AnchoredPosition.x - value: 5 + type: 3} + propertyPath: m_SizeDelta.y + value: 36 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -36 + type: 3} + propertyPath: m_LocalPosition.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_SizeDelta.x - value: 280 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_SizeDelta.y - value: 36 + type: 3} + propertyPath: m_LocalPosition.z + value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, + type: 3} + propertyPath: m_LocalRotation.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalRotation.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + type: 3} + propertyPath: m_AnchoredPosition.x + value: 5 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_AnchoredPosition.y + value: -72 + objectReference: {fileID: 0} + - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, + type: 3} + propertyPath: m_LocalEulerAnglesHint.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224509435262653102, guid: bf671a8251e10904bba65dc806c9dd12, + type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: bf671a8251e10904bba65dc806c9dd12, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: bf671a8251e10904bba65dc806c9dd12, type: 3} --- !u!1001 &1565691270 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 266903591} m_Modifications: + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!224 &1567675986 stripped RectTransform: - m_PrefabParentObject: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 260698788} + m_CorrespondingSourceObject: {fileID: 224955865618146072, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 260698788} + m_PrefabAsset: {fileID: 0} --- !u!114 &1595890424 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 1926373719} + m_CorrespondingSourceObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 1926373719} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 619713579, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!224 &1607860692 stripped RectTransform: - m_PrefabParentObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 260698788} + m_CorrespondingSourceObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 260698788} + m_PrefabAsset: {fileID: 0} --- !u!114 &1607860693 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 260698788} + m_CorrespondingSourceObject: {fileID: 114955290845638096, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 260698788} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: -142179781, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &1612091501 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 744070430} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (3) objectReference: {fileID: 0} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_SizeDelta.y - value: 50 + type: 3} + propertyPath: m_SizeDelta.y + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.z + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 objectReference: {fileID: 0} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (3) + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1001 &1630611756 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1688347543} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (2) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -50 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -50 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1 &1681680012 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1681680013} - component: {fileID: 1681680015} @@ -6781,8 +6960,9 @@ GameObject: --- !u!224 &1681680013 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1681680012} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -6800,12 +6980,13 @@ RectTransform: --- !u!114 &1681680014 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1681680012} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} m_Name: m_EditorClassIdentifier: m_Padding: @@ -6819,155 +7000,161 @@ MonoBehaviour: m_ChildForceExpandHeight: 0 m_ChildControlWidth: 1 m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 --- !u!114 &1681680015 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1681680012} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1741964061, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} m_Name: m_EditorClassIdentifier: m_HorizontalFit: 0 m_VerticalFit: 2 --- !u!224 &1688347543 stripped RectTransform: - m_PrefabParentObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 971455944} + m_CorrespondingSourceObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 971455944} + m_PrefabAsset: {fileID: 0} --- !u!1001 &1694215006 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1243286170} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (2) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} + - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114777246408545098, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (2) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!224 &1697813583 stripped RectTransform: - m_PrefabParentObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 1018108298} + m_CorrespondingSourceObject: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 1018108298} + m_PrefabAsset: {fileID: 0} --- !u!224 &1698242655 stripped RectTransform: - m_PrefabParentObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 453214326} + m_CorrespondingSourceObject: {fileID: 224212834712057130, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 453214326} + m_PrefabAsset: {fileID: 0} --- !u!1 &1712383780 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1712383781} - component: {fileID: 1712383783} @@ -6982,8 +7169,9 @@ GameObject: --- !u!224 &1712383781 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1712383780} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -7000,22 +7188,22 @@ RectTransform: --- !u!114 &1712383782 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1712383780} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 1, g: 0.60294116, b: 0.60294116, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -7024,127 +7212,131 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1712383783 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1712383780} + m_CullTransparentMesh: 0 --- !u!1001 &1720172541 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1697813583} - m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + m_Modification: + m_TransformParent: {fileID: 1697813583} + m_Modifications: + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_Name + value: SubVessel (1) objectReference: {fileID: 0} + - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 2 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 2 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -100 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_Name - value: SubVessel (1) + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -100 objectReference: {fileID: 0} - - target: {fileID: 114644587663971720, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1 &1723862672 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1723862673} - component: {fileID: 1723862675} @@ -7159,8 +7351,9 @@ GameObject: --- !u!224 &1723862673 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1723862672} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -7177,22 +7370,22 @@ RectTransform: --- !u!114 &1723862674 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1723862672} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.78676474, g: 0.6999494, b: 0, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -7201,134 +7394,138 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1723862675 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1723862672} + m_CullTransparentMesh: 0 --- !u!1001 &1728850625 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1371668105} m_Modifications: - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 1916419964} + - target: {fileID: 114474820105768212, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_Text + value: Minmus objectReference: {fileID: 0} + - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114474820105768212, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Text - value: Minmus + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} - - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 1916419964} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} --- !u!1 &1735042295 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1735042296} - component: {fileID: 1735042298} @@ -7343,8 +7540,9 @@ GameObject: --- !u!224 &1735042296 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1735042295} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -7362,22 +7560,22 @@ RectTransform: --- !u!114 &1735042297 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1735042295} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: m_Material: {fileID: 0} m_Color: {r: 0.05644465, g: 0.2647059, b: 0.08373408, a: 1} m_RaycastTarget: 1 + m_Maskable: 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 @@ -7386,764 +7584,769 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1735042298 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1735042295} + m_CullTransparentMesh: 0 --- !u!1001 &1780023915 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 1210165746} m_Modifications: + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Pivot.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Pivot.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchorMax.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchorMin.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_SizeDelta.y + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_SizeDelta.y - value: 50 + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} +--- !u!1001 &1827717667 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1698242655} + m_Modifications: + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (1) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y + type: 3} + propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} + propertyPath: m_RootOrder + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y + type: 3} + propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 ---- !u!1001 &1827717667 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1698242655} - m_Modifications: + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} + propertyPath: m_SizeDelta.y + value: 50 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 + m_RemovedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} +--- !u!1001 &1830694798 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1210165746} + m_Modifications: + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (1) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 77248105} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_SizeDelta.y - value: 50 + type: 3} + propertyPath: m_Pivot.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y + type: 3} + propertyPath: m_RootOrder value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y + type: 3} + propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (1) + propertyPath: m_SizeDelta.x + value: 262 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_SizeDelta.y + value: 50 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} - m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 ---- !u!1001 &1830694798 -Prefab: - m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1210165746} - m_Modifications: - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalPosition.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} propertyPath: m_LocalRotation.x value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalRotation.y value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_LocalRotation.z value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_AnchoredPosition.y value: -50 objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_SizeDelta.y - value: 50 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 - objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, - type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (1) - objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 77248105} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!114 &1916419964 stripped MonoBehaviour: - m_PrefabParentObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - m_PrefabInternal: {fileID: 1018108298} + m_CorrespondingSourceObject: {fileID: 114907132855379494, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + m_PrefabInstance: {fileID: 1018108298} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 m_Script: {fileID: 619713579, guid: 7eba39e79049ff14dbe8f25273865bbb, type: 3} + m_Name: + m_EditorClassIdentifier: --- !u!1001 &1926373719 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 - serializedVersion: 2 - m_Modification: - m_TransformParent: {fileID: 1567675986} - m_Modifications: - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} + serializedVersion: 2 + m_Modification: + m_TransformParent: {fileID: 1567675986} + m_Modifications: - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 260 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y - value: 1 + type: 3} + propertyPath: m_SizeDelta.x + value: 262 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_SizeDelta.y + value: 200 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchoredPosition.y - value: -30 + value: -60 + objectReference: {fileID: 0} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y - value: -60 - objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchoredPosition.x value: 131 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_SizeDelta.x - value: 262 - objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_SizeDelta.y - value: 200 + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: -30 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} --- !u!1001 &1945566260 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 744070430} m_Modifications: - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} + propertyPath: m_Name + value: Vessel (1) objectReference: {fileID: 0} + - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} + - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_Group + value: + objectReference: {fileID: 1399615593} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114082231565360232, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} - - target: {fileID: 1925841545415476, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - propertyPath: m_Name - value: Vessel (1) + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224353988892398878, guid: 975285cf6c1d74a458aa57ecef4552c5, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 objectReference: {fileID: 0} - - target: {fileID: 114139100388098310, guid: 975285cf6c1d74a458aa57ecef4552c5, - type: 2} - propertyPath: m_Group - value: - objectReference: {fileID: 1399615593} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 975285cf6c1d74a458aa57ecef4552c5, type: 3} --- !u!1001 &1951193418 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalPosition.z + - target: {fileID: 1642997649195054, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_Pivot.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_Pivot.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_RootOrder value: 5 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMax.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchoredPosition.y + type: 3} + propertyPath: m_AnchorMax.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} + propertyPath: m_AnchorMin.y + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 objectReference: {fileID: 0} - - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224118449931598792, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + type: 3} propertyPath: m_AnchorMin.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 224204369239513246, guid: ae65c28bf959446478ffe2ddf33f55fc, - type: 2} + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - - target: {fileID: 1642997649195054, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - propertyPath: m_IsActive - value: 0 + - target: {fileID: 224355355386277862, guid: ae65c28bf959446478ffe2ddf33f55fc, + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: ae65c28bf959446478ffe2ddf33f55fc, type: 3} --- !u!1 &1980148808 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 1980148809} - component: {fileID: 1980148812} @@ -8159,8 +8362,9 @@ GameObject: --- !u!224 &1980148809 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1980148808} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -8178,22 +8382,22 @@ RectTransform: --- !u!114 &1980148810 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1980148808} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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_Maskable: 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 @@ -8202,139 +8406,145 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &1980148811 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1980148808} + m_CullTransparentMesh: 0 --- !u!114 &1980148812 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1980148808} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -1200242548, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} m_Name: m_EditorClassIdentifier: m_ShowMaskGraphic: 0 --- !u!224 &2028329311 stripped RectTransform: - m_PrefabParentObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 873466293} + m_CorrespondingSourceObject: {fileID: 224642363348764626, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 873466293} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2039401329 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 2112488969} m_Modifications: - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.x - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.y + - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} + propertyPath: m_IsActive value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 + type: 3} + propertyPath: m_RootOrder + value: 7 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_RootOrder - value: 7 - objectReference: {fileID: 0} - - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 50 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 1209305566584202, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - propertyPath: m_IsActive + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224094023635985186, guid: 030cc214a2ffd4542b5d0cd3621062f0, + type: 3} + propertyPath: m_AnchoredPosition.y value: 0 objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 030cc214a2ffd4542b5d0cd3621062f0, type: 3} --- !u!1 &2041819670 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 2041819671} - component: {fileID: 2041819674} @@ -8350,8 +8560,9 @@ GameObject: --- !u!224 &2041819671 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041819670} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -8369,12 +8580,13 @@ RectTransform: --- !u!114 &2041819672 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041819670} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -2061169968, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} m_Name: m_EditorClassIdentifier: m_Navigation: @@ -8388,17 +8600,20 @@ MonoBehaviour: 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: 771240744} @@ -8410,27 +8625,25 @@ MonoBehaviour: m_OnValueChanged: m_PersistentCalls: m_Calls: [] - m_TypeName: UnityEngine.UI.Scrollbar+ScrollEvent, UnityEngine.UI, Version=1.0.0.0, - Culture=neutral, PublicKeyToken=null --- !u!114 &2041819673 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041819670} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3} + 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_Maskable: 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 @@ -8439,18 +8652,23 @@ MonoBehaviour: m_FillAmount: 1 m_FillClockwise: 1 m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 --- !u!222 &2041819674 CanvasRenderer: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2041819670} + m_CullTransparentMesh: 0 --- !u!1 &2112488965 GameObject: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} - serializedVersion: 5 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 m_Component: - component: {fileID: 2112488969} - component: {fileID: 2112488968} @@ -8466,12 +8684,13 @@ GameObject: --- !u!114 &2112488966 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2112488965} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} m_Name: m_EditorClassIdentifier: m_IgnoreReversedGraphics: 1 @@ -8482,12 +8701,13 @@ MonoBehaviour: --- !u!114 &2112488967 MonoBehaviour: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2112488965} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3} + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} m_Name: m_EditorClassIdentifier: m_UiScaleMode: 0 @@ -8503,8 +8723,9 @@ MonoBehaviour: --- !u!223 &2112488968 Canvas: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2112488965} m_Enabled: 1 serializedVersion: 3 @@ -8523,8 +8744,9 @@ Canvas: --- !u!224 &2112488969 RectTransform: m_ObjectHideFlags: 0 - m_PrefabParentObject: {fileID: 0} - m_PrefabInternal: {fileID: 0} + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2112488965} m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} @@ -8551,117 +8773,117 @@ RectTransform: m_Pivot: {x: 0, y: 0} --- !u!224 &2115864238 stripped RectTransform: - m_PrefabParentObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, - type: 2} - m_PrefabInternal: {fileID: 963911576} + m_CorrespondingSourceObject: {fileID: 224964838178614896, guid: 6a0bbf7bbfb77254f9fd7ec7cfea44a8, + type: 3} + m_PrefabInstance: {fileID: 963911576} + m_PrefabAsset: {fileID: 0} --- !u!1001 &2120936853 -Prefab: +PrefabInstance: m_ObjectHideFlags: 0 serializedVersion: 2 m_Modification: m_TransformParent: {fileID: 113552200} m_Modifications: + - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: _parent + value: + objectReference: {fileID: 1595890424} + - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_Sprite + value: + objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + type: 3} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.x + type: 3} + propertyPath: m_Pivot.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.y - value: 0 + type: 3} + propertyPath: m_Pivot.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalPosition.z + type: 3} + propertyPath: m_RootOrder value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.x - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.y - value: -0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.z - value: -0 + type: 3} + propertyPath: m_AnchorMax.x + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_LocalRotation.w + type: 3} + propertyPath: m_AnchorMax.y value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_RootOrder - value: 0 - objectReference: {fileID: 0} - - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.x + type: 3} + propertyPath: m_AnchorMin.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchoredPosition.y - value: 0 + type: 3} + propertyPath: m_AnchorMin.y + value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.x value: 262 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} + type: 3} propertyPath: m_SizeDelta.y value: 60 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.x + type: 3} + propertyPath: m_LocalPosition.x value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMin.y - value: 1 + type: 3} + propertyPath: m_LocalPosition.y + value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.x + type: 3} + propertyPath: m_LocalPosition.z value: 0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_AnchorMax.y + type: 3} + propertyPath: m_LocalRotation.w value: 1 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.x - value: 0 + type: 3} + propertyPath: m_LocalRotation.x + value: -0 objectReference: {fileID: 0} - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Pivot.y - value: 1 + type: 3} + propertyPath: m_LocalRotation.y + value: -0 objectReference: {fileID: 0} - - target: {fileID: 114944038142719812, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: m_Sprite - value: - objectReference: {fileID: 21300000, guid: 3b7b78f41e6c1c245b3aab34a249398a, + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} - - target: {fileID: 114163901414649966, guid: 3d533dfe98139104da1bd452df8647aa, - type: 2} - propertyPath: _parent - value: - objectReference: {fileID: 1595890424} + propertyPath: m_LocalRotation.z + value: -0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 224881071408666568, guid: 3d533dfe98139104da1bd452df8647aa, + type: 3} + propertyPath: m_AnchoredPosition.y + value: 0 + objectReference: {fileID: 0} m_RemovedComponents: [] - m_ParentPrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 2} - m_IsPrefabParent: 0 + m_SourcePrefab: {fileID: 100100000, guid: 3d533dfe98139104da1bd452df8647aa, type: 3} diff --git a/Unity/Better Tracking/Better Tracking.sln b/Unity/Better Tracking/Better Tracking.sln index 81015f2..dc7bd2d 100644 --- a/Unity/Better Tracking/Better Tracking.sln +++ b/Unity/Better Tracking/Better Tracking.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 2017 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Better Tracking.Editor", "Better Tracking.Editor.csproj", "{0B886B40-281F-539F-4C4D-8216A8180BFB}" +# Visual Studio 15 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp-Editor", "Assembly-CSharp-Editor.csproj", "{45380E18-71BF-B31A-D997-224F54FD55C1}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -9,10 +9,10 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {0B886B40-281F-539F-4C4D-8216A8180BFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0B886B40-281F-539F-4C4D-8216A8180BFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0B886B40-281F-539F-4C4D-8216A8180BFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0B886B40-281F-539F-4C4D-8216A8180BFB}.Release|Any CPU.Build.0 = Release|Any CPU + {45380E18-71BF-B31A-D997-224F54FD55C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {45380E18-71BF-B31A-D997-224F54FD55C1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {45380E18-71BF-B31A-D997-224F54FD55C1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {45380E18-71BF-B31A-D997-224F54FD55C1}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Unity/Better Tracking/Library/APIUpdater/project-dependencies.graph b/Unity/Better Tracking/Library/APIUpdater/project-dependencies.graph new file mode 100644 index 0000000..1a7ff06 Binary files /dev/null and b/Unity/Better Tracking/Library/APIUpdater/project-dependencies.graph differ diff --git a/Unity/Better Tracking/Library/ArtifactDB b/Unity/Better Tracking/Library/ArtifactDB new file mode 100644 index 0000000..f157b90 Binary files /dev/null and b/Unity/Better Tracking/Library/ArtifactDB differ diff --git a/Unity/Better Tracking/Library/ArtifactDB-lock b/Unity/Better Tracking/Library/ArtifactDB-lock new file mode 100644 index 0000000..e7765fe Binary files /dev/null and b/Unity/Better Tracking/Library/ArtifactDB-lock differ diff --git a/Unity/Better Tracking/Library/Artifacts/00/0014f623cd7ee5de46d0414398afa17f b/Unity/Better Tracking/Library/Artifacts/00/0014f623cd7ee5de46d0414398afa17f new file mode 100644 index 0000000..a686a72 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/00/0014f623cd7ee5de46d0414398afa17f differ diff --git a/Unity/Better Tracking/Library/Artifacts/00/0017da004baf0a7974515c429eedbf35 b/Unity/Better Tracking/Library/Artifacts/00/0017da004baf0a7974515c429eedbf35 new file mode 100644 index 0000000..fe62ddb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/00/0017da004baf0a7974515c429eedbf35 differ diff --git a/Unity/Better Tracking/Library/Artifacts/00/0061568a9e43a257b4c2bf68b822e856 b/Unity/Better Tracking/Library/Artifacts/00/0061568a9e43a257b4c2bf68b822e856 new file mode 100644 index 0000000..4d0b9b6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/00/0061568a9e43a257b4c2bf68b822e856 differ diff --git a/Unity/Better Tracking/Library/Artifacts/00/00ae6bb4b5a67b04e356129594ca8e1e b/Unity/Better Tracking/Library/Artifacts/00/00ae6bb4b5a67b04e356129594ca8e1e new file mode 100644 index 0000000..e25fae3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/00/00ae6bb4b5a67b04e356129594ca8e1e differ diff --git a/Unity/Better Tracking/Library/Artifacts/00/00b383b234ddfcbcb5f4e43a8696185e b/Unity/Better Tracking/Library/Artifacts/00/00b383b234ddfcbcb5f4e43a8696185e new file mode 100644 index 0000000..9a4cf3b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/00/00b383b234ddfcbcb5f4e43a8696185e differ diff --git a/Unity/Better Tracking/Library/Artifacts/00/00e66c510b84b45204804a975c5e8496 b/Unity/Better Tracking/Library/Artifacts/00/00e66c510b84b45204804a975c5e8496 new file mode 100644 index 0000000..d2c59e1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/00/00e66c510b84b45204804a975c5e8496 differ diff --git a/Unity/Better Tracking/Library/Artifacts/00/00fe317cab6192749ffbe25505c6ffdb b/Unity/Better Tracking/Library/Artifacts/00/00fe317cab6192749ffbe25505c6ffdb new file mode 100644 index 0000000..0d4992e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/00/00fe317cab6192749ffbe25505c6ffdb differ diff --git a/Unity/Better Tracking/Library/Artifacts/01/0118751264dcd90bfb5cd5b9d6f0b4c5 b/Unity/Better Tracking/Library/Artifacts/01/0118751264dcd90bfb5cd5b9d6f0b4c5 new file mode 100644 index 0000000..5abc8f6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/01/0118751264dcd90bfb5cd5b9d6f0b4c5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f b/Unity/Better Tracking/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f new file mode 100644 index 0000000..b659762 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/01/012c4e7ed80308b09d389444902dff1f differ diff --git a/Unity/Better Tracking/Library/Artifacts/01/017668526904a42b09c40a88e942ee95 b/Unity/Better Tracking/Library/Artifacts/01/017668526904a42b09c40a88e942ee95 new file mode 100644 index 0000000..9f0c8ab Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/01/017668526904a42b09c40a88e942ee95 differ diff --git a/Unity/Better Tracking/Library/Artifacts/01/01780cb83ce2fc35707faaef92fc6547 b/Unity/Better Tracking/Library/Artifacts/01/01780cb83ce2fc35707faaef92fc6547 new file mode 100644 index 0000000..3521418 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/01/01780cb83ce2fc35707faaef92fc6547 differ diff --git a/Unity/Better Tracking/Library/Artifacts/01/018adde66bcd3be49d6dc050f837bc9d b/Unity/Better Tracking/Library/Artifacts/01/018adde66bcd3be49d6dc050f837bc9d new file mode 100644 index 0000000..4881861 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/01/018adde66bcd3be49d6dc050f837bc9d differ diff --git a/Unity/Better Tracking/Library/Artifacts/01/01947c7963d97e5a9898b62f9ab79ccd b/Unity/Better Tracking/Library/Artifacts/01/01947c7963d97e5a9898b62f9ab79ccd new file mode 100644 index 0000000..b7c7ce3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/01/01947c7963d97e5a9898b62f9ab79ccd differ diff --git a/Unity/Better Tracking/Library/Artifacts/01/019919fc4275a25989cd00115e890444 b/Unity/Better Tracking/Library/Artifacts/01/019919fc4275a25989cd00115e890444 new file mode 100644 index 0000000..0f6ea2a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/01/019919fc4275a25989cd00115e890444 differ diff --git a/Unity/Better Tracking/Library/Artifacts/02/024df319be9d4fc44a74b0744d8ba03d b/Unity/Better Tracking/Library/Artifacts/02/024df319be9d4fc44a74b0744d8ba03d new file mode 100644 index 0000000..84796fb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/02/024df319be9d4fc44a74b0744d8ba03d differ diff --git a/Unity/Better Tracking/Library/Artifacts/02/0275df2468488d627009bf27fd5457c8 b/Unity/Better Tracking/Library/Artifacts/02/0275df2468488d627009bf27fd5457c8 new file mode 100644 index 0000000..becb83f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/02/0275df2468488d627009bf27fd5457c8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/02/02b555cea7f1394f16c329a791677df2 b/Unity/Better Tracking/Library/Artifacts/02/02b555cea7f1394f16c329a791677df2 new file mode 100644 index 0000000..82df4b1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/02/02b555cea7f1394f16c329a791677df2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/02/02c0e0ddad41607622d7f65236d33e55 b/Unity/Better Tracking/Library/Artifacts/02/02c0e0ddad41607622d7f65236d33e55 new file mode 100644 index 0000000..cc058a6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/02/02c0e0ddad41607622d7f65236d33e55 differ diff --git a/Unity/Better Tracking/Library/Artifacts/02/02fc8cc4800f659c91c7d0dbc2384186 b/Unity/Better Tracking/Library/Artifacts/02/02fc8cc4800f659c91c7d0dbc2384186 new file mode 100644 index 0000000..dcad586 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/02/02fc8cc4800f659c91c7d0dbc2384186 differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/03211b9a945e4d50f58de0f5fdf991f6 b/Unity/Better Tracking/Library/Artifacts/03/03211b9a945e4d50f58de0f5fdf991f6 new file mode 100644 index 0000000..baa707a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/03211b9a945e4d50f58de0f5fdf991f6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/03222f8ceb2306299bde9ae2eaee4f25 b/Unity/Better Tracking/Library/Artifacts/03/03222f8ceb2306299bde9ae2eaee4f25 new file mode 100644 index 0000000..84aca98 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/03222f8ceb2306299bde9ae2eaee4f25 differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/0331dc7a38b8b7d58595f0ccb6971394 b/Unity/Better Tracking/Library/Artifacts/03/0331dc7a38b8b7d58595f0ccb6971394 new file mode 100644 index 0000000..39655a6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/0331dc7a38b8b7d58595f0ccb6971394 differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/03388b6e4072a6e7a0e3c9fdcc0bbf5b b/Unity/Better Tracking/Library/Artifacts/03/03388b6e4072a6e7a0e3c9fdcc0bbf5b new file mode 100644 index 0000000..b0ea91f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/03388b6e4072a6e7a0e3c9fdcc0bbf5b differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/035affd01e711e63e9242c173b549800 b/Unity/Better Tracking/Library/Artifacts/03/035affd01e711e63e9242c173b549800 new file mode 100644 index 0000000..421d1e5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/035affd01e711e63e9242c173b549800 differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/0374f9c0a0b49f911700f7e12c85198b b/Unity/Better Tracking/Library/Artifacts/03/0374f9c0a0b49f911700f7e12c85198b new file mode 100644 index 0000000..562b80c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/0374f9c0a0b49f911700f7e12c85198b differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/039a0d2faa0ec57dde772ac6b720e114 b/Unity/Better Tracking/Library/Artifacts/03/039a0d2faa0ec57dde772ac6b720e114 new file mode 100644 index 0000000..2b4af80 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/039a0d2faa0ec57dde772ac6b720e114 differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/03a9b54265907e680f1681d2b11d1d9d b/Unity/Better Tracking/Library/Artifacts/03/03a9b54265907e680f1681d2b11d1d9d new file mode 100644 index 0000000..c93a7e8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/03a9b54265907e680f1681d2b11d1d9d differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/03e61c67e456626a6bdafcee6524fbb6 b/Unity/Better Tracking/Library/Artifacts/03/03e61c67e456626a6bdafcee6524fbb6 new file mode 100644 index 0000000..b3b5667 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/03e61c67e456626a6bdafcee6524fbb6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/03/03e8280a6c1e0a779161c67d8945263c b/Unity/Better Tracking/Library/Artifacts/03/03e8280a6c1e0a779161c67d8945263c new file mode 100644 index 0000000..d4899a0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/03/03e8280a6c1e0a779161c67d8945263c differ diff --git a/Unity/Better Tracking/Library/Artifacts/04/0406a701c0393b561fdfbd5509f0928b b/Unity/Better Tracking/Library/Artifacts/04/0406a701c0393b561fdfbd5509f0928b new file mode 100644 index 0000000..47d7838 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/04/0406a701c0393b561fdfbd5509f0928b differ diff --git a/Unity/Better Tracking/Library/Artifacts/04/041a1f87141fae53e60b6b18926e6953 b/Unity/Better Tracking/Library/Artifacts/04/041a1f87141fae53e60b6b18926e6953 new file mode 100644 index 0000000..82e30d5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/04/041a1f87141fae53e60b6b18926e6953 differ diff --git a/Unity/Better Tracking/Library/Artifacts/04/04af3f1848fc99b421ce6fff8c3451d9 b/Unity/Better Tracking/Library/Artifacts/04/04af3f1848fc99b421ce6fff8c3451d9 new file mode 100644 index 0000000..49a4bea Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/04/04af3f1848fc99b421ce6fff8c3451d9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/04/04f90b8e292527dcc1a561fe29787209 b/Unity/Better Tracking/Library/Artifacts/04/04f90b8e292527dcc1a561fe29787209 new file mode 100644 index 0000000..62cf7f1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/04/04f90b8e292527dcc1a561fe29787209 differ diff --git a/Unity/Better Tracking/Library/Artifacts/04/04fc5fea128dc506285ced2a2265f56e b/Unity/Better Tracking/Library/Artifacts/04/04fc5fea128dc506285ced2a2265f56e new file mode 100644 index 0000000..02d7746 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/04/04fc5fea128dc506285ced2a2265f56e differ diff --git a/Unity/Better Tracking/Library/Artifacts/05/0506409eac6526e2400182d0b06d93e5 b/Unity/Better Tracking/Library/Artifacts/05/0506409eac6526e2400182d0b06d93e5 new file mode 100644 index 0000000..5ec5206 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/05/0506409eac6526e2400182d0b06d93e5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/05/054f2eede87638ce4f3aa46abdd0cb14 b/Unity/Better Tracking/Library/Artifacts/05/054f2eede87638ce4f3aa46abdd0cb14 new file mode 100644 index 0000000..a5af362 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/05/054f2eede87638ce4f3aa46abdd0cb14 differ diff --git a/Unity/Better Tracking/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 b/Unity/Better Tracking/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 new file mode 100644 index 0000000..d1d4170 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/05/055e70c6f791a12e38bfbd078f426a32 differ diff --git a/Unity/Better Tracking/Library/Artifacts/05/05801b63660b9f18f6a275e1e111faa0 b/Unity/Better Tracking/Library/Artifacts/05/05801b63660b9f18f6a275e1e111faa0 new file mode 100644 index 0000000..b3eddc7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/05/05801b63660b9f18f6a275e1e111faa0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/05/0599286c70a1f64936f05d2fc999ec6e b/Unity/Better Tracking/Library/Artifacts/05/0599286c70a1f64936f05d2fc999ec6e new file mode 100644 index 0000000..0fb41ed Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/05/0599286c70a1f64936f05d2fc999ec6e differ diff --git a/Unity/Better Tracking/Library/Artifacts/05/05b8aeacdf2bcf6d53678576801765a2 b/Unity/Better Tracking/Library/Artifacts/05/05b8aeacdf2bcf6d53678576801765a2 new file mode 100644 index 0000000..8c90b8d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/05/05b8aeacdf2bcf6d53678576801765a2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/06/060d870f975791c6e7838df4743d68ec b/Unity/Better Tracking/Library/Artifacts/06/060d870f975791c6e7838df4743d68ec new file mode 100644 index 0000000..4a727d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/06/060d870f975791c6e7838df4743d68ec differ diff --git a/Unity/Better Tracking/Library/Artifacts/06/063c8d3f942eb79035d635a507df0a3c b/Unity/Better Tracking/Library/Artifacts/06/063c8d3f942eb79035d635a507df0a3c new file mode 100644 index 0000000..2406b98 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/06/063c8d3f942eb79035d635a507df0a3c differ diff --git a/Unity/Better Tracking/Library/Artifacts/06/06ae2b215480c245137a6b355f6ab9e9 b/Unity/Better Tracking/Library/Artifacts/06/06ae2b215480c245137a6b355f6ab9e9 new file mode 100644 index 0000000..cbb7c37 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/06/06ae2b215480c245137a6b355f6ab9e9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/06/06caa6c1d14fdb23a510070158c939ea b/Unity/Better Tracking/Library/Artifacts/06/06caa6c1d14fdb23a510070158c939ea new file mode 100644 index 0000000..60fe28a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/06/06caa6c1d14fdb23a510070158c939ea differ diff --git a/Unity/Better Tracking/Library/Artifacts/06/06f89c48a52efe73e378367b2dec4eb8 b/Unity/Better Tracking/Library/Artifacts/06/06f89c48a52efe73e378367b2dec4eb8 new file mode 100644 index 0000000..a4e8f92 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/06/06f89c48a52efe73e378367b2dec4eb8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/07/070584bbeaec1324ce40d89354c5865e b/Unity/Better Tracking/Library/Artifacts/07/070584bbeaec1324ce40d89354c5865e new file mode 100644 index 0000000..9acce19 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/07/070584bbeaec1324ce40d89354c5865e differ diff --git a/Unity/Better Tracking/Library/Artifacts/07/075ee26f0043a269a1f415d724729e34 b/Unity/Better Tracking/Library/Artifacts/07/075ee26f0043a269a1f415d724729e34 new file mode 100644 index 0000000..ad33e31 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/07/075ee26f0043a269a1f415d724729e34 differ diff --git a/Unity/Better Tracking/Library/Artifacts/07/0768df76d588daeba5ee3c6ade0ceab3 b/Unity/Better Tracking/Library/Artifacts/07/0768df76d588daeba5ee3c6ade0ceab3 new file mode 100644 index 0000000..b83272e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/07/0768df76d588daeba5ee3c6ade0ceab3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/07/077fe58a38524674fb386aeb38a2d453 b/Unity/Better Tracking/Library/Artifacts/07/077fe58a38524674fb386aeb38a2d453 new file mode 100644 index 0000000..31cbc08 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/07/077fe58a38524674fb386aeb38a2d453 differ diff --git a/Unity/Better Tracking/Library/Artifacts/07/07ad7d70a12326308888ccd8af9a00e6 b/Unity/Better Tracking/Library/Artifacts/07/07ad7d70a12326308888ccd8af9a00e6 new file mode 100644 index 0000000..63d81e2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/07/07ad7d70a12326308888ccd8af9a00e6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/07/07d7abffb3380374a9e2b1840b81e5be b/Unity/Better Tracking/Library/Artifacts/07/07d7abffb3380374a9e2b1840b81e5be new file mode 100644 index 0000000..359bbdb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/07/07d7abffb3380374a9e2b1840b81e5be differ diff --git a/Unity/Better Tracking/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 b/Unity/Better Tracking/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 new file mode 100644 index 0000000..d6a6183 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/07/07eee7427ee5dcd029b87bc41714cf42 differ diff --git a/Unity/Better Tracking/Library/Artifacts/08/080734c0dbdf3afddd9472d4c491800b b/Unity/Better Tracking/Library/Artifacts/08/080734c0dbdf3afddd9472d4c491800b new file mode 100644 index 0000000..f71477d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/08/080734c0dbdf3afddd9472d4c491800b differ diff --git a/Unity/Better Tracking/Library/Artifacts/08/086c73716ceb463eab6df12a0184b31f b/Unity/Better Tracking/Library/Artifacts/08/086c73716ceb463eab6df12a0184b31f new file mode 100644 index 0000000..81ca73b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/08/086c73716ceb463eab6df12a0184b31f differ diff --git a/Unity/Better Tracking/Library/Artifacts/08/08ee5f396a5de4eaa5a323ed011a4d85 b/Unity/Better Tracking/Library/Artifacts/08/08ee5f396a5de4eaa5a323ed011a4d85 new file mode 100644 index 0000000..a3522df Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/08/08ee5f396a5de4eaa5a323ed011a4d85 differ diff --git a/Unity/Better Tracking/Library/Artifacts/08/08f799d6a50618ee289f5a93d3c9f274 b/Unity/Better Tracking/Library/Artifacts/08/08f799d6a50618ee289f5a93d3c9f274 new file mode 100644 index 0000000..39ceadf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/08/08f799d6a50618ee289f5a93d3c9f274 differ diff --git a/Unity/Better Tracking/Library/Artifacts/09/094e366fc8173adeb8a5db50a58379dd b/Unity/Better Tracking/Library/Artifacts/09/094e366fc8173adeb8a5db50a58379dd new file mode 100644 index 0000000..b3afa61 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/09/094e366fc8173adeb8a5db50a58379dd differ diff --git a/Unity/Better Tracking/Library/Artifacts/09/098d59ce567dc1f626d29cea7d0e24bc b/Unity/Better Tracking/Library/Artifacts/09/098d59ce567dc1f626d29cea7d0e24bc new file mode 100644 index 0000000..365fa82 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/09/098d59ce567dc1f626d29cea7d0e24bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/09/09c5678fedab3fd7cf1d15c62ef81a13 b/Unity/Better Tracking/Library/Artifacts/09/09c5678fedab3fd7cf1d15c62ef81a13 new file mode 100644 index 0000000..37d7765 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/09/09c5678fedab3fd7cf1d15c62ef81a13 differ diff --git a/Unity/Better Tracking/Library/Artifacts/09/09de7b13673bbe27f896f5dd74edbb5b b/Unity/Better Tracking/Library/Artifacts/09/09de7b13673bbe27f896f5dd74edbb5b new file mode 100644 index 0000000..7a931bf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/09/09de7b13673bbe27f896f5dd74edbb5b differ diff --git a/Unity/Better Tracking/Library/Artifacts/0a/0a1dbc0e342eb54c54e58f54ee5cf058 b/Unity/Better Tracking/Library/Artifacts/0a/0a1dbc0e342eb54c54e58f54ee5cf058 new file mode 100644 index 0000000..bea969b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0a/0a1dbc0e342eb54c54e58f54ee5cf058 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0a/0a596060ca86c3b91f15e4893cdecdc3 b/Unity/Better Tracking/Library/Artifacts/0a/0a596060ca86c3b91f15e4893cdecdc3 new file mode 100644 index 0000000..662e13a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0a/0a596060ca86c3b91f15e4893cdecdc3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0a/0a5cc04d976840f77ad2efef41d3ae20 b/Unity/Better Tracking/Library/Artifacts/0a/0a5cc04d976840f77ad2efef41d3ae20 new file mode 100644 index 0000000..96cf2f0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0a/0a5cc04d976840f77ad2efef41d3ae20 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0a/0a6d0f71a654f48e0330626bca5e57a2 b/Unity/Better Tracking/Library/Artifacts/0a/0a6d0f71a654f48e0330626bca5e57a2 new file mode 100644 index 0000000..f7da054 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0a/0a6d0f71a654f48e0330626bca5e57a2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0a/0a92c6b825a0960a1db17de0340e504c b/Unity/Better Tracking/Library/Artifacts/0a/0a92c6b825a0960a1db17de0340e504c new file mode 100644 index 0000000..e9a30e3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0a/0a92c6b825a0960a1db17de0340e504c differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b0563372cb11420454a32e3d71f42ad b/Unity/Better Tracking/Library/Artifacts/0b/0b0563372cb11420454a32e3d71f42ad new file mode 100644 index 0000000..63caee2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b0563372cb11420454a32e3d71f42ad differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b18672a8b980798bb4db3482068283a b/Unity/Better Tracking/Library/Artifacts/0b/0b18672a8b980798bb4db3482068283a new file mode 100644 index 0000000..ac25c8c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b18672a8b980798bb4db3482068283a differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b2b075e3b9f3b891e20807544fced52 b/Unity/Better Tracking/Library/Artifacts/0b/0b2b075e3b9f3b891e20807544fced52 new file mode 100644 index 0000000..35fa932 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b2b075e3b9f3b891e20807544fced52 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b52e2ab71b238cfdcb25a4ca5bdb358 b/Unity/Better Tracking/Library/Artifacts/0b/0b52e2ab71b238cfdcb25a4ca5bdb358 new file mode 100644 index 0000000..47e830c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b52e2ab71b238cfdcb25a4ca5bdb358 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b65c4f5a95b55ff2119cc0671b2810e b/Unity/Better Tracking/Library/Artifacts/0b/0b65c4f5a95b55ff2119cc0671b2810e new file mode 100644 index 0000000..f856740 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b65c4f5a95b55ff2119cc0671b2810e differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b65cae0413cea3ad60bbfe8e56ce053 b/Unity/Better Tracking/Library/Artifacts/0b/0b65cae0413cea3ad60bbfe8e56ce053 new file mode 100644 index 0000000..0545369 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b65cae0413cea3ad60bbfe8e56ce053 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b665626b5ecced5c20710c4abcca284 b/Unity/Better Tracking/Library/Artifacts/0b/0b665626b5ecced5c20710c4abcca284 new file mode 100644 index 0000000..2ac3e88 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b665626b5ecced5c20710c4abcca284 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b8e8e9e71f60679c99b99fb41581455 b/Unity/Better Tracking/Library/Artifacts/0b/0b8e8e9e71f60679c99b99fb41581455 new file mode 100644 index 0000000..b7cd30b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b8e8e9e71f60679c99b99fb41581455 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0b99d4eba543b002fcf0edc6c2bc69e3 b/Unity/Better Tracking/Library/Artifacts/0b/0b99d4eba543b002fcf0edc6c2bc69e3 new file mode 100644 index 0000000..bd0b645 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0b99d4eba543b002fcf0edc6c2bc69e3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0bb0365638d1817dafe962f04dffbce1 b/Unity/Better Tracking/Library/Artifacts/0b/0bb0365638d1817dafe962f04dffbce1 new file mode 100644 index 0000000..c6d634b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0bb0365638d1817dafe962f04dffbce1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0b/0bff3055b3034b8ef6178b324fc634a2 b/Unity/Better Tracking/Library/Artifacts/0b/0bff3055b3034b8ef6178b324fc634a2 new file mode 100644 index 0000000..4f4e8a5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0b/0bff3055b3034b8ef6178b324fc634a2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0c/0c2926e03bce641e711bfe0fedc43044 b/Unity/Better Tracking/Library/Artifacts/0c/0c2926e03bce641e711bfe0fedc43044 new file mode 100644 index 0000000..0db1462 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0c/0c2926e03bce641e711bfe0fedc43044 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0c/0c2cd20ada6138daf76d93745c21a09d b/Unity/Better Tracking/Library/Artifacts/0c/0c2cd20ada6138daf76d93745c21a09d new file mode 100644 index 0000000..5d819a7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0c/0c2cd20ada6138daf76d93745c21a09d differ diff --git a/Unity/Better Tracking/Library/Artifacts/0c/0c3308580d621b7e5347c541ef32d659 b/Unity/Better Tracking/Library/Artifacts/0c/0c3308580d621b7e5347c541ef32d659 new file mode 100644 index 0000000..e6f3da4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0c/0c3308580d621b7e5347c541ef32d659 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 b/Unity/Better Tracking/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 new file mode 100644 index 0000000..019e876 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0c/0c93f18b8e5f9005f21ceae19588d158 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0c/0c98d830610d36504b03ec9187390822 b/Unity/Better Tracking/Library/Artifacts/0c/0c98d830610d36504b03ec9187390822 new file mode 100644 index 0000000..a618211 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0c/0c98d830610d36504b03ec9187390822 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0c/0c9c015ca7a3a278afa7b86e54d70162 b/Unity/Better Tracking/Library/Artifacts/0c/0c9c015ca7a3a278afa7b86e54d70162 new file mode 100644 index 0000000..bea1ff3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0c/0c9c015ca7a3a278afa7b86e54d70162 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0c/0cb0a970aa656b21d06f11ae9ca0e4bc b/Unity/Better Tracking/Library/Artifacts/0c/0cb0a970aa656b21d06f11ae9ca0e4bc new file mode 100644 index 0000000..d0fd4a1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0c/0cb0a970aa656b21d06f11ae9ca0e4bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0d2bde751b72d1668fee01efdd789449 b/Unity/Better Tracking/Library/Artifacts/0d/0d2bde751b72d1668fee01efdd789449 new file mode 100644 index 0000000..b1a870f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0d2bde751b72d1668fee01efdd789449 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0d3258e54562574f728de1f4cb9cac0d b/Unity/Better Tracking/Library/Artifacts/0d/0d3258e54562574f728de1f4cb9cac0d new file mode 100644 index 0000000..ed11046 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0d3258e54562574f728de1f4cb9cac0d differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0d39ac70f8b3ce9bf51ac4660dad85b8 b/Unity/Better Tracking/Library/Artifacts/0d/0d39ac70f8b3ce9bf51ac4660dad85b8 new file mode 100644 index 0000000..176e667 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0d39ac70f8b3ce9bf51ac4660dad85b8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 b/Unity/Better Tracking/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 new file mode 100644 index 0000000..3f93384 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0d7b7d099d82456f43844ae9eaa78e62 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0d98da0ec79d4dc1ef1fb1966137e5f4 b/Unity/Better Tracking/Library/Artifacts/0d/0d98da0ec79d4dc1ef1fb1966137e5f4 new file mode 100644 index 0000000..ec26bd9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0d98da0ec79d4dc1ef1fb1966137e5f4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0dce3c95060c57417f252408e14fdef6 b/Unity/Better Tracking/Library/Artifacts/0d/0dce3c95060c57417f252408e14fdef6 new file mode 100644 index 0000000..2523f0d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0dce3c95060c57417f252408e14fdef6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0dd272ab043c7e84dc3a418fc1de8905 b/Unity/Better Tracking/Library/Artifacts/0d/0dd272ab043c7e84dc3a418fc1de8905 new file mode 100644 index 0000000..18622cc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0dd272ab043c7e84dc3a418fc1de8905 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0de003f8b7583b37c62384c837f33053 b/Unity/Better Tracking/Library/Artifacts/0d/0de003f8b7583b37c62384c837f33053 new file mode 100644 index 0000000..9058673 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0de003f8b7583b37c62384c837f33053 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 b/Unity/Better Tracking/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 new file mode 100644 index 0000000..5d5f867 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0d/0de61355159f594a8f3ab14ad65c4146 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0e/0e990531a07d03217a1600de7277d405 b/Unity/Better Tracking/Library/Artifacts/0e/0e990531a07d03217a1600de7277d405 new file mode 100644 index 0000000..d9f7287 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0e/0e990531a07d03217a1600de7277d405 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0e/0eb173fbb44b200cf995b8c6b6e818f7 b/Unity/Better Tracking/Library/Artifacts/0e/0eb173fbb44b200cf995b8c6b6e818f7 new file mode 100644 index 0000000..49da184 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0e/0eb173fbb44b200cf995b8c6b6e818f7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0e/0ed073be3f6571f0a7ec103a676c0306 b/Unity/Better Tracking/Library/Artifacts/0e/0ed073be3f6571f0a7ec103a676c0306 new file mode 100644 index 0000000..3cbbefc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0e/0ed073be3f6571f0a7ec103a676c0306 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0e/0eec459848a2f7ac9bdb7141950877ba b/Unity/Better Tracking/Library/Artifacts/0e/0eec459848a2f7ac9bdb7141950877ba new file mode 100644 index 0000000..7df153e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0e/0eec459848a2f7ac9bdb7141950877ba differ diff --git a/Unity/Better Tracking/Library/Artifacts/0f/0f4ee62af9f2e3a2191b04b140c59f60 b/Unity/Better Tracking/Library/Artifacts/0f/0f4ee62af9f2e3a2191b04b140c59f60 new file mode 100644 index 0000000..ffe4939 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0f/0f4ee62af9f2e3a2191b04b140c59f60 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0f/0f5509a53c2eeda9f4104af8e5de6a7f b/Unity/Better Tracking/Library/Artifacts/0f/0f5509a53c2eeda9f4104af8e5de6a7f new file mode 100644 index 0000000..3384857 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0f/0f5509a53c2eeda9f4104af8e5de6a7f differ diff --git a/Unity/Better Tracking/Library/Artifacts/0f/0f71c422bdb6f0ee2aa5ee2d0fbd5ab5 b/Unity/Better Tracking/Library/Artifacts/0f/0f71c422bdb6f0ee2aa5ee2d0fbd5ab5 new file mode 100644 index 0000000..1c93534 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0f/0f71c422bdb6f0ee2aa5ee2d0fbd5ab5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e b/Unity/Better Tracking/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e new file mode 100644 index 0000000..0a07fb7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0f/0f91783f6a0131c0527a892bf77f672e differ diff --git a/Unity/Better Tracking/Library/Artifacts/0f/0fa4bbe13a8f475f26d9095112de9146 b/Unity/Better Tracking/Library/Artifacts/0f/0fa4bbe13a8f475f26d9095112de9146 new file mode 100644 index 0000000..77e2075 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/0f/0fa4bbe13a8f475f26d9095112de9146 differ diff --git a/Unity/Better Tracking/Library/Artifacts/10/100c8702d5004aad5aa713f62a6b4dbf b/Unity/Better Tracking/Library/Artifacts/10/100c8702d5004aad5aa713f62a6b4dbf new file mode 100644 index 0000000..0329c4d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/10/100c8702d5004aad5aa713f62a6b4dbf differ diff --git a/Unity/Better Tracking/Library/Artifacts/10/103d1b3cd6ee397f34db82055b627d0c b/Unity/Better Tracking/Library/Artifacts/10/103d1b3cd6ee397f34db82055b627d0c new file mode 100644 index 0000000..29153de Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/10/103d1b3cd6ee397f34db82055b627d0c differ diff --git a/Unity/Better Tracking/Library/Artifacts/10/104dd08d36d4ee14c8a6d5b468c0ad03 b/Unity/Better Tracking/Library/Artifacts/10/104dd08d36d4ee14c8a6d5b468c0ad03 new file mode 100644 index 0000000..4cdb813 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/10/104dd08d36d4ee14c8a6d5b468c0ad03 differ diff --git a/Unity/Better Tracking/Library/Artifacts/10/106671e3393a79ce254316f32647e2dc b/Unity/Better Tracking/Library/Artifacts/10/106671e3393a79ce254316f32647e2dc new file mode 100644 index 0000000..b097ad5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/10/106671e3393a79ce254316f32647e2dc differ diff --git a/Unity/Better Tracking/Library/Artifacts/10/10787e5e0aafad2401862a05c9aef276 b/Unity/Better Tracking/Library/Artifacts/10/10787e5e0aafad2401862a05c9aef276 new file mode 100644 index 0000000..f59cf3d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/10/10787e5e0aafad2401862a05c9aef276 differ diff --git a/Unity/Better Tracking/Library/Artifacts/10/108186eb62c98340b3c6252de4bcdae0 b/Unity/Better Tracking/Library/Artifacts/10/108186eb62c98340b3c6252de4bcdae0 new file mode 100644 index 0000000..1550bba Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/10/108186eb62c98340b3c6252de4bcdae0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/11/112faab00942986343298ae1f2409a24 b/Unity/Better Tracking/Library/Artifacts/11/112faab00942986343298ae1f2409a24 new file mode 100644 index 0000000..1e10839 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/11/112faab00942986343298ae1f2409a24 differ diff --git a/Unity/Better Tracking/Library/Artifacts/11/113367f72c4678de80e84f2fdeb2b318 b/Unity/Better Tracking/Library/Artifacts/11/113367f72c4678de80e84f2fdeb2b318 new file mode 100644 index 0000000..9cbff65 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/11/113367f72c4678de80e84f2fdeb2b318 differ diff --git a/Unity/Better Tracking/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 b/Unity/Better Tracking/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 new file mode 100644 index 0000000..6d9b313 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/11/11893022c46645582cd6743e65cbae72 differ diff --git a/Unity/Better Tracking/Library/Artifacts/11/1193d58045f5374381e9102f1628cf20 b/Unity/Better Tracking/Library/Artifacts/11/1193d58045f5374381e9102f1628cf20 new file mode 100644 index 0000000..bfd09ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/11/1193d58045f5374381e9102f1628cf20 differ diff --git a/Unity/Better Tracking/Library/Artifacts/11/11dec3f2e9953f69188c7e264a527fb3 b/Unity/Better Tracking/Library/Artifacts/11/11dec3f2e9953f69188c7e264a527fb3 new file mode 100644 index 0000000..f460cb2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/11/11dec3f2e9953f69188c7e264a527fb3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/11/11fd7ca79832aa5d856d42db46ba110b b/Unity/Better Tracking/Library/Artifacts/11/11fd7ca79832aa5d856d42db46ba110b new file mode 100644 index 0000000..877a3cc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/11/11fd7ca79832aa5d856d42db46ba110b differ diff --git a/Unity/Better Tracking/Library/Artifacts/12/1218b885d897d28cd091ca028cbf8353 b/Unity/Better Tracking/Library/Artifacts/12/1218b885d897d28cd091ca028cbf8353 new file mode 100644 index 0000000..248df80 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/12/1218b885d897d28cd091ca028cbf8353 differ diff --git a/Unity/Better Tracking/Library/Artifacts/12/12875c33159f4eb40e511f15a35303d3 b/Unity/Better Tracking/Library/Artifacts/12/12875c33159f4eb40e511f15a35303d3 new file mode 100644 index 0000000..37f59f8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/12/12875c33159f4eb40e511f15a35303d3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/13/1375f2798aa131ee54114791cbbb1e6c b/Unity/Better Tracking/Library/Artifacts/13/1375f2798aa131ee54114791cbbb1e6c new file mode 100644 index 0000000..ca82e59 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/13/1375f2798aa131ee54114791cbbb1e6c differ diff --git a/Unity/Better Tracking/Library/Artifacts/13/13b640d45bba148c55afe504cdbeb1ba b/Unity/Better Tracking/Library/Artifacts/13/13b640d45bba148c55afe504cdbeb1ba new file mode 100644 index 0000000..c8218ce Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/13/13b640d45bba148c55afe504cdbeb1ba differ diff --git a/Unity/Better Tracking/Library/Artifacts/13/13d60335b040cc6a911f8e50b0459ede b/Unity/Better Tracking/Library/Artifacts/13/13d60335b040cc6a911f8e50b0459ede new file mode 100644 index 0000000..76d3a6a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/13/13d60335b040cc6a911f8e50b0459ede differ diff --git a/Unity/Better Tracking/Library/Artifacts/13/13d678933b1f99e906aa5660c4a2b10b b/Unity/Better Tracking/Library/Artifacts/13/13d678933b1f99e906aa5660c4a2b10b new file mode 100644 index 0000000..17fba18 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/13/13d678933b1f99e906aa5660c4a2b10b differ diff --git a/Unity/Better Tracking/Library/Artifacts/13/13e8f7cc4887d8957e6cc6f7dd4fdf72 b/Unity/Better Tracking/Library/Artifacts/13/13e8f7cc4887d8957e6cc6f7dd4fdf72 new file mode 100644 index 0000000..b721c92 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/13/13e8f7cc4887d8957e6cc6f7dd4fdf72 differ diff --git a/Unity/Better Tracking/Library/Artifacts/14/144bea298e4986f1e99b6feaecbe6bba b/Unity/Better Tracking/Library/Artifacts/14/144bea298e4986f1e99b6feaecbe6bba new file mode 100644 index 0000000..c20d5a4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/14/144bea298e4986f1e99b6feaecbe6bba differ diff --git a/Unity/Better Tracking/Library/Artifacts/14/14828c43d3fc073519847e44af0db243 b/Unity/Better Tracking/Library/Artifacts/14/14828c43d3fc073519847e44af0db243 new file mode 100644 index 0000000..c98c8c8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/14/14828c43d3fc073519847e44af0db243 differ diff --git a/Unity/Better Tracking/Library/Artifacts/14/14855867fa92faf0682053e60c865243 b/Unity/Better Tracking/Library/Artifacts/14/14855867fa92faf0682053e60c865243 new file mode 100644 index 0000000..b34dd2b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/14/14855867fa92faf0682053e60c865243 differ diff --git a/Unity/Better Tracking/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 b/Unity/Better Tracking/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 new file mode 100644 index 0000000..da35bff Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/14/14c3ab8c980a1673ae5a73984f7ff7c0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/14/14c8fdcdcb011067b36abeb103283dae b/Unity/Better Tracking/Library/Artifacts/14/14c8fdcdcb011067b36abeb103283dae new file mode 100644 index 0000000..c6d939c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/14/14c8fdcdcb011067b36abeb103283dae differ diff --git a/Unity/Better Tracking/Library/Artifacts/14/14f3a40e80808a0464f737f153435972 b/Unity/Better Tracking/Library/Artifacts/14/14f3a40e80808a0464f737f153435972 new file mode 100644 index 0000000..c789d03 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/14/14f3a40e80808a0464f737f153435972 differ diff --git a/Unity/Better Tracking/Library/Artifacts/15/150092d52296ff99db22d8e243408f37 b/Unity/Better Tracking/Library/Artifacts/15/150092d52296ff99db22d8e243408f37 new file mode 100644 index 0000000..42c3b05 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/15/150092d52296ff99db22d8e243408f37 differ diff --git a/Unity/Better Tracking/Library/Artifacts/15/152165a2e8c8515c07497065f4f92445 b/Unity/Better Tracking/Library/Artifacts/15/152165a2e8c8515c07497065f4f92445 new file mode 100644 index 0000000..f27fc03 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/15/152165a2e8c8515c07497065f4f92445 differ diff --git a/Unity/Better Tracking/Library/Artifacts/15/154b86ae7c4233d030adc2ca2d75c875 b/Unity/Better Tracking/Library/Artifacts/15/154b86ae7c4233d030adc2ca2d75c875 new file mode 100644 index 0000000..c992f37 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/15/154b86ae7c4233d030adc2ca2d75c875 differ diff --git a/Unity/Better Tracking/Library/Artifacts/16/16152522e8e3626df10c1a6fe5c2325d b/Unity/Better Tracking/Library/Artifacts/16/16152522e8e3626df10c1a6fe5c2325d new file mode 100644 index 0000000..a46329e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/16/16152522e8e3626df10c1a6fe5c2325d differ diff --git a/Unity/Better Tracking/Library/Artifacts/16/1618fbf188cbfe8e8b8b548a0754db91 b/Unity/Better Tracking/Library/Artifacts/16/1618fbf188cbfe8e8b8b548a0754db91 new file mode 100644 index 0000000..3002a38 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/16/1618fbf188cbfe8e8b8b548a0754db91 differ diff --git a/Unity/Better Tracking/Library/Artifacts/16/163d7c22e03918d2759fe9001df8ac53 b/Unity/Better Tracking/Library/Artifacts/16/163d7c22e03918d2759fe9001df8ac53 new file mode 100644 index 0000000..878d4e1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/16/163d7c22e03918d2759fe9001df8ac53 differ diff --git a/Unity/Better Tracking/Library/Artifacts/16/168fc80db862a4b194f58390ce4a854e b/Unity/Better Tracking/Library/Artifacts/16/168fc80db862a4b194f58390ce4a854e new file mode 100644 index 0000000..c74b90e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/16/168fc80db862a4b194f58390ce4a854e differ diff --git a/Unity/Better Tracking/Library/Artifacts/16/16d8828f1e6bc55b819baf9fa92f5ce5 b/Unity/Better Tracking/Library/Artifacts/16/16d8828f1e6bc55b819baf9fa92f5ce5 new file mode 100644 index 0000000..c4a178f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/16/16d8828f1e6bc55b819baf9fa92f5ce5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/16/16de2fbd12c947a2aaa9ee1350d5d842 b/Unity/Better Tracking/Library/Artifacts/16/16de2fbd12c947a2aaa9ee1350d5d842 new file mode 100644 index 0000000..1b4b809 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/16/16de2fbd12c947a2aaa9ee1350d5d842 differ diff --git a/Unity/Better Tracking/Library/Artifacts/16/16f2ff988824c123ba7358117a17ae8b b/Unity/Better Tracking/Library/Artifacts/16/16f2ff988824c123ba7358117a17ae8b new file mode 100644 index 0000000..ed85761 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/16/16f2ff988824c123ba7358117a17ae8b differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 b/Unity/Better Tracking/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 new file mode 100644 index 0000000..26ed746 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/1735759485e4f1ee2aa56269ffcba793 differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/173e0410274c546e5062e50322fa894c b/Unity/Better Tracking/Library/Artifacts/17/173e0410274c546e5062e50322fa894c new file mode 100644 index 0000000..c82c90f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/173e0410274c546e5062e50322fa894c differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/17457796435e0404d6bbf480079f8440 b/Unity/Better Tracking/Library/Artifacts/17/17457796435e0404d6bbf480079f8440 new file mode 100644 index 0000000..a4d4c6f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/17457796435e0404d6bbf480079f8440 differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/1749867ef0cf3dd6c6874b69b35d5797 b/Unity/Better Tracking/Library/Artifacts/17/1749867ef0cf3dd6c6874b69b35d5797 new file mode 100644 index 0000000..05c5620 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/1749867ef0cf3dd6c6874b69b35d5797 differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/17732a0223182a8854a95cc0ff58de75 b/Unity/Better Tracking/Library/Artifacts/17/17732a0223182a8854a95cc0ff58de75 new file mode 100644 index 0000000..62152ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/17732a0223182a8854a95cc0ff58de75 differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/17a14bc56cf7e3a9296ba5df85feec59 b/Unity/Better Tracking/Library/Artifacts/17/17a14bc56cf7e3a9296ba5df85feec59 new file mode 100644 index 0000000..45814b4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/17a14bc56cf7e3a9296ba5df85feec59 differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/17b1d69405b16fced6c9760c7faed965 b/Unity/Better Tracking/Library/Artifacts/17/17b1d69405b16fced6c9760c7faed965 new file mode 100644 index 0000000..16ce122 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/17b1d69405b16fced6c9760c7faed965 differ diff --git a/Unity/Better Tracking/Library/Artifacts/17/17d90ce7a41ed4cce5e5fcb7fd7e4650 b/Unity/Better Tracking/Library/Artifacts/17/17d90ce7a41ed4cce5e5fcb7fd7e4650 new file mode 100644 index 0000000..3822800 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/17/17d90ce7a41ed4cce5e5fcb7fd7e4650 differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 b/Unity/Better Tracking/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 new file mode 100644 index 0000000..255a529 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/183a6e99acaec4f07f6fad965be9d8d2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/183fbb9d70eb26c35fdcc083b92f2109 b/Unity/Better Tracking/Library/Artifacts/18/183fbb9d70eb26c35fdcc083b92f2109 new file mode 100644 index 0000000..02cd2e1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/183fbb9d70eb26c35fdcc083b92f2109 differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/1852d50489ad0fdf69d257d836e0bce3 b/Unity/Better Tracking/Library/Artifacts/18/1852d50489ad0fdf69d257d836e0bce3 new file mode 100644 index 0000000..8de3ab1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/1852d50489ad0fdf69d257d836e0bce3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/1865f86c1a57671612e22681c98013d9 b/Unity/Better Tracking/Library/Artifacts/18/1865f86c1a57671612e22681c98013d9 new file mode 100644 index 0000000..2b10b30 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/1865f86c1a57671612e22681c98013d9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/187f0f016384eac7e69bf886b6969f0f b/Unity/Better Tracking/Library/Artifacts/18/187f0f016384eac7e69bf886b6969f0f new file mode 100644 index 0000000..2286de0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/187f0f016384eac7e69bf886b6969f0f differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/18909200d0e2012e1152e46e18259967 b/Unity/Better Tracking/Library/Artifacts/18/18909200d0e2012e1152e46e18259967 new file mode 100644 index 0000000..cff59cc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/18909200d0e2012e1152e46e18259967 differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/1898538cca48995ca89dfead71b45577 b/Unity/Better Tracking/Library/Artifacts/18/1898538cca48995ca89dfead71b45577 new file mode 100644 index 0000000..2e96f39 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/1898538cca48995ca89dfead71b45577 differ diff --git a/Unity/Better Tracking/Library/Artifacts/18/18ca1c44777eb0f94165fd692132d496 b/Unity/Better Tracking/Library/Artifacts/18/18ca1c44777eb0f94165fd692132d496 new file mode 100644 index 0000000..f1110fa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/18/18ca1c44777eb0f94165fd692132d496 differ diff --git a/Unity/Better Tracking/Library/Artifacts/19/1916e98a4658160f313e19def8161107 b/Unity/Better Tracking/Library/Artifacts/19/1916e98a4658160f313e19def8161107 new file mode 100644 index 0000000..97b0757 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/19/1916e98a4658160f313e19def8161107 differ diff --git a/Unity/Better Tracking/Library/Artifacts/19/197d837438f34a8c6258c4fb622d3bec b/Unity/Better Tracking/Library/Artifacts/19/197d837438f34a8c6258c4fb622d3bec new file mode 100644 index 0000000..53c3769 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/19/197d837438f34a8c6258c4fb622d3bec differ diff --git a/Unity/Better Tracking/Library/Artifacts/19/1983e4e5e241bdcb63b8dd751dfcaf4d b/Unity/Better Tracking/Library/Artifacts/19/1983e4e5e241bdcb63b8dd751dfcaf4d new file mode 100644 index 0000000..443d431 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/19/1983e4e5e241bdcb63b8dd751dfcaf4d differ diff --git a/Unity/Better Tracking/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 b/Unity/Better Tracking/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 new file mode 100644 index 0000000..83a512b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/19/19a83a896ca4e31324132dee4143cce1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/19/19affc6f7459b3145e978dfacf408b99 b/Unity/Better Tracking/Library/Artifacts/19/19affc6f7459b3145e978dfacf408b99 new file mode 100644 index 0000000..09af53d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/19/19affc6f7459b3145e978dfacf408b99 differ diff --git a/Unity/Better Tracking/Library/Artifacts/19/19d1716150f7597fdf72729b969d9003 b/Unity/Better Tracking/Library/Artifacts/19/19d1716150f7597fdf72729b969d9003 new file mode 100644 index 0000000..7e57626 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/19/19d1716150f7597fdf72729b969d9003 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1a/1a36d6aede28a7f0e619e32f46b3516c b/Unity/Better Tracking/Library/Artifacts/1a/1a36d6aede28a7f0e619e32f46b3516c new file mode 100644 index 0000000..1841df0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1a/1a36d6aede28a7f0e619e32f46b3516c differ diff --git a/Unity/Better Tracking/Library/Artifacts/1a/1a783e58663dc5011439f0805015910c b/Unity/Better Tracking/Library/Artifacts/1a/1a783e58663dc5011439f0805015910c new file mode 100644 index 0000000..66024fd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1a/1a783e58663dc5011439f0805015910c differ diff --git a/Unity/Better Tracking/Library/Artifacts/1a/1add8941b9d49e21690261301f0522c3 b/Unity/Better Tracking/Library/Artifacts/1a/1add8941b9d49e21690261301f0522c3 new file mode 100644 index 0000000..00c6e59 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1a/1add8941b9d49e21690261301f0522c3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1a/1afd15f3516a1673ef978ea2bdf9c9a1 b/Unity/Better Tracking/Library/Artifacts/1a/1afd15f3516a1673ef978ea2bdf9c9a1 new file mode 100644 index 0000000..1c4f9c1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1a/1afd15f3516a1673ef978ea2bdf9c9a1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1b/1b26607af0c94577d9fd82da1b87b14c b/Unity/Better Tracking/Library/Artifacts/1b/1b26607af0c94577d9fd82da1b87b14c new file mode 100644 index 0000000..9c21daa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1b/1b26607af0c94577d9fd82da1b87b14c differ diff --git a/Unity/Better Tracking/Library/Artifacts/1b/1b7c37bd70a17d55f576607c1232965e b/Unity/Better Tracking/Library/Artifacts/1b/1b7c37bd70a17d55f576607c1232965e new file mode 100644 index 0000000..567fe27 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1b/1b7c37bd70a17d55f576607c1232965e differ diff --git a/Unity/Better Tracking/Library/Artifacts/1b/1b7dc48224d29f05ab7269b3e30b7cd7 b/Unity/Better Tracking/Library/Artifacts/1b/1b7dc48224d29f05ab7269b3e30b7cd7 new file mode 100644 index 0000000..3c8cfc7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1b/1b7dc48224d29f05ab7269b3e30b7cd7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 b/Unity/Better Tracking/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 new file mode 100644 index 0000000..b1bbc14 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1b/1b9f6f4abc93150f7ff07755262f4366 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1c/1c141804e28db937b5d3321177374531 b/Unity/Better Tracking/Library/Artifacts/1c/1c141804e28db937b5d3321177374531 new file mode 100644 index 0000000..8688d53 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1c/1c141804e28db937b5d3321177374531 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1c/1c9e2a209eebac4ec3dd137ebb1d5c39 b/Unity/Better Tracking/Library/Artifacts/1c/1c9e2a209eebac4ec3dd137ebb1d5c39 new file mode 100644 index 0000000..eed0117 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1c/1c9e2a209eebac4ec3dd137ebb1d5c39 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1c/1cc7d060cb23483c688e1670a1cb018a b/Unity/Better Tracking/Library/Artifacts/1c/1cc7d060cb23483c688e1670a1cb018a new file mode 100644 index 0000000..a1236b0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1c/1cc7d060cb23483c688e1670a1cb018a differ diff --git a/Unity/Better Tracking/Library/Artifacts/1c/1ce1df110e005232886984a465b1f3d2 b/Unity/Better Tracking/Library/Artifacts/1c/1ce1df110e005232886984a465b1f3d2 new file mode 100644 index 0000000..84ac4fa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1c/1ce1df110e005232886984a465b1f3d2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1d/1d0ba7d7d9b52b1f41a713f9d80d1e44 b/Unity/Better Tracking/Library/Artifacts/1d/1d0ba7d7d9b52b1f41a713f9d80d1e44 new file mode 100644 index 0000000..158bb95 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1d/1d0ba7d7d9b52b1f41a713f9d80d1e44 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1d/1d1f9b0a3a465d26b651ff9a1631b295 b/Unity/Better Tracking/Library/Artifacts/1d/1d1f9b0a3a465d26b651ff9a1631b295 new file mode 100644 index 0000000..54674e6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1d/1d1f9b0a3a465d26b651ff9a1631b295 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1d/1d32003d26b628ca22de026bdb83b701 b/Unity/Better Tracking/Library/Artifacts/1d/1d32003d26b628ca22de026bdb83b701 new file mode 100644 index 0000000..26a7b03 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1d/1d32003d26b628ca22de026bdb83b701 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1d/1d749be32a58cecefc8318a5c08ebc06 b/Unity/Better Tracking/Library/Artifacts/1d/1d749be32a58cecefc8318a5c08ebc06 new file mode 100644 index 0000000..29a3c03 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1d/1d749be32a58cecefc8318a5c08ebc06 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1d/1dabb151344de6e49b5784b2fc6184ea b/Unity/Better Tracking/Library/Artifacts/1d/1dabb151344de6e49b5784b2fc6184ea new file mode 100644 index 0000000..690068d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1d/1dabb151344de6e49b5784b2fc6184ea differ diff --git a/Unity/Better Tracking/Library/Artifacts/1d/1dc6a9777da7fa05576fb37756f80460 b/Unity/Better Tracking/Library/Artifacts/1d/1dc6a9777da7fa05576fb37756f80460 new file mode 100644 index 0000000..2bd4e16 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1d/1dc6a9777da7fa05576fb37756f80460 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 b/Unity/Better Tracking/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 new file mode 100644 index 0000000..b1ff76c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1d/1de643b3cff993daae626fea8bf21812 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1e/1e1da7bf670f1ed666bc42309ac9af18 b/Unity/Better Tracking/Library/Artifacts/1e/1e1da7bf670f1ed666bc42309ac9af18 new file mode 100644 index 0000000..c7ddd60 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1e/1e1da7bf670f1ed666bc42309ac9af18 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1e/1e21f0e7a204b8bcf8faf164888e8403 b/Unity/Better Tracking/Library/Artifacts/1e/1e21f0e7a204b8bcf8faf164888e8403 new file mode 100644 index 0000000..4f95243 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1e/1e21f0e7a204b8bcf8faf164888e8403 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 b/Unity/Better Tracking/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 new file mode 100644 index 0000000..c96d671 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1e/1e314a8e14b09644c88fa2d5bfcc19a6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1e/1e46a92a2ee37983e0c17a1f95e76200 b/Unity/Better Tracking/Library/Artifacts/1e/1e46a92a2ee37983e0c17a1f95e76200 new file mode 100644 index 0000000..6abd244 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1e/1e46a92a2ee37983e0c17a1f95e76200 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1e/1e829351fe682a40409a4ae7e8cd90e2 b/Unity/Better Tracking/Library/Artifacts/1e/1e829351fe682a40409a4ae7e8cd90e2 new file mode 100644 index 0000000..f3ca614 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1e/1e829351fe682a40409a4ae7e8cd90e2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1e/1eb34c330897dbbfc7c93a62729f0ad7 b/Unity/Better Tracking/Library/Artifacts/1e/1eb34c330897dbbfc7c93a62729f0ad7 new file mode 100644 index 0000000..bd0b267 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1e/1eb34c330897dbbfc7c93a62729f0ad7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 b/Unity/Better Tracking/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 new file mode 100644 index 0000000..058d5e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1f/1f0f48dc7029cfefcb0c7e0a67ba4c42 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1f/1f1916e9f4bbaf40381e550c67c44a05 b/Unity/Better Tracking/Library/Artifacts/1f/1f1916e9f4bbaf40381e550c67c44a05 new file mode 100644 index 0000000..aae65d8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1f/1f1916e9f4bbaf40381e550c67c44a05 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1f/1f1b9058fc75dcc8095cad997e983d1a b/Unity/Better Tracking/Library/Artifacts/1f/1f1b9058fc75dcc8095cad997e983d1a new file mode 100644 index 0000000..954649f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1f/1f1b9058fc75dcc8095cad997e983d1a differ diff --git a/Unity/Better Tracking/Library/Artifacts/1f/1f6c9ac9d3ff05bedb11fb2c6a9f8049 b/Unity/Better Tracking/Library/Artifacts/1f/1f6c9ac9d3ff05bedb11fb2c6a9f8049 new file mode 100644 index 0000000..038f2c9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1f/1f6c9ac9d3ff05bedb11fb2c6a9f8049 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1f/1f95cdc442bed9460585251a48f2cac1 b/Unity/Better Tracking/Library/Artifacts/1f/1f95cdc442bed9460585251a48f2cac1 new file mode 100644 index 0000000..90fe43d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1f/1f95cdc442bed9460585251a48f2cac1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1f/1fe536768ecefcde11f9c272c38e3784 b/Unity/Better Tracking/Library/Artifacts/1f/1fe536768ecefcde11f9c272c38e3784 new file mode 100644 index 0000000..0975c5f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1f/1fe536768ecefcde11f9c272c38e3784 differ diff --git a/Unity/Better Tracking/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 b/Unity/Better Tracking/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 new file mode 100644 index 0000000..67ce8dd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/1f/1fec442c704ddf090ea5398d42d9df79 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/2004da3b6898cb118e84eccd7d5aaaf2 b/Unity/Better Tracking/Library/Artifacts/20/2004da3b6898cb118e84eccd7d5aaaf2 new file mode 100644 index 0000000..3a593e6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/2004da3b6898cb118e84eccd7d5aaaf2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/2013ba7f2ed5615df362e45f0a174881 b/Unity/Better Tracking/Library/Artifacts/20/2013ba7f2ed5615df362e45f0a174881 new file mode 100644 index 0000000..00cb82e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/2013ba7f2ed5615df362e45f0a174881 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/20739862c264723bd4ab0c0ab44ee233 b/Unity/Better Tracking/Library/Artifacts/20/20739862c264723bd4ab0c0ab44ee233 new file mode 100644 index 0000000..9e02d13 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/20739862c264723bd4ab0c0ab44ee233 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/209c99544bd857f225457122d9ba23c1 b/Unity/Better Tracking/Library/Artifacts/20/209c99544bd857f225457122d9ba23c1 new file mode 100644 index 0000000..90b1a7a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/209c99544bd857f225457122d9ba23c1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/20aadd1eaa144d3083c2b3d14ea9a138 b/Unity/Better Tracking/Library/Artifacts/20/20aadd1eaa144d3083c2b3d14ea9a138 new file mode 100644 index 0000000..c743ca1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/20aadd1eaa144d3083c2b3d14ea9a138 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/20b6b1b7c2444bf4252830651fca77a7 b/Unity/Better Tracking/Library/Artifacts/20/20b6b1b7c2444bf4252830651fca77a7 new file mode 100644 index 0000000..d2235e6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/20b6b1b7c2444bf4252830651fca77a7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/20c4c5ab659e14b1f757f95204d94d3d b/Unity/Better Tracking/Library/Artifacts/20/20c4c5ab659e14b1f757f95204d94d3d new file mode 100644 index 0000000..8c4f91f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/20c4c5ab659e14b1f757f95204d94d3d differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/20ed86779bc26366ce1e726af8f0c6c5 b/Unity/Better Tracking/Library/Artifacts/20/20ed86779bc26366ce1e726af8f0c6c5 new file mode 100644 index 0000000..3f02254 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/20ed86779bc26366ce1e726af8f0c6c5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/20/20f1b2db49a4961cb6435007ecfdca70 b/Unity/Better Tracking/Library/Artifacts/20/20f1b2db49a4961cb6435007ecfdca70 new file mode 100644 index 0000000..7100fc6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/20/20f1b2db49a4961cb6435007ecfdca70 differ diff --git a/Unity/Better Tracking/Library/Artifacts/21/2150f37200d38d7650fd024c5f067267 b/Unity/Better Tracking/Library/Artifacts/21/2150f37200d38d7650fd024c5f067267 new file mode 100644 index 0000000..18de7b5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/21/2150f37200d38d7650fd024c5f067267 differ diff --git a/Unity/Better Tracking/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e b/Unity/Better Tracking/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e new file mode 100644 index 0000000..131dd5e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/21/218b4ab5ad84f6287d370def3e2ded8e differ diff --git a/Unity/Better Tracking/Library/Artifacts/21/219ef8676d921e7940aa04aa1f758a5b b/Unity/Better Tracking/Library/Artifacts/21/219ef8676d921e7940aa04aa1f758a5b new file mode 100644 index 0000000..82020cd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/21/219ef8676d921e7940aa04aa1f758a5b differ diff --git a/Unity/Better Tracking/Library/Artifacts/21/21a665b1a53027d0a0fd97b3873377e5 b/Unity/Better Tracking/Library/Artifacts/21/21a665b1a53027d0a0fd97b3873377e5 new file mode 100644 index 0000000..b2c79a9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/21/21a665b1a53027d0a0fd97b3873377e5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/21/21b9d598b43a56cb9a3cee4d6a7db064 b/Unity/Better Tracking/Library/Artifacts/21/21b9d598b43a56cb9a3cee4d6a7db064 new file mode 100644 index 0000000..58a7457 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/21/21b9d598b43a56cb9a3cee4d6a7db064 differ diff --git a/Unity/Better Tracking/Library/Artifacts/21/21e526d1c9bfacd147df1e686378a188 b/Unity/Better Tracking/Library/Artifacts/21/21e526d1c9bfacd147df1e686378a188 new file mode 100644 index 0000000..5493563 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/21/21e526d1c9bfacd147df1e686378a188 differ diff --git a/Unity/Better Tracking/Library/Artifacts/22/2226fc4f3ae421799e77ad840d4fbb2d b/Unity/Better Tracking/Library/Artifacts/22/2226fc4f3ae421799e77ad840d4fbb2d new file mode 100644 index 0000000..8a03091 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/22/2226fc4f3ae421799e77ad840d4fbb2d differ diff --git a/Unity/Better Tracking/Library/Artifacts/22/222d2cacc4e6cade7841d60c525e46d8 b/Unity/Better Tracking/Library/Artifacts/22/222d2cacc4e6cade7841d60c525e46d8 new file mode 100644 index 0000000..a472d0b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/22/222d2cacc4e6cade7841d60c525e46d8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/22/22309e0236c8f88fe89d1417974d9046 b/Unity/Better Tracking/Library/Artifacts/22/22309e0236c8f88fe89d1417974d9046 new file mode 100644 index 0000000..02c4ca0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/22/22309e0236c8f88fe89d1417974d9046 differ diff --git a/Unity/Better Tracking/Library/Artifacts/22/223c01e1d0002ad9df6512624d2cb4eb b/Unity/Better Tracking/Library/Artifacts/22/223c01e1d0002ad9df6512624d2cb4eb new file mode 100644 index 0000000..596c8bb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/22/223c01e1d0002ad9df6512624d2cb4eb differ diff --git a/Unity/Better Tracking/Library/Artifacts/22/225614b324b57bef7cd773bd5d5ae62b b/Unity/Better Tracking/Library/Artifacts/22/225614b324b57bef7cd773bd5d5ae62b new file mode 100644 index 0000000..0cf77c0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/22/225614b324b57bef7cd773bd5d5ae62b differ diff --git a/Unity/Better Tracking/Library/Artifacts/22/22882b88a719b270fdc652fe576a48a4 b/Unity/Better Tracking/Library/Artifacts/22/22882b88a719b270fdc652fe576a48a4 new file mode 100644 index 0000000..08e1332 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/22/22882b88a719b270fdc652fe576a48a4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/22/22a68590d130f2183f7b12a86eac733e b/Unity/Better Tracking/Library/Artifacts/22/22a68590d130f2183f7b12a86eac733e new file mode 100644 index 0000000..7993003 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/22/22a68590d130f2183f7b12a86eac733e differ diff --git a/Unity/Better Tracking/Library/Artifacts/23/231ba2eef097781da27033d3f03a1795 b/Unity/Better Tracking/Library/Artifacts/23/231ba2eef097781da27033d3f03a1795 new file mode 100644 index 0000000..7f30141 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/23/231ba2eef097781da27033d3f03a1795 differ diff --git a/Unity/Better Tracking/Library/Artifacts/23/233751481dbd7cec9d50fc9329f81019 b/Unity/Better Tracking/Library/Artifacts/23/233751481dbd7cec9d50fc9329f81019 new file mode 100644 index 0000000..1b73d10 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/23/233751481dbd7cec9d50fc9329f81019 differ diff --git a/Unity/Better Tracking/Library/Artifacts/23/2340a28427ada507810df60b196b7f9f b/Unity/Better Tracking/Library/Artifacts/23/2340a28427ada507810df60b196b7f9f new file mode 100644 index 0000000..95b0182 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/23/2340a28427ada507810df60b196b7f9f differ diff --git a/Unity/Better Tracking/Library/Artifacts/23/2340b2cf7d4a0448da6768429c4514c6 b/Unity/Better Tracking/Library/Artifacts/23/2340b2cf7d4a0448da6768429c4514c6 new file mode 100644 index 0000000..15d3179 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/23/2340b2cf7d4a0448da6768429c4514c6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/23/236f2ffd357a9db0879356747e129364 b/Unity/Better Tracking/Library/Artifacts/23/236f2ffd357a9db0879356747e129364 new file mode 100644 index 0000000..b52d2e2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/23/236f2ffd357a9db0879356747e129364 differ diff --git a/Unity/Better Tracking/Library/Artifacts/23/23d844b58624ff979de6a62561d83f4f b/Unity/Better Tracking/Library/Artifacts/23/23d844b58624ff979de6a62561d83f4f new file mode 100644 index 0000000..1dc4faf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/23/23d844b58624ff979de6a62561d83f4f differ diff --git a/Unity/Better Tracking/Library/Artifacts/24/240a54735f35e672a5bc2b185d40ede1 b/Unity/Better Tracking/Library/Artifacts/24/240a54735f35e672a5bc2b185d40ede1 new file mode 100644 index 0000000..c2de8c6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/24/240a54735f35e672a5bc2b185d40ede1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/24/240e62eba6980a96073465533c73b5bc b/Unity/Better Tracking/Library/Artifacts/24/240e62eba6980a96073465533c73b5bc new file mode 100644 index 0000000..3600255 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/24/240e62eba6980a96073465533c73b5bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/24/243b102e44af9cca6a368987067b3519 b/Unity/Better Tracking/Library/Artifacts/24/243b102e44af9cca6a368987067b3519 new file mode 100644 index 0000000..f3527ad Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/24/243b102e44af9cca6a368987067b3519 differ diff --git a/Unity/Better Tracking/Library/Artifacts/24/247e74c9ebd3742c27c090f741b95e7e b/Unity/Better Tracking/Library/Artifacts/24/247e74c9ebd3742c27c090f741b95e7e new file mode 100644 index 0000000..99fa21b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/24/247e74c9ebd3742c27c090f741b95e7e differ diff --git a/Unity/Better Tracking/Library/Artifacts/24/24f8e4746a407e44f2a6e583869a5023 b/Unity/Better Tracking/Library/Artifacts/24/24f8e4746a407e44f2a6e583869a5023 new file mode 100644 index 0000000..be06e42 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/24/24f8e4746a407e44f2a6e583869a5023 differ diff --git a/Unity/Better Tracking/Library/Artifacts/24/24fd13401535f2f7824cfdc2338a0f7a b/Unity/Better Tracking/Library/Artifacts/24/24fd13401535f2f7824cfdc2338a0f7a new file mode 100644 index 0000000..7457dcb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/24/24fd13401535f2f7824cfdc2338a0f7a differ diff --git a/Unity/Better Tracking/Library/Artifacts/24/24fee72f29d2d4cf31de2b0d86dbb947 b/Unity/Better Tracking/Library/Artifacts/24/24fee72f29d2d4cf31de2b0d86dbb947 new file mode 100644 index 0000000..253f80c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/24/24fee72f29d2d4cf31de2b0d86dbb947 differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/2530136c06c33aaf79ebaa7be84737c6 b/Unity/Better Tracking/Library/Artifacts/25/2530136c06c33aaf79ebaa7be84737c6 new file mode 100644 index 0000000..cb8922f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/2530136c06c33aaf79ebaa7be84737c6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/2537fa10a276c27520da4a26726f911e b/Unity/Better Tracking/Library/Artifacts/25/2537fa10a276c27520da4a26726f911e new file mode 100644 index 0000000..2fd20c5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/2537fa10a276c27520da4a26726f911e differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/25421580af1662a74597b26e5d9073f5 b/Unity/Better Tracking/Library/Artifacts/25/25421580af1662a74597b26e5d9073f5 new file mode 100644 index 0000000..94c982e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/25421580af1662a74597b26e5d9073f5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/254ccc36b8032e1ff856b0a3b9592e6b b/Unity/Better Tracking/Library/Artifacts/25/254ccc36b8032e1ff856b0a3b9592e6b new file mode 100644 index 0000000..34a82b5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/254ccc36b8032e1ff856b0a3b9592e6b differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/2553cc97c869544c9d7b6df56d755db0 b/Unity/Better Tracking/Library/Artifacts/25/2553cc97c869544c9d7b6df56d755db0 new file mode 100644 index 0000000..5ef812f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/2553cc97c869544c9d7b6df56d755db0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/255d3daf4d11d6a10368466ecce63cde b/Unity/Better Tracking/Library/Artifacts/25/255d3daf4d11d6a10368466ecce63cde new file mode 100644 index 0000000..86ce72b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/255d3daf4d11d6a10368466ecce63cde differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/25b82d882aa29c6c541fccfc9019a91a b/Unity/Better Tracking/Library/Artifacts/25/25b82d882aa29c6c541fccfc9019a91a new file mode 100644 index 0000000..d65a0f8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/25b82d882aa29c6c541fccfc9019a91a differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/25bab2dae58aaad31ed1b2de37174edc b/Unity/Better Tracking/Library/Artifacts/25/25bab2dae58aaad31ed1b2de37174edc new file mode 100644 index 0000000..e28255a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/25bab2dae58aaad31ed1b2de37174edc differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/25be43745f27b085f42168418aed45de b/Unity/Better Tracking/Library/Artifacts/25/25be43745f27b085f42168418aed45de new file mode 100644 index 0000000..a2d56f7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/25be43745f27b085f42168418aed45de differ diff --git a/Unity/Better Tracking/Library/Artifacts/25/25dcc853ba80febdd03b92e484da4d65 b/Unity/Better Tracking/Library/Artifacts/25/25dcc853ba80febdd03b92e484da4d65 new file mode 100644 index 0000000..6b8a9b6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/25/25dcc853ba80febdd03b92e484da4d65 differ diff --git a/Unity/Better Tracking/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 b/Unity/Better Tracking/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 new file mode 100644 index 0000000..5c2fb6c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/26/2628688eb85ef2058da67257a75b4981 differ diff --git a/Unity/Better Tracking/Library/Artifacts/26/2689d6bbd48029b17bb93a407c58b5c4 b/Unity/Better Tracking/Library/Artifacts/26/2689d6bbd48029b17bb93a407c58b5c4 new file mode 100644 index 0000000..0d48f3f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/26/2689d6bbd48029b17bb93a407c58b5c4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/26/269534b2b7374a4ab1299364b9c987e2 b/Unity/Better Tracking/Library/Artifacts/26/269534b2b7374a4ab1299364b9c987e2 new file mode 100644 index 0000000..fbb3204 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/26/269534b2b7374a4ab1299364b9c987e2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/27/27363f31f400d4cb981242009ee7a050 b/Unity/Better Tracking/Library/Artifacts/27/27363f31f400d4cb981242009ee7a050 new file mode 100644 index 0000000..12942a5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/27/27363f31f400d4cb981242009ee7a050 differ diff --git a/Unity/Better Tracking/Library/Artifacts/27/27835716ee9db92275ffb2b611d0e259 b/Unity/Better Tracking/Library/Artifacts/27/27835716ee9db92275ffb2b611d0e259 new file mode 100644 index 0000000..fa764fa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/27/27835716ee9db92275ffb2b611d0e259 differ diff --git a/Unity/Better Tracking/Library/Artifacts/27/27cc7ee863012981d492e28526ba0506 b/Unity/Better Tracking/Library/Artifacts/27/27cc7ee863012981d492e28526ba0506 new file mode 100644 index 0000000..e5a6c00 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/27/27cc7ee863012981d492e28526ba0506 differ diff --git a/Unity/Better Tracking/Library/Artifacts/27/27d5ba76bafd93602d2abee5beb91fc9 b/Unity/Better Tracking/Library/Artifacts/27/27d5ba76bafd93602d2abee5beb91fc9 new file mode 100644 index 0000000..21a3f29 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/27/27d5ba76bafd93602d2abee5beb91fc9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/27/27ded3632c5ad15ba6b97976e7742d8c b/Unity/Better Tracking/Library/Artifacts/27/27ded3632c5ad15ba6b97976e7742d8c new file mode 100644 index 0000000..a9aae2f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/27/27ded3632c5ad15ba6b97976e7742d8c differ diff --git a/Unity/Better Tracking/Library/Artifacts/28/2800dcf655c2414c7fa182a58c3a01f8 b/Unity/Better Tracking/Library/Artifacts/28/2800dcf655c2414c7fa182a58c3a01f8 new file mode 100644 index 0000000..18edb11 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/28/2800dcf655c2414c7fa182a58c3a01f8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/28/282cdb0c7559e1cc72ae69e81fedc31e b/Unity/Better Tracking/Library/Artifacts/28/282cdb0c7559e1cc72ae69e81fedc31e new file mode 100644 index 0000000..8c37ac0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/28/282cdb0c7559e1cc72ae69e81fedc31e differ diff --git a/Unity/Better Tracking/Library/Artifacts/28/285e6d7b46af13a45330494c59bd472c b/Unity/Better Tracking/Library/Artifacts/28/285e6d7b46af13a45330494c59bd472c new file mode 100644 index 0000000..ed810f1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/28/285e6d7b46af13a45330494c59bd472c differ diff --git a/Unity/Better Tracking/Library/Artifacts/28/28996ccd3a2f7dbab1dedd43a6311acd b/Unity/Better Tracking/Library/Artifacts/28/28996ccd3a2f7dbab1dedd43a6311acd new file mode 100644 index 0000000..9a9f79f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/28/28996ccd3a2f7dbab1dedd43a6311acd differ diff --git a/Unity/Better Tracking/Library/Artifacts/28/28b1a9e9deba846af1e1a04319f6c41e b/Unity/Better Tracking/Library/Artifacts/28/28b1a9e9deba846af1e1a04319f6c41e new file mode 100644 index 0000000..85c3e2d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/28/28b1a9e9deba846af1e1a04319f6c41e differ diff --git a/Unity/Better Tracking/Library/Artifacts/28/28dd97b808ac09ff38b7253b61e73723 b/Unity/Better Tracking/Library/Artifacts/28/28dd97b808ac09ff38b7253b61e73723 new file mode 100644 index 0000000..dda16ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/28/28dd97b808ac09ff38b7253b61e73723 differ diff --git a/Unity/Better Tracking/Library/Artifacts/29/29296637e4b2e1046ec3db524c3b300b b/Unity/Better Tracking/Library/Artifacts/29/29296637e4b2e1046ec3db524c3b300b new file mode 100644 index 0000000..4cac225 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/29/29296637e4b2e1046ec3db524c3b300b differ diff --git a/Unity/Better Tracking/Library/Artifacts/29/293b86349f26f9043e0d1237b80f9b2e b/Unity/Better Tracking/Library/Artifacts/29/293b86349f26f9043e0d1237b80f9b2e new file mode 100644 index 0000000..cd32885 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/29/293b86349f26f9043e0d1237b80f9b2e differ diff --git a/Unity/Better Tracking/Library/Artifacts/29/2983d8807a356f8c5b54af2757536ede b/Unity/Better Tracking/Library/Artifacts/29/2983d8807a356f8c5b54af2757536ede new file mode 100644 index 0000000..ed33320 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/29/2983d8807a356f8c5b54af2757536ede differ diff --git a/Unity/Better Tracking/Library/Artifacts/29/29c3fc0d261aa5190383c301e7b0223b b/Unity/Better Tracking/Library/Artifacts/29/29c3fc0d261aa5190383c301e7b0223b new file mode 100644 index 0000000..a23fd6d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/29/29c3fc0d261aa5190383c301e7b0223b differ diff --git a/Unity/Better Tracking/Library/Artifacts/2a/2a2ebda7ecfd407fe5069859cfeda395 b/Unity/Better Tracking/Library/Artifacts/2a/2a2ebda7ecfd407fe5069859cfeda395 new file mode 100644 index 0000000..fa320dd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2a/2a2ebda7ecfd407fe5069859cfeda395 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2a/2a37a04dc3628ac1a25263b7cabc2614 b/Unity/Better Tracking/Library/Artifacts/2a/2a37a04dc3628ac1a25263b7cabc2614 new file mode 100644 index 0000000..8c42926 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2a/2a37a04dc3628ac1a25263b7cabc2614 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 b/Unity/Better Tracking/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 new file mode 100644 index 0000000..b70fff4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2a/2a4fc6e71962a80af60e19ab02c21e05 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2a/2a7356d758d42227e55bdaa60e50a6ae b/Unity/Better Tracking/Library/Artifacts/2a/2a7356d758d42227e55bdaa60e50a6ae new file mode 100644 index 0000000..54060b1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2a/2a7356d758d42227e55bdaa60e50a6ae differ diff --git a/Unity/Better Tracking/Library/Artifacts/2a/2abb50aa7df18bfc43331a983fb2f613 b/Unity/Better Tracking/Library/Artifacts/2a/2abb50aa7df18bfc43331a983fb2f613 new file mode 100644 index 0000000..72c7a47 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2a/2abb50aa7df18bfc43331a983fb2f613 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2b/2b072996665a36a0418d620f58c96ea8 b/Unity/Better Tracking/Library/Artifacts/2b/2b072996665a36a0418d620f58c96ea8 new file mode 100644 index 0000000..2d8929c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2b/2b072996665a36a0418d620f58c96ea8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2b/2b49cf7fd9cc0ea0ead65212b8baffad b/Unity/Better Tracking/Library/Artifacts/2b/2b49cf7fd9cc0ea0ead65212b8baffad new file mode 100644 index 0000000..92fd217 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2b/2b49cf7fd9cc0ea0ead65212b8baffad differ diff --git a/Unity/Better Tracking/Library/Artifacts/2b/2b632c82746c6f71aed726ae44e1c5ec b/Unity/Better Tracking/Library/Artifacts/2b/2b632c82746c6f71aed726ae44e1c5ec new file mode 100644 index 0000000..8448e39 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2b/2b632c82746c6f71aed726ae44e1c5ec differ diff --git a/Unity/Better Tracking/Library/Artifacts/2b/2b7da8d9fa3271323aa0183f74c63f24 b/Unity/Better Tracking/Library/Artifacts/2b/2b7da8d9fa3271323aa0183f74c63f24 new file mode 100644 index 0000000..21b7d95 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2b/2b7da8d9fa3271323aa0183f74c63f24 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2b/2b840633f9366e9a19fa423fa7165db8 b/Unity/Better Tracking/Library/Artifacts/2b/2b840633f9366e9a19fa423fa7165db8 new file mode 100644 index 0000000..0aee352 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2b/2b840633f9366e9a19fa423fa7165db8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2b/2bbf79de9b7b1eefe9865f71d74b7bac b/Unity/Better Tracking/Library/Artifacts/2b/2bbf79de9b7b1eefe9865f71d74b7bac new file mode 100644 index 0000000..06641f2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2b/2bbf79de9b7b1eefe9865f71d74b7bac differ diff --git a/Unity/Better Tracking/Library/Artifacts/2c/2c0467ad04dd7b7f5f1d29c8f616b1d2 b/Unity/Better Tracking/Library/Artifacts/2c/2c0467ad04dd7b7f5f1d29c8f616b1d2 new file mode 100644 index 0000000..3f73e87 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2c/2c0467ad04dd7b7f5f1d29c8f616b1d2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2c/2c317d9969ce5a626946b232aac8d632 b/Unity/Better Tracking/Library/Artifacts/2c/2c317d9969ce5a626946b232aac8d632 new file mode 100644 index 0000000..7fdc132 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2c/2c317d9969ce5a626946b232aac8d632 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2c/2c6e0ea5c8d912918053c044170f3d57 b/Unity/Better Tracking/Library/Artifacts/2c/2c6e0ea5c8d912918053c044170f3d57 new file mode 100644 index 0000000..22b9f2b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2c/2c6e0ea5c8d912918053c044170f3d57 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2c/2cab1b55929d0d62e92a872ee04ac7f2 b/Unity/Better Tracking/Library/Artifacts/2c/2cab1b55929d0d62e92a872ee04ac7f2 new file mode 100644 index 0000000..017dd39 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2c/2cab1b55929d0d62e92a872ee04ac7f2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2c/2cc7a7afef15847ba5f6135c1c2a1efc b/Unity/Better Tracking/Library/Artifacts/2c/2cc7a7afef15847ba5f6135c1c2a1efc new file mode 100644 index 0000000..3a23cc8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2c/2cc7a7afef15847ba5f6135c1c2a1efc differ diff --git a/Unity/Better Tracking/Library/Artifacts/2c/2ccdc6f91cb2b28e496da73bdca8b0d4 b/Unity/Better Tracking/Library/Artifacts/2c/2ccdc6f91cb2b28e496da73bdca8b0d4 new file mode 100644 index 0000000..4039d8a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2c/2ccdc6f91cb2b28e496da73bdca8b0d4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2d/2d04eff1f8e9cb48f93d501fff310e23 b/Unity/Better Tracking/Library/Artifacts/2d/2d04eff1f8e9cb48f93d501fff310e23 new file mode 100644 index 0000000..40d4541 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2d/2d04eff1f8e9cb48f93d501fff310e23 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2d/2d12d7ff320db3f9e9e6f431afeff0e1 b/Unity/Better Tracking/Library/Artifacts/2d/2d12d7ff320db3f9e9e6f431afeff0e1 new file mode 100644 index 0000000..1f36962 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2d/2d12d7ff320db3f9e9e6f431afeff0e1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2d/2d130a2f2381441aee12e3fd34a89644 b/Unity/Better Tracking/Library/Artifacts/2d/2d130a2f2381441aee12e3fd34a89644 new file mode 100644 index 0000000..2176b77 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2d/2d130a2f2381441aee12e3fd34a89644 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2d/2d2d75c1f0e76a3a15e432d2d8e4a1ae b/Unity/Better Tracking/Library/Artifacts/2d/2d2d75c1f0e76a3a15e432d2d8e4a1ae new file mode 100644 index 0000000..e6e79c2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2d/2d2d75c1f0e76a3a15e432d2d8e4a1ae differ diff --git a/Unity/Better Tracking/Library/Artifacts/2d/2d35f97cae97181faa10d9084cc2ce48 b/Unity/Better Tracking/Library/Artifacts/2d/2d35f97cae97181faa10d9084cc2ce48 new file mode 100644 index 0000000..100ce4a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2d/2d35f97cae97181faa10d9084cc2ce48 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2d/2d51b020113398f94cd02e7e10036414 b/Unity/Better Tracking/Library/Artifacts/2d/2d51b020113398f94cd02e7e10036414 new file mode 100644 index 0000000..0297955 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2d/2d51b020113398f94cd02e7e10036414 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2d/2d9d6f9e65d5741703845374c4b95aaa b/Unity/Better Tracking/Library/Artifacts/2d/2d9d6f9e65d5741703845374c4b95aaa new file mode 100644 index 0000000..56c55f9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2d/2d9d6f9e65d5741703845374c4b95aaa differ diff --git a/Unity/Better Tracking/Library/Artifacts/2e/2e475eb0e06be4efd399f29a1b236268 b/Unity/Better Tracking/Library/Artifacts/2e/2e475eb0e06be4efd399f29a1b236268 new file mode 100644 index 0000000..7bad4dc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2e/2e475eb0e06be4efd399f29a1b236268 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f b/Unity/Better Tracking/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f new file mode 100644 index 0000000..45ed57e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2e/2e679b17b0b8efc7d0d4c1fc1cdae31f differ diff --git a/Unity/Better Tracking/Library/Artifacts/2e/2eda16811d41ae4b48bfae1c0e7c869d b/Unity/Better Tracking/Library/Artifacts/2e/2eda16811d41ae4b48bfae1c0e7c869d new file mode 100644 index 0000000..48573c8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2e/2eda16811d41ae4b48bfae1c0e7c869d differ diff --git a/Unity/Better Tracking/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f b/Unity/Better Tracking/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f new file mode 100644 index 0000000..09dae98 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2e/2ede6af250f365011b922fd5686ac12f differ diff --git a/Unity/Better Tracking/Library/Artifacts/2f/2f01ed388f0e0e1613611cde69d0502c b/Unity/Better Tracking/Library/Artifacts/2f/2f01ed388f0e0e1613611cde69d0502c new file mode 100644 index 0000000..934ad59 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2f/2f01ed388f0e0e1613611cde69d0502c differ diff --git a/Unity/Better Tracking/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d b/Unity/Better Tracking/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d new file mode 100644 index 0000000..8dd2456 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2f/2f0e07adf97d2ebb4b04c37f95b0c44d differ diff --git a/Unity/Better Tracking/Library/Artifacts/2f/2f7336d64adbf8e59d5aeb739a25437e b/Unity/Better Tracking/Library/Artifacts/2f/2f7336d64adbf8e59d5aeb739a25437e new file mode 100644 index 0000000..c5938f1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2f/2f7336d64adbf8e59d5aeb739a25437e differ diff --git a/Unity/Better Tracking/Library/Artifacts/2f/2f98e88294731c7f47636867f10a9988 b/Unity/Better Tracking/Library/Artifacts/2f/2f98e88294731c7f47636867f10a9988 new file mode 100644 index 0000000..52afce4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2f/2f98e88294731c7f47636867f10a9988 differ diff --git a/Unity/Better Tracking/Library/Artifacts/2f/2faddef8852f4f797257eed7c19fa4c6 b/Unity/Better Tracking/Library/Artifacts/2f/2faddef8852f4f797257eed7c19fa4c6 new file mode 100644 index 0000000..520640b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/2f/2faddef8852f4f797257eed7c19fa4c6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/30/3008622b291645aa8e199ee46e171e17 b/Unity/Better Tracking/Library/Artifacts/30/3008622b291645aa8e199ee46e171e17 new file mode 100644 index 0000000..a894e9b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/30/3008622b291645aa8e199ee46e171e17 differ diff --git a/Unity/Better Tracking/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 b/Unity/Better Tracking/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 new file mode 100644 index 0000000..162bf34 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/30/301d2a805b957408c729ce1b6d9d3f47 differ diff --git a/Unity/Better Tracking/Library/Artifacts/30/303198f0d98899a91e8c2bb7b8a502c3 b/Unity/Better Tracking/Library/Artifacts/30/303198f0d98899a91e8c2bb7b8a502c3 new file mode 100644 index 0000000..0d7a492 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/30/303198f0d98899a91e8c2bb7b8a502c3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/30/3081ed87576734df0417cef100628d84 b/Unity/Better Tracking/Library/Artifacts/30/3081ed87576734df0417cef100628d84 new file mode 100644 index 0000000..63df08b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/30/3081ed87576734df0417cef100628d84 differ diff --git a/Unity/Better Tracking/Library/Artifacts/30/30b70e6b5bf85a392621fd1c086d99e8 b/Unity/Better Tracking/Library/Artifacts/30/30b70e6b5bf85a392621fd1c086d99e8 new file mode 100644 index 0000000..c1ace8a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/30/30b70e6b5bf85a392621fd1c086d99e8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/30/30e7c40533219f4889cea33b84cc055c b/Unity/Better Tracking/Library/Artifacts/30/30e7c40533219f4889cea33b84cc055c new file mode 100644 index 0000000..a4e062b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/30/30e7c40533219f4889cea33b84cc055c differ diff --git a/Unity/Better Tracking/Library/Artifacts/30/30fc0e9386a42fdec0cc3504ec4bc2f4 b/Unity/Better Tracking/Library/Artifacts/30/30fc0e9386a42fdec0cc3504ec4bc2f4 new file mode 100644 index 0000000..8abab02 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/30/30fc0e9386a42fdec0cc3504ec4bc2f4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/31/316b7fb83339ff65f418d144691b1c9c b/Unity/Better Tracking/Library/Artifacts/31/316b7fb83339ff65f418d144691b1c9c new file mode 100644 index 0000000..f983522 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/31/316b7fb83339ff65f418d144691b1c9c differ diff --git a/Unity/Better Tracking/Library/Artifacts/31/317cd1aa5340b97836d5b7f4dd92538e b/Unity/Better Tracking/Library/Artifacts/31/317cd1aa5340b97836d5b7f4dd92538e new file mode 100644 index 0000000..63ce1ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/31/317cd1aa5340b97836d5b7f4dd92538e differ diff --git a/Unity/Better Tracking/Library/Artifacts/31/31acb9f4e98b6247505c9df47283747f b/Unity/Better Tracking/Library/Artifacts/31/31acb9f4e98b6247505c9df47283747f new file mode 100644 index 0000000..4eda4ea Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/31/31acb9f4e98b6247505c9df47283747f differ diff --git a/Unity/Better Tracking/Library/Artifacts/31/31df733150633640e876aaeefc353b20 b/Unity/Better Tracking/Library/Artifacts/31/31df733150633640e876aaeefc353b20 new file mode 100644 index 0000000..7dc437d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/31/31df733150633640e876aaeefc353b20 differ diff --git a/Unity/Better Tracking/Library/Artifacts/31/31eb67bd14bed63f51ce9c468a7d42e9 b/Unity/Better Tracking/Library/Artifacts/31/31eb67bd14bed63f51ce9c468a7d42e9 new file mode 100644 index 0000000..bdb468c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/31/31eb67bd14bed63f51ce9c468a7d42e9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 b/Unity/Better Tracking/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 new file mode 100644 index 0000000..6429dfd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/32/321bdb0fcd5492bfed628b3efbd65363 differ diff --git a/Unity/Better Tracking/Library/Artifacts/32/32307b2c62d99aaeedc4f36dc38752e0 b/Unity/Better Tracking/Library/Artifacts/32/32307b2c62d99aaeedc4f36dc38752e0 new file mode 100644 index 0000000..1636bfd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/32/32307b2c62d99aaeedc4f36dc38752e0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/32/327888ecbca39937496b1d3bcc94d290 b/Unity/Better Tracking/Library/Artifacts/32/327888ecbca39937496b1d3bcc94d290 new file mode 100644 index 0000000..e340c24 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/32/327888ecbca39937496b1d3bcc94d290 differ diff --git a/Unity/Better Tracking/Library/Artifacts/32/32789ce5587e4907579d4f179f6fca74 b/Unity/Better Tracking/Library/Artifacts/32/32789ce5587e4907579d4f179f6fca74 new file mode 100644 index 0000000..1179f2e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/32/32789ce5587e4907579d4f179f6fca74 differ diff --git a/Unity/Better Tracking/Library/Artifacts/33/335153666476eae4ee20ecdd4d49a0b5 b/Unity/Better Tracking/Library/Artifacts/33/335153666476eae4ee20ecdd4d49a0b5 new file mode 100644 index 0000000..f2cdd7c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/33/335153666476eae4ee20ecdd4d49a0b5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/33/33a2d5dc78e1a92ed09aaad0790be16b b/Unity/Better Tracking/Library/Artifacts/33/33a2d5dc78e1a92ed09aaad0790be16b new file mode 100644 index 0000000..178b44e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/33/33a2d5dc78e1a92ed09aaad0790be16b differ diff --git a/Unity/Better Tracking/Library/Artifacts/33/33b0f6cb45fb4926cf1853956c705348 b/Unity/Better Tracking/Library/Artifacts/33/33b0f6cb45fb4926cf1853956c705348 new file mode 100644 index 0000000..2db360b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/33/33b0f6cb45fb4926cf1853956c705348 differ diff --git a/Unity/Better Tracking/Library/Artifacts/33/33d25aca59a0f4c768596c1def88b43c b/Unity/Better Tracking/Library/Artifacts/33/33d25aca59a0f4c768596c1def88b43c new file mode 100644 index 0000000..b58dd01 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/33/33d25aca59a0f4c768596c1def88b43c differ diff --git a/Unity/Better Tracking/Library/Artifacts/33/33f278400a119b73088014721cac8154 b/Unity/Better Tracking/Library/Artifacts/33/33f278400a119b73088014721cac8154 new file mode 100644 index 0000000..85d8e2f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/33/33f278400a119b73088014721cac8154 differ diff --git a/Unity/Better Tracking/Library/Artifacts/34/340f33491a77643bf719ebb504275c4e b/Unity/Better Tracking/Library/Artifacts/34/340f33491a77643bf719ebb504275c4e new file mode 100644 index 0000000..28dd0c4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/34/340f33491a77643bf719ebb504275c4e differ diff --git a/Unity/Better Tracking/Library/Artifacts/34/345084f5b7e70954e2754d37019eee2a b/Unity/Better Tracking/Library/Artifacts/34/345084f5b7e70954e2754d37019eee2a new file mode 100644 index 0000000..f88f290 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/34/345084f5b7e70954e2754d37019eee2a differ diff --git a/Unity/Better Tracking/Library/Artifacts/34/3461fabeaae7903f3f4bdc212aa205f9 b/Unity/Better Tracking/Library/Artifacts/34/3461fabeaae7903f3f4bdc212aa205f9 new file mode 100644 index 0000000..9c8a868 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/34/3461fabeaae7903f3f4bdc212aa205f9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/34/34713cbdd5627cd244b15926f961434d b/Unity/Better Tracking/Library/Artifacts/34/34713cbdd5627cd244b15926f961434d new file mode 100644 index 0000000..f86123e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/34/34713cbdd5627cd244b15926f961434d differ diff --git a/Unity/Better Tracking/Library/Artifacts/34/3487bc078512d3f038c99aef82d6efa7 b/Unity/Better Tracking/Library/Artifacts/34/3487bc078512d3f038c99aef82d6efa7 new file mode 100644 index 0000000..d7328a0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/34/3487bc078512d3f038c99aef82d6efa7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/34/34c46015c311dff305c2f4300934030b b/Unity/Better Tracking/Library/Artifacts/34/34c46015c311dff305c2f4300934030b new file mode 100644 index 0000000..156d39a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/34/34c46015c311dff305c2f4300934030b differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/3522734b31eb77e36d7e22ffb8667ed4 b/Unity/Better Tracking/Library/Artifacts/35/3522734b31eb77e36d7e22ffb8667ed4 new file mode 100644 index 0000000..372740b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/3522734b31eb77e36d7e22ffb8667ed4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/355146051afd4a3c43f0bf17a06af1ba b/Unity/Better Tracking/Library/Artifacts/35/355146051afd4a3c43f0bf17a06af1ba new file mode 100644 index 0000000..1a1f46a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/355146051afd4a3c43f0bf17a06af1ba differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/356e8e156edc1351425cd30c4dba10f5 b/Unity/Better Tracking/Library/Artifacts/35/356e8e156edc1351425cd30c4dba10f5 new file mode 100644 index 0000000..af57957 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/356e8e156edc1351425cd30c4dba10f5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/35899dfc56cc94888266ba7a7bc1779d b/Unity/Better Tracking/Library/Artifacts/35/35899dfc56cc94888266ba7a7bc1779d new file mode 100644 index 0000000..b66539a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/35899dfc56cc94888266ba7a7bc1779d differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/3597d1f251790ea0a3e7e11a478b531e b/Unity/Better Tracking/Library/Artifacts/35/3597d1f251790ea0a3e7e11a478b531e new file mode 100644 index 0000000..9dffa76 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/3597d1f251790ea0a3e7e11a478b531e differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/35bd1ad5cd07cf7aa5662b56dd4c4a50 b/Unity/Better Tracking/Library/Artifacts/35/35bd1ad5cd07cf7aa5662b56dd4c4a50 new file mode 100644 index 0000000..4e0519a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/35bd1ad5cd07cf7aa5662b56dd4c4a50 differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/35c0c0d35c32b4c9dec89984adde1dc6 b/Unity/Better Tracking/Library/Artifacts/35/35c0c0d35c32b4c9dec89984adde1dc6 new file mode 100644 index 0000000..1ca30a3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/35c0c0d35c32b4c9dec89984adde1dc6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/35/35fab0cf55a8523a019f1bea473bccd8 b/Unity/Better Tracking/Library/Artifacts/35/35fab0cf55a8523a019f1bea473bccd8 new file mode 100644 index 0000000..37e9302 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/35/35fab0cf55a8523a019f1bea473bccd8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/36/3623296fa083fa3c622a3eba496b7c53 b/Unity/Better Tracking/Library/Artifacts/36/3623296fa083fa3c622a3eba496b7c53 new file mode 100644 index 0000000..c3d8020 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/36/3623296fa083fa3c622a3eba496b7c53 differ diff --git a/Unity/Better Tracking/Library/Artifacts/36/365eaf3b8b3aff1e5e33bf84b1a41537 b/Unity/Better Tracking/Library/Artifacts/36/365eaf3b8b3aff1e5e33bf84b1a41537 new file mode 100644 index 0000000..0452be0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/36/365eaf3b8b3aff1e5e33bf84b1a41537 differ diff --git a/Unity/Better Tracking/Library/Artifacts/36/36ab2c9738a277f83de51a70797606c3 b/Unity/Better Tracking/Library/Artifacts/36/36ab2c9738a277f83de51a70797606c3 new file mode 100644 index 0000000..b900b00 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/36/36ab2c9738a277f83de51a70797606c3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/36/36c72cabf9c4b4b5ebe00da6799de405 b/Unity/Better Tracking/Library/Artifacts/36/36c72cabf9c4b4b5ebe00da6799de405 new file mode 100644 index 0000000..3f3e1fd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/36/36c72cabf9c4b4b5ebe00da6799de405 differ diff --git a/Unity/Better Tracking/Library/Artifacts/36/36f61ca691609102cb3771d7e2dcf0db b/Unity/Better Tracking/Library/Artifacts/36/36f61ca691609102cb3771d7e2dcf0db new file mode 100644 index 0000000..42a1c75 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/36/36f61ca691609102cb3771d7e2dcf0db differ diff --git a/Unity/Better Tracking/Library/Artifacts/37/37a71a045a592c4d5199a6b5cb3254f4 b/Unity/Better Tracking/Library/Artifacts/37/37a71a045a592c4d5199a6b5cb3254f4 new file mode 100644 index 0000000..18b90d0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/37/37a71a045a592c4d5199a6b5cb3254f4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 b/Unity/Better Tracking/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 new file mode 100644 index 0000000..c3028e4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/37/37bee9b8072e9e71f4af6ef5152ac205 differ diff --git a/Unity/Better Tracking/Library/Artifacts/38/380bb5306e918a308c8723eeefc67e66 b/Unity/Better Tracking/Library/Artifacts/38/380bb5306e918a308c8723eeefc67e66 new file mode 100644 index 0000000..68a5e5c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/38/380bb5306e918a308c8723eeefc67e66 differ diff --git a/Unity/Better Tracking/Library/Artifacts/38/382e0f052297e4194b8fd65f3f1d425e b/Unity/Better Tracking/Library/Artifacts/38/382e0f052297e4194b8fd65f3f1d425e new file mode 100644 index 0000000..1211267 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/38/382e0f052297e4194b8fd65f3f1d425e differ diff --git a/Unity/Better Tracking/Library/Artifacts/38/386ecd4c2dd2c5c3f668c3480e7c2512 b/Unity/Better Tracking/Library/Artifacts/38/386ecd4c2dd2c5c3f668c3480e7c2512 new file mode 100644 index 0000000..3913b4d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/38/386ecd4c2dd2c5c3f668c3480e7c2512 differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/392f3ddabc8b612e84201d00e8c93013 b/Unity/Better Tracking/Library/Artifacts/39/392f3ddabc8b612e84201d00e8c93013 new file mode 100644 index 0000000..5d787d6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/392f3ddabc8b612e84201d00e8c93013 differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 b/Unity/Better Tracking/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 new file mode 100644 index 0000000..12cebf3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/39781d2524cf795e9f7d37b7ebfc8b08 differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/399aae6d67f244b264f372bae0fec13a b/Unity/Better Tracking/Library/Artifacts/39/399aae6d67f244b264f372bae0fec13a new file mode 100644 index 0000000..fefc0aa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/399aae6d67f244b264f372bae0fec13a differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/39ad4103eb7b0a4d4f8128aea53ed32d b/Unity/Better Tracking/Library/Artifacts/39/39ad4103eb7b0a4d4f8128aea53ed32d new file mode 100644 index 0000000..5f02ebd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/39ad4103eb7b0a4d4f8128aea53ed32d differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/39cdf28920fad9c120c8828b2b873145 b/Unity/Better Tracking/Library/Artifacts/39/39cdf28920fad9c120c8828b2b873145 new file mode 100644 index 0000000..f7fcf9c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/39cdf28920fad9c120c8828b2b873145 differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 b/Unity/Better Tracking/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 new file mode 100644 index 0000000..9408a0b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/39d15b1e409260b2205ede5f464ff657 differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/39db1606dac22d9bf5052e778ed3f8cf b/Unity/Better Tracking/Library/Artifacts/39/39db1606dac22d9bf5052e778ed3f8cf new file mode 100644 index 0000000..796d474 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/39db1606dac22d9bf5052e778ed3f8cf differ diff --git a/Unity/Better Tracking/Library/Artifacts/39/39e9c1958747cbb12b8efd353025f287 b/Unity/Better Tracking/Library/Artifacts/39/39e9c1958747cbb12b8efd353025f287 new file mode 100644 index 0000000..ba7810b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/39/39e9c1958747cbb12b8efd353025f287 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3a/3a5b69f515424fc262cc9576402e113d b/Unity/Better Tracking/Library/Artifacts/3a/3a5b69f515424fc262cc9576402e113d new file mode 100644 index 0000000..9e0bbf4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3a/3a5b69f515424fc262cc9576402e113d differ diff --git a/Unity/Better Tracking/Library/Artifacts/3a/3abb1a1a4c286286850b2a7acb637bf8 b/Unity/Better Tracking/Library/Artifacts/3a/3abb1a1a4c286286850b2a7acb637bf8 new file mode 100644 index 0000000..b02e876 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3a/3abb1a1a4c286286850b2a7acb637bf8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3a/3ac8250da678a2d17ffee080f8e7a3ba b/Unity/Better Tracking/Library/Artifacts/3a/3ac8250da678a2d17ffee080f8e7a3ba new file mode 100644 index 0000000..c02e873 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3a/3ac8250da678a2d17ffee080f8e7a3ba differ diff --git a/Unity/Better Tracking/Library/Artifacts/3a/3acae2893ce0bccf4b0fbd8a8d569385 b/Unity/Better Tracking/Library/Artifacts/3a/3acae2893ce0bccf4b0fbd8a8d569385 new file mode 100644 index 0000000..8808ba5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3a/3acae2893ce0bccf4b0fbd8a8d569385 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3a/3ae1932273d596633835be16d3c66b69 b/Unity/Better Tracking/Library/Artifacts/3a/3ae1932273d596633835be16d3c66b69 new file mode 100644 index 0000000..57bf618 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3a/3ae1932273d596633835be16d3c66b69 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3a/3ae1fc80670e07af22c319a62ff09e86 b/Unity/Better Tracking/Library/Artifacts/3a/3ae1fc80670e07af22c319a62ff09e86 new file mode 100644 index 0000000..598c766 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3a/3ae1fc80670e07af22c319a62ff09e86 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3b/3b111e5ba0f2d813f8b1b815b15c134a b/Unity/Better Tracking/Library/Artifacts/3b/3b111e5ba0f2d813f8b1b815b15c134a new file mode 100644 index 0000000..5f2a78f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3b/3b111e5ba0f2d813f8b1b815b15c134a differ diff --git a/Unity/Better Tracking/Library/Artifacts/3b/3b14998404427a14bb74616a497dd604 b/Unity/Better Tracking/Library/Artifacts/3b/3b14998404427a14bb74616a497dd604 new file mode 100644 index 0000000..81f2644 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3b/3b14998404427a14bb74616a497dd604 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 b/Unity/Better Tracking/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 new file mode 100644 index 0000000..fb2def4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3b/3b76e03cc6134422d4670a14dab598d2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3b/3b986e67d1766a0cfe5d92863e438dc0 b/Unity/Better Tracking/Library/Artifacts/3b/3b986e67d1766a0cfe5d92863e438dc0 new file mode 100644 index 0000000..1e2f25d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3b/3b986e67d1766a0cfe5d92863e438dc0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3b/3ba468d61d4a3750409b2f501e8dc4e5 b/Unity/Better Tracking/Library/Artifacts/3b/3ba468d61d4a3750409b2f501e8dc4e5 new file mode 100644 index 0000000..3a74640 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3b/3ba468d61d4a3750409b2f501e8dc4e5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3b/3be472d936b38aebc20806f15784f10d b/Unity/Better Tracking/Library/Artifacts/3b/3be472d936b38aebc20806f15784f10d new file mode 100644 index 0000000..08c2946 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3b/3be472d936b38aebc20806f15784f10d differ diff --git a/Unity/Better Tracking/Library/Artifacts/3c/3c86de8764a6f39f441c1c1df7bc9f79 b/Unity/Better Tracking/Library/Artifacts/3c/3c86de8764a6f39f441c1c1df7bc9f79 new file mode 100644 index 0000000..ecb74a2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3c/3c86de8764a6f39f441c1c1df7bc9f79 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3c/3ca9a7543c1b5558f267cda272c310b6 b/Unity/Better Tracking/Library/Artifacts/3c/3ca9a7543c1b5558f267cda272c310b6 new file mode 100644 index 0000000..58b6480 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3c/3ca9a7543c1b5558f267cda272c310b6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 b/Unity/Better Tracking/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 new file mode 100644 index 0000000..355f18e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3c/3ccf9007523111492c8d627d665fbe27 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3d2149792558c2aecf85ba6c10b86ba7 b/Unity/Better Tracking/Library/Artifacts/3d/3d2149792558c2aecf85ba6c10b86ba7 new file mode 100644 index 0000000..a6e2957 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3d2149792558c2aecf85ba6c10b86ba7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3d2edc6a84ac69024aa7d146a8ec955c b/Unity/Better Tracking/Library/Artifacts/3d/3d2edc6a84ac69024aa7d146a8ec955c new file mode 100644 index 0000000..00d3f82 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3d2edc6a84ac69024aa7d146a8ec955c differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3d712c80a8652e13c7d9f42ee2208682 b/Unity/Better Tracking/Library/Artifacts/3d/3d712c80a8652e13c7d9f42ee2208682 new file mode 100644 index 0000000..0012933 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3d712c80a8652e13c7d9f42ee2208682 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3d8e1d098839e999d3f467353930016c b/Unity/Better Tracking/Library/Artifacts/3d/3d8e1d098839e999d3f467353930016c new file mode 100644 index 0000000..090e671 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3d8e1d098839e999d3f467353930016c differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 b/Unity/Better Tracking/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 new file mode 100644 index 0000000..db0a883 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3da598fa08cfb9879b37424b8d3ca990 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3da8ef63f736145f06de6643d36df3e9 b/Unity/Better Tracking/Library/Artifacts/3d/3da8ef63f736145f06de6643d36df3e9 new file mode 100644 index 0000000..6b7e0fe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3da8ef63f736145f06de6643d36df3e9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3dd9f5d0d14b38dc2c71dbc1f0dc3e43 b/Unity/Better Tracking/Library/Artifacts/3d/3dd9f5d0d14b38dc2c71dbc1f0dc3e43 new file mode 100644 index 0000000..429b42d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3dd9f5d0d14b38dc2c71dbc1f0dc3e43 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3d/3defabd0190a1b326249a76a32524fd9 b/Unity/Better Tracking/Library/Artifacts/3d/3defabd0190a1b326249a76a32524fd9 new file mode 100644 index 0000000..6a94782 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3d/3defabd0190a1b326249a76a32524fd9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3e/3e32fa239a362cc1dc2c43a013824e07 b/Unity/Better Tracking/Library/Artifacts/3e/3e32fa239a362cc1dc2c43a013824e07 new file mode 100644 index 0000000..8754d3d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3e/3e32fa239a362cc1dc2c43a013824e07 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3e/3e439588f223b86666824727531b069b b/Unity/Better Tracking/Library/Artifacts/3e/3e439588f223b86666824727531b069b new file mode 100644 index 0000000..d7ab1b3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3e/3e439588f223b86666824727531b069b differ diff --git a/Unity/Better Tracking/Library/Artifacts/3e/3e64e952ae2ba8fb473785f9086dea02 b/Unity/Better Tracking/Library/Artifacts/3e/3e64e952ae2ba8fb473785f9086dea02 new file mode 100644 index 0000000..f6d9d57 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3e/3e64e952ae2ba8fb473785f9086dea02 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3e/3e77fb6872858a6ac25e8e3ac0ea8027 b/Unity/Better Tracking/Library/Artifacts/3e/3e77fb6872858a6ac25e8e3ac0ea8027 new file mode 100644 index 0000000..17b10e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3e/3e77fb6872858a6ac25e8e3ac0ea8027 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 b/Unity/Better Tracking/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 new file mode 100644 index 0000000..6747ee5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3f/3f878ef34779674a3880a4f567a87ff5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3f/3fa8c09a751286c012bc81a049da8c6d b/Unity/Better Tracking/Library/Artifacts/3f/3fa8c09a751286c012bc81a049da8c6d new file mode 100644 index 0000000..40b416b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3f/3fa8c09a751286c012bc81a049da8c6d differ diff --git a/Unity/Better Tracking/Library/Artifacts/3f/3fd35339585e5c666e064152098cdeb6 b/Unity/Better Tracking/Library/Artifacts/3f/3fd35339585e5c666e064152098cdeb6 new file mode 100644 index 0000000..b091021 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3f/3fd35339585e5c666e064152098cdeb6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3f/3fe3b43b437df510a577afc30365c4dd b/Unity/Better Tracking/Library/Artifacts/3f/3fe3b43b437df510a577afc30365c4dd new file mode 100644 index 0000000..a5c2ac1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3f/3fe3b43b437df510a577afc30365c4dd differ diff --git a/Unity/Better Tracking/Library/Artifacts/3f/3febbaba31c36e35b6f3568d0586a341 b/Unity/Better Tracking/Library/Artifacts/3f/3febbaba31c36e35b6f3568d0586a341 new file mode 100644 index 0000000..670f729 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3f/3febbaba31c36e35b6f3568d0586a341 differ diff --git a/Unity/Better Tracking/Library/Artifacts/3f/3fef8c33a4ebe4739ca1788fab5ca57a b/Unity/Better Tracking/Library/Artifacts/3f/3fef8c33a4ebe4739ca1788fab5ca57a new file mode 100644 index 0000000..7b1db55 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/3f/3fef8c33a4ebe4739ca1788fab5ca57a differ diff --git a/Unity/Better Tracking/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf b/Unity/Better Tracking/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf new file mode 100644 index 0000000..d79195d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/40/40566722eb2c9f8739ebd7bade9a3bcf differ diff --git a/Unity/Better Tracking/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 b/Unity/Better Tracking/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 new file mode 100644 index 0000000..4a41c33 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/41/411a14de3f1b19ad2f222e92ac3ae475 differ diff --git a/Unity/Better Tracking/Library/Artifacts/41/4161fbec1f410023bafe091f7c86c168 b/Unity/Better Tracking/Library/Artifacts/41/4161fbec1f410023bafe091f7c86c168 new file mode 100644 index 0000000..13ad455 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/41/4161fbec1f410023bafe091f7c86c168 differ diff --git a/Unity/Better Tracking/Library/Artifacts/41/4191cea8c5adebf68a0aa1be8ee1e345 b/Unity/Better Tracking/Library/Artifacts/41/4191cea8c5adebf68a0aa1be8ee1e345 new file mode 100644 index 0000000..642ff32 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/41/4191cea8c5adebf68a0aa1be8ee1e345 differ diff --git a/Unity/Better Tracking/Library/Artifacts/41/41a47bbbacb1742717d53832af5cc901 b/Unity/Better Tracking/Library/Artifacts/41/41a47bbbacb1742717d53832af5cc901 new file mode 100644 index 0000000..58aa971 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/41/41a47bbbacb1742717d53832af5cc901 differ diff --git a/Unity/Better Tracking/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb b/Unity/Better Tracking/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb new file mode 100644 index 0000000..ca295a2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/41/41c6c5869236961c25aec4229d604fdb differ diff --git a/Unity/Better Tracking/Library/Artifacts/41/41e892ed2839e40eab232510496c2b40 b/Unity/Better Tracking/Library/Artifacts/41/41e892ed2839e40eab232510496c2b40 new file mode 100644 index 0000000..73aa227 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/41/41e892ed2839e40eab232510496c2b40 differ diff --git a/Unity/Better Tracking/Library/Artifacts/42/42b608162144ff0b673bda5df2f7c319 b/Unity/Better Tracking/Library/Artifacts/42/42b608162144ff0b673bda5df2f7c319 new file mode 100644 index 0000000..2be24ae Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/42/42b608162144ff0b673bda5df2f7c319 differ diff --git a/Unity/Better Tracking/Library/Artifacts/42/42bd4c8873f9efbdd9329c287245bf7b b/Unity/Better Tracking/Library/Artifacts/42/42bd4c8873f9efbdd9329c287245bf7b new file mode 100644 index 0000000..01630e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/42/42bd4c8873f9efbdd9329c287245bf7b differ diff --git a/Unity/Better Tracking/Library/Artifacts/42/42ea0244816711c4121b3fda32f647a9 b/Unity/Better Tracking/Library/Artifacts/42/42ea0244816711c4121b3fda32f647a9 new file mode 100644 index 0000000..bca20e3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/42/42ea0244816711c4121b3fda32f647a9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/43/4312dd18084abee22f5d022fde6f68c0 b/Unity/Better Tracking/Library/Artifacts/43/4312dd18084abee22f5d022fde6f68c0 new file mode 100644 index 0000000..bc89f48 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/43/4312dd18084abee22f5d022fde6f68c0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/43/4340d8b06402ed07c29d75bcc9f8aa8c b/Unity/Better Tracking/Library/Artifacts/43/4340d8b06402ed07c29d75bcc9f8aa8c new file mode 100644 index 0000000..005e9d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/43/4340d8b06402ed07c29d75bcc9f8aa8c differ diff --git a/Unity/Better Tracking/Library/Artifacts/43/43567a3f0efbcbefeecf47f20410a56c b/Unity/Better Tracking/Library/Artifacts/43/43567a3f0efbcbefeecf47f20410a56c new file mode 100644 index 0000000..51271d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/43/43567a3f0efbcbefeecf47f20410a56c differ diff --git a/Unity/Better Tracking/Library/Artifacts/43/43628af7fd2ff2524ac96e25297756f6 b/Unity/Better Tracking/Library/Artifacts/43/43628af7fd2ff2524ac96e25297756f6 new file mode 100644 index 0000000..8fa2923 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/43/43628af7fd2ff2524ac96e25297756f6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/43/4381ad966d9c3b09bce1bf85d880ce46 b/Unity/Better Tracking/Library/Artifacts/43/4381ad966d9c3b09bce1bf85d880ce46 new file mode 100644 index 0000000..36a7bb7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/43/4381ad966d9c3b09bce1bf85d880ce46 differ diff --git a/Unity/Better Tracking/Library/Artifacts/43/43ae4a3262a8111669ea932572f2e62c b/Unity/Better Tracking/Library/Artifacts/43/43ae4a3262a8111669ea932572f2e62c new file mode 100644 index 0000000..a876069 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/43/43ae4a3262a8111669ea932572f2e62c differ diff --git a/Unity/Better Tracking/Library/Artifacts/43/43bad8a7bde8b7d7b208292b403a6506 b/Unity/Better Tracking/Library/Artifacts/43/43bad8a7bde8b7d7b208292b403a6506 new file mode 100644 index 0000000..6f308f6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/43/43bad8a7bde8b7d7b208292b403a6506 differ diff --git a/Unity/Better Tracking/Library/Artifacts/44/440491db1cb21c04dba45a6469ae3ebc b/Unity/Better Tracking/Library/Artifacts/44/440491db1cb21c04dba45a6469ae3ebc new file mode 100644 index 0000000..1c9b989 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/44/440491db1cb21c04dba45a6469ae3ebc differ diff --git a/Unity/Better Tracking/Library/Artifacts/44/44163f3509d39e87dd8ac0367f2eecdd b/Unity/Better Tracking/Library/Artifacts/44/44163f3509d39e87dd8ac0367f2eecdd new file mode 100644 index 0000000..dfb9ea6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/44/44163f3509d39e87dd8ac0367f2eecdd differ diff --git a/Unity/Better Tracking/Library/Artifacts/44/44570585075f0e9323961add4fb95059 b/Unity/Better Tracking/Library/Artifacts/44/44570585075f0e9323961add4fb95059 new file mode 100644 index 0000000..1d70c5f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/44/44570585075f0e9323961add4fb95059 differ diff --git a/Unity/Better Tracking/Library/Artifacts/44/44ee6d34a52dbf1640462d8b1c5166bc b/Unity/Better Tracking/Library/Artifacts/44/44ee6d34a52dbf1640462d8b1c5166bc new file mode 100644 index 0000000..9b9a933 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/44/44ee6d34a52dbf1640462d8b1c5166bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/450577723387ec957289d7dd4e5a3133 b/Unity/Better Tracking/Library/Artifacts/45/450577723387ec957289d7dd4e5a3133 new file mode 100644 index 0000000..e21bf86 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/450577723387ec957289d7dd4e5a3133 differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 b/Unity/Better Tracking/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 new file mode 100644 index 0000000..fc5a5e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/451ff88d0441d72891f1bd591f3b78b3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/452982b746e34ea19c809ac44af21218 b/Unity/Better Tracking/Library/Artifacts/45/452982b746e34ea19c809ac44af21218 new file mode 100644 index 0000000..447ea9f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/452982b746e34ea19c809ac44af21218 differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/4558727d14cf34895ae85b5cb6baf5fd b/Unity/Better Tracking/Library/Artifacts/45/4558727d14cf34895ae85b5cb6baf5fd new file mode 100644 index 0000000..51a670d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/4558727d14cf34895ae85b5cb6baf5fd differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/456a5c84850bb285c953b58a6699a8ae b/Unity/Better Tracking/Library/Artifacts/45/456a5c84850bb285c953b58a6699a8ae new file mode 100644 index 0000000..76b6768 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/456a5c84850bb285c953b58a6699a8ae differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/457338aad5b3643b75aa76a3a4e670f8 b/Unity/Better Tracking/Library/Artifacts/45/457338aad5b3643b75aa76a3a4e670f8 new file mode 100644 index 0000000..04ebf4d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/457338aad5b3643b75aa76a3a4e670f8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/459efbb72918f5c9ef20aa9480574c60 b/Unity/Better Tracking/Library/Artifacts/45/459efbb72918f5c9ef20aa9480574c60 new file mode 100644 index 0000000..f784cfe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/459efbb72918f5c9ef20aa9480574c60 differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/45a81f35fcbdc5ae53b24309f65f9c3f b/Unity/Better Tracking/Library/Artifacts/45/45a81f35fcbdc5ae53b24309f65f9c3f new file mode 100644 index 0000000..2cec824 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/45a81f35fcbdc5ae53b24309f65f9c3f differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/45ab422e6e441c72e27c27a43fcdec02 b/Unity/Better Tracking/Library/Artifacts/45/45ab422e6e441c72e27c27a43fcdec02 new file mode 100644 index 0000000..d8dfc6c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/45ab422e6e441c72e27c27a43fcdec02 differ diff --git a/Unity/Better Tracking/Library/Artifacts/45/45fb21a92804e7c5102211d5f9a150f2 b/Unity/Better Tracking/Library/Artifacts/45/45fb21a92804e7c5102211d5f9a150f2 new file mode 100644 index 0000000..6536371 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/45/45fb21a92804e7c5102211d5f9a150f2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/4624b766878371798347315dd4dd7af2 b/Unity/Better Tracking/Library/Artifacts/46/4624b766878371798347315dd4dd7af2 new file mode 100644 index 0000000..046ec3f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/4624b766878371798347315dd4dd7af2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/463b010c8eac035afa1d464cc3d5a579 b/Unity/Better Tracking/Library/Artifacts/46/463b010c8eac035afa1d464cc3d5a579 new file mode 100644 index 0000000..00c8bc5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/463b010c8eac035afa1d464cc3d5a579 differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/4659bf499a21c189080ba8ad9445f413 b/Unity/Better Tracking/Library/Artifacts/46/4659bf499a21c189080ba8ad9445f413 new file mode 100644 index 0000000..ae5268c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/4659bf499a21c189080ba8ad9445f413 differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/465ab51236d431a0a576042216989a01 b/Unity/Better Tracking/Library/Artifacts/46/465ab51236d431a0a576042216989a01 new file mode 100644 index 0000000..9184afa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/465ab51236d431a0a576042216989a01 differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/4677749baf56ec59ad9cfad8db033614 b/Unity/Better Tracking/Library/Artifacts/46/4677749baf56ec59ad9cfad8db033614 new file mode 100644 index 0000000..713f824 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/4677749baf56ec59ad9cfad8db033614 differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/467cc5aa0ca11953a16488ff2528ae25 b/Unity/Better Tracking/Library/Artifacts/46/467cc5aa0ca11953a16488ff2528ae25 new file mode 100644 index 0000000..184c85e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/467cc5aa0ca11953a16488ff2528ae25 differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/4680f9fe3170e688510dfd07c40dfc6e b/Unity/Better Tracking/Library/Artifacts/46/4680f9fe3170e688510dfd07c40dfc6e new file mode 100644 index 0000000..1caf59d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/4680f9fe3170e688510dfd07c40dfc6e differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/46a16f6960973e78d94495cd550a097d b/Unity/Better Tracking/Library/Artifacts/46/46a16f6960973e78d94495cd550a097d new file mode 100644 index 0000000..5ac2851 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/46a16f6960973e78d94495cd550a097d differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/46b040675b75999c3b0cdd689883c4db b/Unity/Better Tracking/Library/Artifacts/46/46b040675b75999c3b0cdd689883c4db new file mode 100644 index 0000000..c23f48b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/46b040675b75999c3b0cdd689883c4db differ diff --git a/Unity/Better Tracking/Library/Artifacts/46/46c55d397b39954d22d097208468efca b/Unity/Better Tracking/Library/Artifacts/46/46c55d397b39954d22d097208468efca new file mode 100644 index 0000000..2969fd4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/46/46c55d397b39954d22d097208468efca differ diff --git a/Unity/Better Tracking/Library/Artifacts/47/470068f96f73049abb83f516ac97698f b/Unity/Better Tracking/Library/Artifacts/47/470068f96f73049abb83f516ac97698f new file mode 100644 index 0000000..baac733 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/47/470068f96f73049abb83f516ac97698f differ diff --git a/Unity/Better Tracking/Library/Artifacts/47/474b28a68df29f87799230558068c9f9 b/Unity/Better Tracking/Library/Artifacts/47/474b28a68df29f87799230558068c9f9 new file mode 100644 index 0000000..edb3020 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/47/474b28a68df29f87799230558068c9f9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/47/4775e4a018932639704c718b097c2432 b/Unity/Better Tracking/Library/Artifacts/47/4775e4a018932639704c718b097c2432 new file mode 100644 index 0000000..a62efa4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/47/4775e4a018932639704c718b097c2432 differ diff --git a/Unity/Better Tracking/Library/Artifacts/47/47ac6a0f40dbb8cf0f339abc49fd5b89 b/Unity/Better Tracking/Library/Artifacts/47/47ac6a0f40dbb8cf0f339abc49fd5b89 new file mode 100644 index 0000000..8e781e4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/47/47ac6a0f40dbb8cf0f339abc49fd5b89 differ diff --git a/Unity/Better Tracking/Library/Artifacts/47/47c26c1f7d49105ad1c86773b8f8b7fd b/Unity/Better Tracking/Library/Artifacts/47/47c26c1f7d49105ad1c86773b8f8b7fd new file mode 100644 index 0000000..1b1a225 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/47/47c26c1f7d49105ad1c86773b8f8b7fd differ diff --git a/Unity/Better Tracking/Library/Artifacts/48/481f117fcfb219945ef615a198a4f33f b/Unity/Better Tracking/Library/Artifacts/48/481f117fcfb219945ef615a198a4f33f new file mode 100644 index 0000000..1e219fb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/48/481f117fcfb219945ef615a198a4f33f differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/4909b367e7f8d377a29054ac806860b2 b/Unity/Better Tracking/Library/Artifacts/49/4909b367e7f8d377a29054ac806860b2 new file mode 100644 index 0000000..0bcf6e9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/4909b367e7f8d377a29054ac806860b2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/4937845874265a09dc3c8a6f100b0f27 b/Unity/Better Tracking/Library/Artifacts/49/4937845874265a09dc3c8a6f100b0f27 new file mode 100644 index 0000000..35f26c9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/4937845874265a09dc3c8a6f100b0f27 differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/49389ea1fa6c945568b4b1b71d018743 b/Unity/Better Tracking/Library/Artifacts/49/49389ea1fa6c945568b4b1b71d018743 new file mode 100644 index 0000000..8666b8e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/49389ea1fa6c945568b4b1b71d018743 differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/497b9d58292752bd4532793c4bba4096 b/Unity/Better Tracking/Library/Artifacts/49/497b9d58292752bd4532793c4bba4096 new file mode 100644 index 0000000..93c385d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/497b9d58292752bd4532793c4bba4096 differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/49826df5456c0d906bcc2dbeaa786a25 b/Unity/Better Tracking/Library/Artifacts/49/49826df5456c0d906bcc2dbeaa786a25 new file mode 100644 index 0000000..0d33cde Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/49826df5456c0d906bcc2dbeaa786a25 differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/499872b1b91dc93e3598d8fcdce00fcd b/Unity/Better Tracking/Library/Artifacts/49/499872b1b91dc93e3598d8fcdce00fcd new file mode 100644 index 0000000..4efeffd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/499872b1b91dc93e3598d8fcdce00fcd differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/49ab7e29b7b60b90eaf380076231344f b/Unity/Better Tracking/Library/Artifacts/49/49ab7e29b7b60b90eaf380076231344f new file mode 100644 index 0000000..34f4a7b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/49ab7e29b7b60b90eaf380076231344f differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/49b5b998d4f2a6d3d7dc8a1b549055cd b/Unity/Better Tracking/Library/Artifacts/49/49b5b998d4f2a6d3d7dc8a1b549055cd new file mode 100644 index 0000000..81ddad3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/49b5b998d4f2a6d3d7dc8a1b549055cd differ diff --git a/Unity/Better Tracking/Library/Artifacts/49/49e90f62a58b6628bc0c292b06025796 b/Unity/Better Tracking/Library/Artifacts/49/49e90f62a58b6628bc0c292b06025796 new file mode 100644 index 0000000..08f0082 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/49/49e90f62a58b6628bc0c292b06025796 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4a/4a4beaeae80588e4c398a744f80ce554 b/Unity/Better Tracking/Library/Artifacts/4a/4a4beaeae80588e4c398a744f80ce554 new file mode 100644 index 0000000..f2741b8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4a/4a4beaeae80588e4c398a744f80ce554 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4a/4a6067c3a3ae35d9b2c3ffe3f4fb5f30 b/Unity/Better Tracking/Library/Artifacts/4a/4a6067c3a3ae35d9b2c3ffe3f4fb5f30 new file mode 100644 index 0000000..e6ef0a7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4a/4a6067c3a3ae35d9b2c3ffe3f4fb5f30 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4b/4b27e2789d7a25b262341b89ad787137 b/Unity/Better Tracking/Library/Artifacts/4b/4b27e2789d7a25b262341b89ad787137 new file mode 100644 index 0000000..317b889 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4b/4b27e2789d7a25b262341b89ad787137 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4b/4b3f90a1b9841c2b6dd24ddc2f593353 b/Unity/Better Tracking/Library/Artifacts/4b/4b3f90a1b9841c2b6dd24ddc2f593353 new file mode 100644 index 0000000..29a8a3b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4b/4b3f90a1b9841c2b6dd24ddc2f593353 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4b/4b4d18186a2e59596f531a7d91205de6 b/Unity/Better Tracking/Library/Artifacts/4b/4b4d18186a2e59596f531a7d91205de6 new file mode 100644 index 0000000..2b111c7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4b/4b4d18186a2e59596f531a7d91205de6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4b/4b5c7f8d8f64c459d5094c227069047a b/Unity/Better Tracking/Library/Artifacts/4b/4b5c7f8d8f64c459d5094c227069047a new file mode 100644 index 0000000..d49d7ea Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4b/4b5c7f8d8f64c459d5094c227069047a differ diff --git a/Unity/Better Tracking/Library/Artifacts/4b/4b697d1310c9c54a6ae2ec299309ce55 b/Unity/Better Tracking/Library/Artifacts/4b/4b697d1310c9c54a6ae2ec299309ce55 new file mode 100644 index 0000000..0f16ca4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4b/4b697d1310c9c54a6ae2ec299309ce55 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4c/4c19ca85d3deafda8d001c948b940512 b/Unity/Better Tracking/Library/Artifacts/4c/4c19ca85d3deafda8d001c948b940512 new file mode 100644 index 0000000..5922cdc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4c/4c19ca85d3deafda8d001c948b940512 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 b/Unity/Better Tracking/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 new file mode 100644 index 0000000..a3b75a5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4c/4c2571e185d659e48fb0fbb3581ada42 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4c/4c6c00e057a1430cca9f83cc99716d77 b/Unity/Better Tracking/Library/Artifacts/4c/4c6c00e057a1430cca9f83cc99716d77 new file mode 100644 index 0000000..197f558 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4c/4c6c00e057a1430cca9f83cc99716d77 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4c/4ca19547bb828c994d8b09b8924b117b b/Unity/Better Tracking/Library/Artifacts/4c/4ca19547bb828c994d8b09b8924b117b new file mode 100644 index 0000000..554d6a4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4c/4ca19547bb828c994d8b09b8924b117b differ diff --git a/Unity/Better Tracking/Library/Artifacts/4c/4cade66f8f50844182c7b7dcc6c63a4d b/Unity/Better Tracking/Library/Artifacts/4c/4cade66f8f50844182c7b7dcc6c63a4d new file mode 100644 index 0000000..a7793d5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4c/4cade66f8f50844182c7b7dcc6c63a4d differ diff --git a/Unity/Better Tracking/Library/Artifacts/4c/4cc868b4ef5ac63edb6d7a7f03012275 b/Unity/Better Tracking/Library/Artifacts/4c/4cc868b4ef5ac63edb6d7a7f03012275 new file mode 100644 index 0000000..376a934 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4c/4cc868b4ef5ac63edb6d7a7f03012275 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4c/4cf94901d2fda570cb15672ab364039f b/Unity/Better Tracking/Library/Artifacts/4c/4cf94901d2fda570cb15672ab364039f new file mode 100644 index 0000000..395e31c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4c/4cf94901d2fda570cb15672ab364039f differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4d14ce30839de31cd6155f9ab7c0f676 b/Unity/Better Tracking/Library/Artifacts/4d/4d14ce30839de31cd6155f9ab7c0f676 new file mode 100644 index 0000000..63a47af Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4d14ce30839de31cd6155f9ab7c0f676 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4d41288f8d441614c304ed4477ecda7d b/Unity/Better Tracking/Library/Artifacts/4d/4d41288f8d441614c304ed4477ecda7d new file mode 100644 index 0000000..1443309 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4d41288f8d441614c304ed4477ecda7d differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4d7df86e325c1a11e1839d4af19ff1b7 b/Unity/Better Tracking/Library/Artifacts/4d/4d7df86e325c1a11e1839d4af19ff1b7 new file mode 100644 index 0000000..19a3fe9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4d7df86e325c1a11e1839d4af19ff1b7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4da3a368515e0b777e38a4a3c4533b30 b/Unity/Better Tracking/Library/Artifacts/4d/4da3a368515e0b777e38a4a3c4533b30 new file mode 100644 index 0000000..cc5d0c0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4da3a368515e0b777e38a4a3c4533b30 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4dc1e96054af3986669e36309e039eb3 b/Unity/Better Tracking/Library/Artifacts/4d/4dc1e96054af3986669e36309e039eb3 new file mode 100644 index 0000000..a11e400 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4dc1e96054af3986669e36309e039eb3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4dcbbb6bd515edf0035ca5cd979ed502 b/Unity/Better Tracking/Library/Artifacts/4d/4dcbbb6bd515edf0035ca5cd979ed502 new file mode 100644 index 0000000..9b4f4d6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4dcbbb6bd515edf0035ca5cd979ed502 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4dd6b8f80b15efe5d8ee2a1889b5550a b/Unity/Better Tracking/Library/Artifacts/4d/4dd6b8f80b15efe5d8ee2a1889b5550a new file mode 100644 index 0000000..803afeb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4dd6b8f80b15efe5d8ee2a1889b5550a differ diff --git a/Unity/Better Tracking/Library/Artifacts/4d/4df8d168523f819f0dfb82e2be2cc50f b/Unity/Better Tracking/Library/Artifacts/4d/4df8d168523f819f0dfb82e2be2cc50f new file mode 100644 index 0000000..bafcdef Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4d/4df8d168523f819f0dfb82e2be2cc50f differ diff --git a/Unity/Better Tracking/Library/Artifacts/4e/4e789605cdf6c24345abf784ecde44c8 b/Unity/Better Tracking/Library/Artifacts/4e/4e789605cdf6c24345abf784ecde44c8 new file mode 100644 index 0000000..96d46bd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4e/4e789605cdf6c24345abf784ecde44c8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4e/4eab3cc579f9f2d5872e359959100691 b/Unity/Better Tracking/Library/Artifacts/4e/4eab3cc579f9f2d5872e359959100691 new file mode 100644 index 0000000..80e278a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4e/4eab3cc579f9f2d5872e359959100691 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4e/4eb00bf1a833338ede88b969906ed7ba b/Unity/Better Tracking/Library/Artifacts/4e/4eb00bf1a833338ede88b969906ed7ba new file mode 100644 index 0000000..58d2845 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4e/4eb00bf1a833338ede88b969906ed7ba differ diff --git a/Unity/Better Tracking/Library/Artifacts/4f/4f0e5d24d035a269b13eca792482783b b/Unity/Better Tracking/Library/Artifacts/4f/4f0e5d24d035a269b13eca792482783b new file mode 100644 index 0000000..b34e113 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4f/4f0e5d24d035a269b13eca792482783b differ diff --git a/Unity/Better Tracking/Library/Artifacts/4f/4f4edbe2ad0744b7c7de3d6fee041c54 b/Unity/Better Tracking/Library/Artifacts/4f/4f4edbe2ad0744b7c7de3d6fee041c54 new file mode 100644 index 0000000..f3174dd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4f/4f4edbe2ad0744b7c7de3d6fee041c54 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4f/4f60763d5b3b07ce29f24023f4073a43 b/Unity/Better Tracking/Library/Artifacts/4f/4f60763d5b3b07ce29f24023f4073a43 new file mode 100644 index 0000000..f6fc6c8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4f/4f60763d5b3b07ce29f24023f4073a43 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4f/4f721cebfd0c0120ac1cedaaadb30249 b/Unity/Better Tracking/Library/Artifacts/4f/4f721cebfd0c0120ac1cedaaadb30249 new file mode 100644 index 0000000..4094648 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4f/4f721cebfd0c0120ac1cedaaadb30249 differ diff --git a/Unity/Better Tracking/Library/Artifacts/4f/4fb6f3a128b1a34f6597952fc719cf83 b/Unity/Better Tracking/Library/Artifacts/4f/4fb6f3a128b1a34f6597952fc719cf83 new file mode 100644 index 0000000..b379c4c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/4f/4fb6f3a128b1a34f6597952fc719cf83 differ diff --git a/Unity/Better Tracking/Library/Artifacts/50/501e5b5dc2e5027e6c147283cc6e8b50 b/Unity/Better Tracking/Library/Artifacts/50/501e5b5dc2e5027e6c147283cc6e8b50 new file mode 100644 index 0000000..bfb3f3d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/50/501e5b5dc2e5027e6c147283cc6e8b50 differ diff --git a/Unity/Better Tracking/Library/Artifacts/50/50fdf86a564071d0b0bdaa317764996c b/Unity/Better Tracking/Library/Artifacts/50/50fdf86a564071d0b0bdaa317764996c new file mode 100644 index 0000000..ff13ec3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/50/50fdf86a564071d0b0bdaa317764996c differ diff --git a/Unity/Better Tracking/Library/Artifacts/51/516a5b21962ff04bf3f321da7d95eba1 b/Unity/Better Tracking/Library/Artifacts/51/516a5b21962ff04bf3f321da7d95eba1 new file mode 100644 index 0000000..08ada2b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/51/516a5b21962ff04bf3f321da7d95eba1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/51/517c9347322ee21fa53bc34cfd7b3cf4 b/Unity/Better Tracking/Library/Artifacts/51/517c9347322ee21fa53bc34cfd7b3cf4 new file mode 100644 index 0000000..0184381 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/51/517c9347322ee21fa53bc34cfd7b3cf4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/51/517dfe4fac1c366a3374e003a7119c78 b/Unity/Better Tracking/Library/Artifacts/51/517dfe4fac1c366a3374e003a7119c78 new file mode 100644 index 0000000..b73055c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/51/517dfe4fac1c366a3374e003a7119c78 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/52072487067710aaaaf3c22536055f8e b/Unity/Better Tracking/Library/Artifacts/52/52072487067710aaaaf3c22536055f8e new file mode 100644 index 0000000..ee7eb9c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/52072487067710aaaaf3c22536055f8e differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/520a975a7636e9b440e4a93dc2aa1ad6 b/Unity/Better Tracking/Library/Artifacts/52/520a975a7636e9b440e4a93dc2aa1ad6 new file mode 100644 index 0000000..5ced206 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/520a975a7636e9b440e4a93dc2aa1ad6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/52209e18a91e415158f03fd1a9349325 b/Unity/Better Tracking/Library/Artifacts/52/52209e18a91e415158f03fd1a9349325 new file mode 100644 index 0000000..37584a3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/52209e18a91e415158f03fd1a9349325 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/52379755a9d38201632192af9a345b5b b/Unity/Better Tracking/Library/Artifacts/52/52379755a9d38201632192af9a345b5b new file mode 100644 index 0000000..f0e0ea8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/52379755a9d38201632192af9a345b5b differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/523a32bfd40e72642d46648d37502b9d b/Unity/Better Tracking/Library/Artifacts/52/523a32bfd40e72642d46648d37502b9d new file mode 100644 index 0000000..4491806 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/523a32bfd40e72642d46648d37502b9d differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/523d5b8490330d5b3a21d18de3e9a259 b/Unity/Better Tracking/Library/Artifacts/52/523d5b8490330d5b3a21d18de3e9a259 new file mode 100644 index 0000000..479f885 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/523d5b8490330d5b3a21d18de3e9a259 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/52469ffecea8168389752e74e38efea8 b/Unity/Better Tracking/Library/Artifacts/52/52469ffecea8168389752e74e38efea8 new file mode 100644 index 0000000..d92b28e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/52469ffecea8168389752e74e38efea8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/5251743e5e688ccc9b20ae3b8fa12dc0 b/Unity/Better Tracking/Library/Artifacts/52/5251743e5e688ccc9b20ae3b8fa12dc0 new file mode 100644 index 0000000..1a31188 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/5251743e5e688ccc9b20ae3b8fa12dc0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/5259687b25aedccea232c332247d3ef9 b/Unity/Better Tracking/Library/Artifacts/52/5259687b25aedccea232c332247d3ef9 new file mode 100644 index 0000000..0e02c34 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/5259687b25aedccea232c332247d3ef9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/52709dc43265443ae23790c54648cad3 b/Unity/Better Tracking/Library/Artifacts/52/52709dc43265443ae23790c54648cad3 new file mode 100644 index 0000000..9b64475 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/52709dc43265443ae23790c54648cad3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/529474486e29afc8ea4230f3a732fd4c b/Unity/Better Tracking/Library/Artifacts/52/529474486e29afc8ea4230f3a732fd4c new file mode 100644 index 0000000..933e9c6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/529474486e29afc8ea4230f3a732fd4c differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/52d4cf024092ff1f00b847e75f7a1a9e b/Unity/Better Tracking/Library/Artifacts/52/52d4cf024092ff1f00b847e75f7a1a9e new file mode 100644 index 0000000..00ea3ab Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/52d4cf024092ff1f00b847e75f7a1a9e differ diff --git a/Unity/Better Tracking/Library/Artifacts/52/52eb09441d9db2c59b741ce1c1ccfda5 b/Unity/Better Tracking/Library/Artifacts/52/52eb09441d9db2c59b741ce1c1ccfda5 new file mode 100644 index 0000000..52f43bd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/52/52eb09441d9db2c59b741ce1c1ccfda5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/53/5348bce32188f757e0ecf55b5ca5ecfd b/Unity/Better Tracking/Library/Artifacts/53/5348bce32188f757e0ecf55b5ca5ecfd new file mode 100644 index 0000000..a3b98bd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/53/5348bce32188f757e0ecf55b5ca5ecfd differ diff --git a/Unity/Better Tracking/Library/Artifacts/53/5377e155e43412303f33cde5c1a473ef b/Unity/Better Tracking/Library/Artifacts/53/5377e155e43412303f33cde5c1a473ef new file mode 100644 index 0000000..f974f6f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/53/5377e155e43412303f33cde5c1a473ef differ diff --git a/Unity/Better Tracking/Library/Artifacts/53/53ac821b0fa91b1372baeee38560cf1c b/Unity/Better Tracking/Library/Artifacts/53/53ac821b0fa91b1372baeee38560cf1c new file mode 100644 index 0000000..ff93701 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/53/53ac821b0fa91b1372baeee38560cf1c differ diff --git a/Unity/Better Tracking/Library/Artifacts/53/53b6451be6caa81ab3057f886f2bf3d3 b/Unity/Better Tracking/Library/Artifacts/53/53b6451be6caa81ab3057f886f2bf3d3 new file mode 100644 index 0000000..a17a631 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/53/53b6451be6caa81ab3057f886f2bf3d3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b b/Unity/Better Tracking/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b new file mode 100644 index 0000000..a184e92 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/53/53c85e67f72f414d8ccbc610f67e588b differ diff --git a/Unity/Better Tracking/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 b/Unity/Better Tracking/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 new file mode 100644 index 0000000..1e4456c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/53/53eb767b9d79ac8ce6ef7c85d298eeb7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/54/5460ccb7dcf0b2aacd6365057d282fee b/Unity/Better Tracking/Library/Artifacts/54/5460ccb7dcf0b2aacd6365057d282fee new file mode 100644 index 0000000..e259577 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/54/5460ccb7dcf0b2aacd6365057d282fee differ diff --git a/Unity/Better Tracking/Library/Artifacts/54/5476e37e653eb88ba263006fedd272c7 b/Unity/Better Tracking/Library/Artifacts/54/5476e37e653eb88ba263006fedd272c7 new file mode 100644 index 0000000..8f1c9e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/54/5476e37e653eb88ba263006fedd272c7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/54/547cbdc1010bc64c99d98a13303eb89a b/Unity/Better Tracking/Library/Artifacts/54/547cbdc1010bc64c99d98a13303eb89a new file mode 100644 index 0000000..150a437 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/54/547cbdc1010bc64c99d98a13303eb89a differ diff --git a/Unity/Better Tracking/Library/Artifacts/54/54ab37d9230551edc182cb1f33fffd3a b/Unity/Better Tracking/Library/Artifacts/54/54ab37d9230551edc182cb1f33fffd3a new file mode 100644 index 0000000..2269a1e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/54/54ab37d9230551edc182cb1f33fffd3a differ diff --git a/Unity/Better Tracking/Library/Artifacts/54/54be394e08b1215540a64e1176b17742 b/Unity/Better Tracking/Library/Artifacts/54/54be394e08b1215540a64e1176b17742 new file mode 100644 index 0000000..ade99d3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/54/54be394e08b1215540a64e1176b17742 differ diff --git a/Unity/Better Tracking/Library/Artifacts/54/54cd1711d8d1239a20b9dd724c9d9986 b/Unity/Better Tracking/Library/Artifacts/54/54cd1711d8d1239a20b9dd724c9d9986 new file mode 100644 index 0000000..0cecb07 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/54/54cd1711d8d1239a20b9dd724c9d9986 differ diff --git a/Unity/Better Tracking/Library/Artifacts/54/54e876c96fa362b45384a9da8fd028bb b/Unity/Better Tracking/Library/Artifacts/54/54e876c96fa362b45384a9da8fd028bb new file mode 100644 index 0000000..d3a2435 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/54/54e876c96fa362b45384a9da8fd028bb differ diff --git a/Unity/Better Tracking/Library/Artifacts/55/550e0fed88b6dfcb2037fe42383f16ab b/Unity/Better Tracking/Library/Artifacts/55/550e0fed88b6dfcb2037fe42383f16ab new file mode 100644 index 0000000..4819878 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/55/550e0fed88b6dfcb2037fe42383f16ab differ diff --git a/Unity/Better Tracking/Library/Artifacts/55/55172145de3e87767c22e773df2a0e6c b/Unity/Better Tracking/Library/Artifacts/55/55172145de3e87767c22e773df2a0e6c new file mode 100644 index 0000000..2f8f854 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/55/55172145de3e87767c22e773df2a0e6c differ diff --git a/Unity/Better Tracking/Library/Artifacts/55/553cbf69317ebd31e75054a72bbf8dba b/Unity/Better Tracking/Library/Artifacts/55/553cbf69317ebd31e75054a72bbf8dba new file mode 100644 index 0000000..0deada1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/55/553cbf69317ebd31e75054a72bbf8dba differ diff --git a/Unity/Better Tracking/Library/Artifacts/55/5548e38ec025008030dc03f3261cca9e b/Unity/Better Tracking/Library/Artifacts/55/5548e38ec025008030dc03f3261cca9e new file mode 100644 index 0000000..7f30d1a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/55/5548e38ec025008030dc03f3261cca9e differ diff --git a/Unity/Better Tracking/Library/Artifacts/55/5567151dbf1030a85c11e36e0d4d8bdc b/Unity/Better Tracking/Library/Artifacts/55/5567151dbf1030a85c11e36e0d4d8bdc new file mode 100644 index 0000000..66b3da9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/55/5567151dbf1030a85c11e36e0d4d8bdc differ diff --git a/Unity/Better Tracking/Library/Artifacts/55/55b9feb0171b3c580877faf4614c18e6 b/Unity/Better Tracking/Library/Artifacts/55/55b9feb0171b3c580877faf4614c18e6 new file mode 100644 index 0000000..1d1079f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/55/55b9feb0171b3c580877faf4614c18e6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/55/55cd6cecdd8464b8cd20db03cd75bca4 b/Unity/Better Tracking/Library/Artifacts/55/55cd6cecdd8464b8cd20db03cd75bca4 new file mode 100644 index 0000000..b19817a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/55/55cd6cecdd8464b8cd20db03cd75bca4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/5601971bbe7e00e29464cebc98f0e2da b/Unity/Better Tracking/Library/Artifacts/56/5601971bbe7e00e29464cebc98f0e2da new file mode 100644 index 0000000..065f999 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/5601971bbe7e00e29464cebc98f0e2da differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/56376ac6b64486604f2cc01daafec75c b/Unity/Better Tracking/Library/Artifacts/56/56376ac6b64486604f2cc01daafec75c new file mode 100644 index 0000000..c5b115f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/56376ac6b64486604f2cc01daafec75c differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/56378cd6312dd882ceafff3dca8b3530 b/Unity/Better Tracking/Library/Artifacts/56/56378cd6312dd882ceafff3dca8b3530 new file mode 100644 index 0000000..4691e22 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/56378cd6312dd882ceafff3dca8b3530 differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/5692e4047ed55b53dfde92148de0e322 b/Unity/Better Tracking/Library/Artifacts/56/5692e4047ed55b53dfde92148de0e322 new file mode 100644 index 0000000..0207bd3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/5692e4047ed55b53dfde92148de0e322 differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/56bc041c62cd8231612d801780232734 b/Unity/Better Tracking/Library/Artifacts/56/56bc041c62cd8231612d801780232734 new file mode 100644 index 0000000..4e330f9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/56bc041c62cd8231612d801780232734 differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/56ca3d4d8daa82dd8a586613099230b9 b/Unity/Better Tracking/Library/Artifacts/56/56ca3d4d8daa82dd8a586613099230b9 new file mode 100644 index 0000000..fba3f3f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/56ca3d4d8daa82dd8a586613099230b9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/56de6cf82b1fb97a36a9cb156071ca4a b/Unity/Better Tracking/Library/Artifacts/56/56de6cf82b1fb97a36a9cb156071ca4a new file mode 100644 index 0000000..0d9ba8d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/56de6cf82b1fb97a36a9cb156071ca4a differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/56f17512f588172eba60d611a0aef55f b/Unity/Better Tracking/Library/Artifacts/56/56f17512f588172eba60d611a0aef55f new file mode 100644 index 0000000..f3a4ac6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/56f17512f588172eba60d611a0aef55f differ diff --git a/Unity/Better Tracking/Library/Artifacts/56/56f9e5b96750143b434de47b014e27c8 b/Unity/Better Tracking/Library/Artifacts/56/56f9e5b96750143b434de47b014e27c8 new file mode 100644 index 0000000..bea5b42 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/56/56f9e5b96750143b434de47b014e27c8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/57/57140c950df66e7783b68abff5f1664d b/Unity/Better Tracking/Library/Artifacts/57/57140c950df66e7783b68abff5f1664d new file mode 100644 index 0000000..e1f5c9e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/57/57140c950df66e7783b68abff5f1664d differ diff --git a/Unity/Better Tracking/Library/Artifacts/57/5714bd75c89275c138118174328cf838 b/Unity/Better Tracking/Library/Artifacts/57/5714bd75c89275c138118174328cf838 new file mode 100644 index 0000000..94e56f3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/57/5714bd75c89275c138118174328cf838 differ diff --git a/Unity/Better Tracking/Library/Artifacts/57/576b381058d3e9d6c44b697be85e28bf b/Unity/Better Tracking/Library/Artifacts/57/576b381058d3e9d6c44b697be85e28bf new file mode 100644 index 0000000..9863da1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/57/576b381058d3e9d6c44b697be85e28bf differ diff --git a/Unity/Better Tracking/Library/Artifacts/57/57cb8076ecea06cf93e63f9aee8d5fa6 b/Unity/Better Tracking/Library/Artifacts/57/57cb8076ecea06cf93e63f9aee8d5fa6 new file mode 100644 index 0000000..9e1daf3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/57/57cb8076ecea06cf93e63f9aee8d5fa6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/57/57cea06cae270d7b2d29f3d7ecf0713c b/Unity/Better Tracking/Library/Artifacts/57/57cea06cae270d7b2d29f3d7ecf0713c new file mode 100644 index 0000000..ad0c50a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/57/57cea06cae270d7b2d29f3d7ecf0713c differ diff --git a/Unity/Better Tracking/Library/Artifacts/57/57ed3038e7072a8520efa24bd9281913 b/Unity/Better Tracking/Library/Artifacts/57/57ed3038e7072a8520efa24bd9281913 new file mode 100644 index 0000000..b602267 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/57/57ed3038e7072a8520efa24bd9281913 differ diff --git a/Unity/Better Tracking/Library/Artifacts/58/583f3f83e689a38687108aaaae71c65c b/Unity/Better Tracking/Library/Artifacts/58/583f3f83e689a38687108aaaae71c65c new file mode 100644 index 0000000..f448e55 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/58/583f3f83e689a38687108aaaae71c65c differ diff --git a/Unity/Better Tracking/Library/Artifacts/58/586f3152e316f07fb88fd15d657e76a5 b/Unity/Better Tracking/Library/Artifacts/58/586f3152e316f07fb88fd15d657e76a5 new file mode 100644 index 0000000..32a0e2c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/58/586f3152e316f07fb88fd15d657e76a5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/58/58969e720eb7a1397543465fc3f29439 b/Unity/Better Tracking/Library/Artifacts/58/58969e720eb7a1397543465fc3f29439 new file mode 100644 index 0000000..862549e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/58/58969e720eb7a1397543465fc3f29439 differ diff --git a/Unity/Better Tracking/Library/Artifacts/58/58b5da5edf943cbc96db485718731d5d b/Unity/Better Tracking/Library/Artifacts/58/58b5da5edf943cbc96db485718731d5d new file mode 100644 index 0000000..1770c93 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/58/58b5da5edf943cbc96db485718731d5d differ diff --git a/Unity/Better Tracking/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df b/Unity/Better Tracking/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df new file mode 100644 index 0000000..38d9440 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/58/58ca184cf1be70a178c03977f34c80df differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/592d2014e272a0f71cbd4750e5970619 b/Unity/Better Tracking/Library/Artifacts/59/592d2014e272a0f71cbd4750e5970619 new file mode 100644 index 0000000..3c265ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/592d2014e272a0f71cbd4750e5970619 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/5930ddc13e4ecc910565a274011f3854 b/Unity/Better Tracking/Library/Artifacts/59/5930ddc13e4ecc910565a274011f3854 new file mode 100644 index 0000000..b5c7b2b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/5930ddc13e4ecc910565a274011f3854 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/5952f099ed0f54e5e78c044b98756304 b/Unity/Better Tracking/Library/Artifacts/59/5952f099ed0f54e5e78c044b98756304 new file mode 100644 index 0000000..1ae3300 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/5952f099ed0f54e5e78c044b98756304 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/59616250f33d3ebd8fb97d6bc6db1481 b/Unity/Better Tracking/Library/Artifacts/59/59616250f33d3ebd8fb97d6bc6db1481 new file mode 100644 index 0000000..88852e5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/59616250f33d3ebd8fb97d6bc6db1481 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/596b8f1cc18cd411760e4bf604ef74a1 b/Unity/Better Tracking/Library/Artifacts/59/596b8f1cc18cd411760e4bf604ef74a1 new file mode 100644 index 0000000..1a0d80e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/596b8f1cc18cd411760e4bf604ef74a1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/596da6a455d6f076e0a5f59757781d62 b/Unity/Better Tracking/Library/Artifacts/59/596da6a455d6f076e0a5f59757781d62 new file mode 100644 index 0000000..ba7b586 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/596da6a455d6f076e0a5f59757781d62 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/5973f86bba266c28b2fbae5a12be7f84 b/Unity/Better Tracking/Library/Artifacts/59/5973f86bba266c28b2fbae5a12be7f84 new file mode 100644 index 0000000..3288a47 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/5973f86bba266c28b2fbae5a12be7f84 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/598284f564cf84b6c9bfefd54f2f1aa4 b/Unity/Better Tracking/Library/Artifacts/59/598284f564cf84b6c9bfefd54f2f1aa4 new file mode 100644 index 0000000..a26a7e8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/598284f564cf84b6c9bfefd54f2f1aa4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/5988dfdf054e24eb3516fd717d931c32 b/Unity/Better Tracking/Library/Artifacts/59/5988dfdf054e24eb3516fd717d931c32 new file mode 100644 index 0000000..bda9942 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/5988dfdf054e24eb3516fd717d931c32 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/59d250300b85cb1611678986012b32a7 b/Unity/Better Tracking/Library/Artifacts/59/59d250300b85cb1611678986012b32a7 new file mode 100644 index 0000000..f8aa703 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/59d250300b85cb1611678986012b32a7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/59/59e8983755291108f612f8d093fae4da b/Unity/Better Tracking/Library/Artifacts/59/59e8983755291108f612f8d093fae4da new file mode 100644 index 0000000..912ee66 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/59/59e8983755291108f612f8d093fae4da differ diff --git a/Unity/Better Tracking/Library/Artifacts/5a/5a0b07aba0de0505c123074b495d2202 b/Unity/Better Tracking/Library/Artifacts/5a/5a0b07aba0de0505c123074b495d2202 new file mode 100644 index 0000000..6824357 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5a/5a0b07aba0de0505c123074b495d2202 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5a/5a0cc400286836fbed8987752ae8208c b/Unity/Better Tracking/Library/Artifacts/5a/5a0cc400286836fbed8987752ae8208c new file mode 100644 index 0000000..1b577e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5a/5a0cc400286836fbed8987752ae8208c differ diff --git a/Unity/Better Tracking/Library/Artifacts/5a/5a247b7211e4687c905090b68eede2a0 b/Unity/Better Tracking/Library/Artifacts/5a/5a247b7211e4687c905090b68eede2a0 new file mode 100644 index 0000000..b6a6c21 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5a/5a247b7211e4687c905090b68eede2a0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5a/5a3867e65bacd62f77f30b1ecaa551ed b/Unity/Better Tracking/Library/Artifacts/5a/5a3867e65bacd62f77f30b1ecaa551ed new file mode 100644 index 0000000..8392c7c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5a/5a3867e65bacd62f77f30b1ecaa551ed differ diff --git a/Unity/Better Tracking/Library/Artifacts/5a/5aa554a52057c6463d82a213aa4f1718 b/Unity/Better Tracking/Library/Artifacts/5a/5aa554a52057c6463d82a213aa4f1718 new file mode 100644 index 0000000..67b382b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5a/5aa554a52057c6463d82a213aa4f1718 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5a/5ad41b77859c3f64e4b4509a9daf547d b/Unity/Better Tracking/Library/Artifacts/5a/5ad41b77859c3f64e4b4509a9daf547d new file mode 100644 index 0000000..e01f3ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5a/5ad41b77859c3f64e4b4509a9daf547d differ diff --git a/Unity/Better Tracking/Library/Artifacts/5a/5ae2c2d6fa09c9c4a54261d35d8dcf3c b/Unity/Better Tracking/Library/Artifacts/5a/5ae2c2d6fa09c9c4a54261d35d8dcf3c new file mode 100644 index 0000000..1a9978e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5a/5ae2c2d6fa09c9c4a54261d35d8dcf3c differ diff --git a/Unity/Better Tracking/Library/Artifacts/5b/5b0eb981bac5613e4f3e646929a73b94 b/Unity/Better Tracking/Library/Artifacts/5b/5b0eb981bac5613e4f3e646929a73b94 new file mode 100644 index 0000000..7e9f861 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5b/5b0eb981bac5613e4f3e646929a73b94 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5b/5b9b1be8c1de774b97836c05a561849f b/Unity/Better Tracking/Library/Artifacts/5b/5b9b1be8c1de774b97836c05a561849f new file mode 100644 index 0000000..437b2e1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5b/5b9b1be8c1de774b97836c05a561849f differ diff --git a/Unity/Better Tracking/Library/Artifacts/5b/5ba0b072ae06b5ae902366f6c33ab93a b/Unity/Better Tracking/Library/Artifacts/5b/5ba0b072ae06b5ae902366f6c33ab93a new file mode 100644 index 0000000..421dcb7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5b/5ba0b072ae06b5ae902366f6c33ab93a differ diff --git a/Unity/Better Tracking/Library/Artifacts/5b/5bf7f363c3b991222784d02900af0c01 b/Unity/Better Tracking/Library/Artifacts/5b/5bf7f363c3b991222784d02900af0c01 new file mode 100644 index 0000000..a2ee6bf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5b/5bf7f363c3b991222784d02900af0c01 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5c/5c00f86a1a8b65ca63edefcb5f21c267 b/Unity/Better Tracking/Library/Artifacts/5c/5c00f86a1a8b65ca63edefcb5f21c267 new file mode 100644 index 0000000..6a40337 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5c/5c00f86a1a8b65ca63edefcb5f21c267 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5c/5c3baea16e6a80daf8b8a5537254efed b/Unity/Better Tracking/Library/Artifacts/5c/5c3baea16e6a80daf8b8a5537254efed new file mode 100644 index 0000000..fd2e947 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5c/5c3baea16e6a80daf8b8a5537254efed differ diff --git a/Unity/Better Tracking/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d b/Unity/Better Tracking/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d new file mode 100644 index 0000000..288c085 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5c/5cfa3da79aa4dab36f602655801edf3d differ diff --git a/Unity/Better Tracking/Library/Artifacts/5d/5d04dbcf8718ce9230e620a36217fe4c b/Unity/Better Tracking/Library/Artifacts/5d/5d04dbcf8718ce9230e620a36217fe4c new file mode 100644 index 0000000..249e4e2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5d/5d04dbcf8718ce9230e620a36217fe4c differ diff --git a/Unity/Better Tracking/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 b/Unity/Better Tracking/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 new file mode 100644 index 0000000..cae6d4c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5d/5d06e3c010f5ced81f33b48d3e81f663 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5d/5d1a740a61340f8d35ef32274a3bbfdc b/Unity/Better Tracking/Library/Artifacts/5d/5d1a740a61340f8d35ef32274a3bbfdc new file mode 100644 index 0000000..70d7984 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5d/5d1a740a61340f8d35ef32274a3bbfdc differ diff --git a/Unity/Better Tracking/Library/Artifacts/5d/5d790c96076bab5f285186d0b68e0998 b/Unity/Better Tracking/Library/Artifacts/5d/5d790c96076bab5f285186d0b68e0998 new file mode 100644 index 0000000..147da4e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5d/5d790c96076bab5f285186d0b68e0998 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5d/5d9d3d72b77047446eab01112ab40f26 b/Unity/Better Tracking/Library/Artifacts/5d/5d9d3d72b77047446eab01112ab40f26 new file mode 100644 index 0000000..1d8370c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5d/5d9d3d72b77047446eab01112ab40f26 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5d/5db600872b405040368d6cfaedc58a44 b/Unity/Better Tracking/Library/Artifacts/5d/5db600872b405040368d6cfaedc58a44 new file mode 100644 index 0000000..c133aeb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5d/5db600872b405040368d6cfaedc58a44 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5d/5df2a5875c43ff65f693e9868b837f8d b/Unity/Better Tracking/Library/Artifacts/5d/5df2a5875c43ff65f693e9868b837f8d new file mode 100644 index 0000000..91650d0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5d/5df2a5875c43ff65f693e9868b837f8d differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e0abfee5f89161716288c2008cc5fc5 b/Unity/Better Tracking/Library/Artifacts/5e/5e0abfee5f89161716288c2008cc5fc5 new file mode 100644 index 0000000..0507071 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e0abfee5f89161716288c2008cc5fc5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e2d938bd3bdebd869a339bb21cd37d3 b/Unity/Better Tracking/Library/Artifacts/5e/5e2d938bd3bdebd869a339bb21cd37d3 new file mode 100644 index 0000000..200f926 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e2d938bd3bdebd869a339bb21cd37d3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e49f18ea5a2583b33b1481567f71691 b/Unity/Better Tracking/Library/Artifacts/5e/5e49f18ea5a2583b33b1481567f71691 new file mode 100644 index 0000000..91ad6e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e49f18ea5a2583b33b1481567f71691 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e55dc306ece6c1b7c905d275e1e61e4 b/Unity/Better Tracking/Library/Artifacts/5e/5e55dc306ece6c1b7c905d275e1e61e4 new file mode 100644 index 0000000..92839ab Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e55dc306ece6c1b7c905d275e1e61e4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e7d9b6f96d1bdc870f449016b93c84b b/Unity/Better Tracking/Library/Artifacts/5e/5e7d9b6f96d1bdc870f449016b93c84b new file mode 100644 index 0000000..23ee927 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e7d9b6f96d1bdc870f449016b93c84b differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e82b2520645367f897b6b5d8090629d b/Unity/Better Tracking/Library/Artifacts/5e/5e82b2520645367f897b6b5d8090629d new file mode 100644 index 0000000..e93bf8e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e82b2520645367f897b6b5d8090629d differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e9a9173b4e6fddc04b663568d90ebf0 b/Unity/Better Tracking/Library/Artifacts/5e/5e9a9173b4e6fddc04b663568d90ebf0 new file mode 100644 index 0000000..3a1d957 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e9a9173b4e6fddc04b663568d90ebf0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5e9bc040bf698bced4e4597dabbbbdfa b/Unity/Better Tracking/Library/Artifacts/5e/5e9bc040bf698bced4e4597dabbbbdfa new file mode 100644 index 0000000..97cdabe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5e9bc040bf698bced4e4597dabbbbdfa differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5ede93ff2778548670ef39e70d86a422 b/Unity/Better Tracking/Library/Artifacts/5e/5ede93ff2778548670ef39e70d86a422 new file mode 100644 index 0000000..26aa437 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5ede93ff2778548670ef39e70d86a422 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5e/5eea11beebb2cb035f10a399e321b9c2 b/Unity/Better Tracking/Library/Artifacts/5e/5eea11beebb2cb035f10a399e321b9c2 new file mode 100644 index 0000000..26d373e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5e/5eea11beebb2cb035f10a399e321b9c2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5f/5f176689c840e2d16f07f795b0bffe74 b/Unity/Better Tracking/Library/Artifacts/5f/5f176689c840e2d16f07f795b0bffe74 new file mode 100644 index 0000000..880a687 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5f/5f176689c840e2d16f07f795b0bffe74 differ diff --git a/Unity/Better Tracking/Library/Artifacts/5f/5f2a4930ee5c3567d6a0e9c7e03d691b b/Unity/Better Tracking/Library/Artifacts/5f/5f2a4930ee5c3567d6a0e9c7e03d691b new file mode 100644 index 0000000..445ffc9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5f/5f2a4930ee5c3567d6a0e9c7e03d691b differ diff --git a/Unity/Better Tracking/Library/Artifacts/5f/5f69306bfb89e0a3e0a52d14a0057baa b/Unity/Better Tracking/Library/Artifacts/5f/5f69306bfb89e0a3e0a52d14a0057baa new file mode 100644 index 0000000..41cf05f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/5f/5f69306bfb89e0a3e0a52d14a0057baa differ diff --git a/Unity/Better Tracking/Library/Artifacts/60/60560b6450ce706610b5775688e207b8 b/Unity/Better Tracking/Library/Artifacts/60/60560b6450ce706610b5775688e207b8 new file mode 100644 index 0000000..c289bd8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/60/60560b6450ce706610b5775688e207b8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/60/606125402dec6f42c2149254bf21495f b/Unity/Better Tracking/Library/Artifacts/60/606125402dec6f42c2149254bf21495f new file mode 100644 index 0000000..af83909 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/60/606125402dec6f42c2149254bf21495f differ diff --git a/Unity/Better Tracking/Library/Artifacts/60/608bed53ea95c749d979673aee3a5ada b/Unity/Better Tracking/Library/Artifacts/60/608bed53ea95c749d979673aee3a5ada new file mode 100644 index 0000000..9d320f8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/60/608bed53ea95c749d979673aee3a5ada differ diff --git a/Unity/Better Tracking/Library/Artifacts/60/609b34b31e29120a1daee42a9916b03e b/Unity/Better Tracking/Library/Artifacts/60/609b34b31e29120a1daee42a9916b03e new file mode 100644 index 0000000..372ce6e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/60/609b34b31e29120a1daee42a9916b03e differ diff --git a/Unity/Better Tracking/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da b/Unity/Better Tracking/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da new file mode 100644 index 0000000..d78eb5e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/60/60a6077cb284d30827bf713a4659b0da differ diff --git a/Unity/Better Tracking/Library/Artifacts/60/60b699949ca23ac4b8183063ed532197 b/Unity/Better Tracking/Library/Artifacts/60/60b699949ca23ac4b8183063ed532197 new file mode 100644 index 0000000..eaaea30 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/60/60b699949ca23ac4b8183063ed532197 differ diff --git a/Unity/Better Tracking/Library/Artifacts/61/61119b74d31b4eb0258be99458cd1221 b/Unity/Better Tracking/Library/Artifacts/61/61119b74d31b4eb0258be99458cd1221 new file mode 100644 index 0000000..c2397ee Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/61/61119b74d31b4eb0258be99458cd1221 differ diff --git a/Unity/Better Tracking/Library/Artifacts/61/6123b52e91d0af66c5324d0d71092995 b/Unity/Better Tracking/Library/Artifacts/61/6123b52e91d0af66c5324d0d71092995 new file mode 100644 index 0000000..590d724 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/61/6123b52e91d0af66c5324d0d71092995 differ diff --git a/Unity/Better Tracking/Library/Artifacts/61/619a2ae9cc4edb0d679242b02ed61026 b/Unity/Better Tracking/Library/Artifacts/61/619a2ae9cc4edb0d679242b02ed61026 new file mode 100644 index 0000000..632e2c7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/61/619a2ae9cc4edb0d679242b02ed61026 differ diff --git a/Unity/Better Tracking/Library/Artifacts/61/619cc9ced2bc4ff5d42e1a12f2d281b8 b/Unity/Better Tracking/Library/Artifacts/61/619cc9ced2bc4ff5d42e1a12f2d281b8 new file mode 100644 index 0000000..e18d793 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/61/619cc9ced2bc4ff5d42e1a12f2d281b8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/61/61c5bc475cd31669de135e8cbdefd80a b/Unity/Better Tracking/Library/Artifacts/61/61c5bc475cd31669de135e8cbdefd80a new file mode 100644 index 0000000..c9822b0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/61/61c5bc475cd31669de135e8cbdefd80a differ diff --git a/Unity/Better Tracking/Library/Artifacts/61/61f8f1417d211b645269d8de3463490d b/Unity/Better Tracking/Library/Artifacts/61/61f8f1417d211b645269d8de3463490d new file mode 100644 index 0000000..febe45b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/61/61f8f1417d211b645269d8de3463490d differ diff --git a/Unity/Better Tracking/Library/Artifacts/62/628d2aa5a9a2dce7bf72abd76e1b5d3c b/Unity/Better Tracking/Library/Artifacts/62/628d2aa5a9a2dce7bf72abd76e1b5d3c new file mode 100644 index 0000000..0ed7c70 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/62/628d2aa5a9a2dce7bf72abd76e1b5d3c differ diff --git a/Unity/Better Tracking/Library/Artifacts/62/6298232b163ba486937decc5e834ef26 b/Unity/Better Tracking/Library/Artifacts/62/6298232b163ba486937decc5e834ef26 new file mode 100644 index 0000000..aed8e2f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/62/6298232b163ba486937decc5e834ef26 differ diff --git a/Unity/Better Tracking/Library/Artifacts/62/629c880896f98b54825b8570145a4363 b/Unity/Better Tracking/Library/Artifacts/62/629c880896f98b54825b8570145a4363 new file mode 100644 index 0000000..9ea62ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/62/629c880896f98b54825b8570145a4363 differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/6354291b99911ad7ff179443ff52a117 b/Unity/Better Tracking/Library/Artifacts/63/6354291b99911ad7ff179443ff52a117 new file mode 100644 index 0000000..13da3d5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/6354291b99911ad7ff179443ff52a117 differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/635525de8aeb071ccf22438e64041968 b/Unity/Better Tracking/Library/Artifacts/63/635525de8aeb071ccf22438e64041968 new file mode 100644 index 0000000..1aa13a7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/635525de8aeb071ccf22438e64041968 differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/63627d4165eabb55311e51c931a3e800 b/Unity/Better Tracking/Library/Artifacts/63/63627d4165eabb55311e51c931a3e800 new file mode 100644 index 0000000..cf63519 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/63627d4165eabb55311e51c931a3e800 differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/636970cad8d530774b2bb040f9dbc174 b/Unity/Better Tracking/Library/Artifacts/63/636970cad8d530774b2bb040f9dbc174 new file mode 100644 index 0000000..3d01cad Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/636970cad8d530774b2bb040f9dbc174 differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/637043968fcf6c376910a2aee12a655e b/Unity/Better Tracking/Library/Artifacts/63/637043968fcf6c376910a2aee12a655e new file mode 100644 index 0000000..874a004 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/637043968fcf6c376910a2aee12a655e differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/63a7ef1a8f8c20d9ab1a6c0e21ed6f54 b/Unity/Better Tracking/Library/Artifacts/63/63a7ef1a8f8c20d9ab1a6c0e21ed6f54 new file mode 100644 index 0000000..2ea1e41 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/63a7ef1a8f8c20d9ab1a6c0e21ed6f54 differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/63d15db2dc9ef50fd9aecfe1377d2930 b/Unity/Better Tracking/Library/Artifacts/63/63d15db2dc9ef50fd9aecfe1377d2930 new file mode 100644 index 0000000..80b8f52 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/63d15db2dc9ef50fd9aecfe1377d2930 differ diff --git a/Unity/Better Tracking/Library/Artifacts/63/63d70812374839e97812894523575c70 b/Unity/Better Tracking/Library/Artifacts/63/63d70812374839e97812894523575c70 new file mode 100644 index 0000000..1ca8bb2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/63/63d70812374839e97812894523575c70 differ diff --git a/Unity/Better Tracking/Library/Artifacts/64/640ae86de61b7026a389fc692e43922a b/Unity/Better Tracking/Library/Artifacts/64/640ae86de61b7026a389fc692e43922a new file mode 100644 index 0000000..72e0b18 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/64/640ae86de61b7026a389fc692e43922a differ diff --git a/Unity/Better Tracking/Library/Artifacts/64/6420c137f32e912425e4d284541ebeb8 b/Unity/Better Tracking/Library/Artifacts/64/6420c137f32e912425e4d284541ebeb8 new file mode 100644 index 0000000..9bfe1e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/64/6420c137f32e912425e4d284541ebeb8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/64/6442d03f9ccd97dbf8c3472f8c6a45c3 b/Unity/Better Tracking/Library/Artifacts/64/6442d03f9ccd97dbf8c3472f8c6a45c3 new file mode 100644 index 0000000..4863f41 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/64/6442d03f9ccd97dbf8c3472f8c6a45c3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/64/64df5dc3b61b41066519dc57aff30a3c b/Unity/Better Tracking/Library/Artifacts/64/64df5dc3b61b41066519dc57aff30a3c new file mode 100644 index 0000000..ce46ae9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/64/64df5dc3b61b41066519dc57aff30a3c differ diff --git a/Unity/Better Tracking/Library/Artifacts/64/64ee4c3432885782743a031f5b9f6cec b/Unity/Better Tracking/Library/Artifacts/64/64ee4c3432885782743a031f5b9f6cec new file mode 100644 index 0000000..e820d95 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/64/64ee4c3432885782743a031f5b9f6cec differ diff --git a/Unity/Better Tracking/Library/Artifacts/64/64f79a23736d55900e6526c3ab060967 b/Unity/Better Tracking/Library/Artifacts/64/64f79a23736d55900e6526c3ab060967 new file mode 100644 index 0000000..d53e1cf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/64/64f79a23736d55900e6526c3ab060967 differ diff --git a/Unity/Better Tracking/Library/Artifacts/64/64ffb397b4ebb42821fbd23ef89945e9 b/Unity/Better Tracking/Library/Artifacts/64/64ffb397b4ebb42821fbd23ef89945e9 new file mode 100644 index 0000000..dfc883e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/64/64ffb397b4ebb42821fbd23ef89945e9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/65/65240a305d4c562e566f2fdab43504d5 b/Unity/Better Tracking/Library/Artifacts/65/65240a305d4c562e566f2fdab43504d5 new file mode 100644 index 0000000..83e64a9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/65/65240a305d4c562e566f2fdab43504d5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/65/654a1ac14118de053222a4c222e3176f b/Unity/Better Tracking/Library/Artifacts/65/654a1ac14118de053222a4c222e3176f new file mode 100644 index 0000000..359fc3d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/65/654a1ac14118de053222a4c222e3176f differ diff --git a/Unity/Better Tracking/Library/Artifacts/65/65531aab7309f7be19caef2be144dcd5 b/Unity/Better Tracking/Library/Artifacts/65/65531aab7309f7be19caef2be144dcd5 new file mode 100644 index 0000000..a1e7c6e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/65/65531aab7309f7be19caef2be144dcd5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/65/6568eecd88573b1dffddd4890439fa17 b/Unity/Better Tracking/Library/Artifacts/65/6568eecd88573b1dffddd4890439fa17 new file mode 100644 index 0000000..6ec3173 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/65/6568eecd88573b1dffddd4890439fa17 differ diff --git a/Unity/Better Tracking/Library/Artifacts/65/658cb0bfa93f1d1cdcd60cb656acf848 b/Unity/Better Tracking/Library/Artifacts/65/658cb0bfa93f1d1cdcd60cb656acf848 new file mode 100644 index 0000000..91b64fe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/65/658cb0bfa93f1d1cdcd60cb656acf848 differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/6612efb7091b166c6a213599a34431ee b/Unity/Better Tracking/Library/Artifacts/66/6612efb7091b166c6a213599a34431ee new file mode 100644 index 0000000..fbd4429 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/6612efb7091b166c6a213599a34431ee differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 b/Unity/Better Tracking/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 new file mode 100644 index 0000000..67b013a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/6618a33ea480ac61c334cefe955e7bd9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/662bc4caf9caa1c61077adf77ad2452e b/Unity/Better Tracking/Library/Artifacts/66/662bc4caf9caa1c61077adf77ad2452e new file mode 100644 index 0000000..812270b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/662bc4caf9caa1c61077adf77ad2452e differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/6652dca5dae6efea923ab262e998e28a b/Unity/Better Tracking/Library/Artifacts/66/6652dca5dae6efea923ab262e998e28a new file mode 100644 index 0000000..7ff8352 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/6652dca5dae6efea923ab262e998e28a differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/66779d2bb81acea65c63939c25b42e75 b/Unity/Better Tracking/Library/Artifacts/66/66779d2bb81acea65c63939c25b42e75 new file mode 100644 index 0000000..41399bc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/66779d2bb81acea65c63939c25b42e75 differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/668ee2cb7dedb51f2e81e4e5b0b3d12c b/Unity/Better Tracking/Library/Artifacts/66/668ee2cb7dedb51f2e81e4e5b0b3d12c new file mode 100644 index 0000000..3b9fe64 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/668ee2cb7dedb51f2e81e4e5b0b3d12c differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/6695d148f6c152b2a652405e3b944621 b/Unity/Better Tracking/Library/Artifacts/66/6695d148f6c152b2a652405e3b944621 new file mode 100644 index 0000000..3ee9a3e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/6695d148f6c152b2a652405e3b944621 differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/66d11d686117357018e6e2231eb65695 b/Unity/Better Tracking/Library/Artifacts/66/66d11d686117357018e6e2231eb65695 new file mode 100644 index 0000000..0449c60 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/66d11d686117357018e6e2231eb65695 differ diff --git a/Unity/Better Tracking/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 b/Unity/Better Tracking/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 new file mode 100644 index 0000000..7d1d8e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/66/66f5928ad36627139e1c423123a049b1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/671a08852f1ca406ffb1ff6282352234 b/Unity/Better Tracking/Library/Artifacts/67/671a08852f1ca406ffb1ff6282352234 new file mode 100644 index 0000000..4f1e5c0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/671a08852f1ca406ffb1ff6282352234 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/674aa15045cd9171d7e7519c142ab926 b/Unity/Better Tracking/Library/Artifacts/67/674aa15045cd9171d7e7519c142ab926 new file mode 100644 index 0000000..67cfece Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/674aa15045cd9171d7e7519c142ab926 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/6768eca4b09de36682febfffaecfc364 b/Unity/Better Tracking/Library/Artifacts/67/6768eca4b09de36682febfffaecfc364 new file mode 100644 index 0000000..1d1cee5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/6768eca4b09de36682febfffaecfc364 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/676c3a0bbdb16b82123230ccd78d8452 b/Unity/Better Tracking/Library/Artifacts/67/676c3a0bbdb16b82123230ccd78d8452 new file mode 100644 index 0000000..e238221 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/676c3a0bbdb16b82123230ccd78d8452 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/6771378dd0ff075ea8cc0c40c43a1564 b/Unity/Better Tracking/Library/Artifacts/67/6771378dd0ff075ea8cc0c40c43a1564 new file mode 100644 index 0000000..2f05738 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/6771378dd0ff075ea8cc0c40c43a1564 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/67723658348fec64a8a5c67ce8b70c60 b/Unity/Better Tracking/Library/Artifacts/67/67723658348fec64a8a5c67ce8b70c60 new file mode 100644 index 0000000..21abdea Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/67723658348fec64a8a5c67ce8b70c60 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/6783ebac0c6dca4663fbb9dcbad2f525 b/Unity/Better Tracking/Library/Artifacts/67/6783ebac0c6dca4663fbb9dcbad2f525 new file mode 100644 index 0000000..625cec8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/6783ebac0c6dca4663fbb9dcbad2f525 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/67b77876016eb6d5d4c34921712ceb30 b/Unity/Better Tracking/Library/Artifacts/67/67b77876016eb6d5d4c34921712ceb30 new file mode 100644 index 0000000..9e33ffa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/67b77876016eb6d5d4c34921712ceb30 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/67da2b0e670928c2b57da8a450193e70 b/Unity/Better Tracking/Library/Artifacts/67/67da2b0e670928c2b57da8a450193e70 new file mode 100644 index 0000000..9a4f68a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/67da2b0e670928c2b57da8a450193e70 differ diff --git a/Unity/Better Tracking/Library/Artifacts/67/67f2c243fbc1bcec3dc38de38dc63922 b/Unity/Better Tracking/Library/Artifacts/67/67f2c243fbc1bcec3dc38de38dc63922 new file mode 100644 index 0000000..2f60fa9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/67/67f2c243fbc1bcec3dc38de38dc63922 differ diff --git a/Unity/Better Tracking/Library/Artifacts/68/682a3154373673f039d8b04dd3713b6f b/Unity/Better Tracking/Library/Artifacts/68/682a3154373673f039d8b04dd3713b6f new file mode 100644 index 0000000..0b251d9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/68/682a3154373673f039d8b04dd3713b6f differ diff --git a/Unity/Better Tracking/Library/Artifacts/68/685e56d5d14ef4e857779e1e9320ad80 b/Unity/Better Tracking/Library/Artifacts/68/685e56d5d14ef4e857779e1e9320ad80 new file mode 100644 index 0000000..7deb8db Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/68/685e56d5d14ef4e857779e1e9320ad80 differ diff --git a/Unity/Better Tracking/Library/Artifacts/68/689e73a55f7181293cdcebe8b2bc386e b/Unity/Better Tracking/Library/Artifacts/68/689e73a55f7181293cdcebe8b2bc386e new file mode 100644 index 0000000..ca37e78 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/68/689e73a55f7181293cdcebe8b2bc386e differ diff --git a/Unity/Better Tracking/Library/Artifacts/68/68b679540f71a4ca21ed75c2e4d91468 b/Unity/Better Tracking/Library/Artifacts/68/68b679540f71a4ca21ed75c2e4d91468 new file mode 100644 index 0000000..81187ad Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/68/68b679540f71a4ca21ed75c2e4d91468 differ diff --git a/Unity/Better Tracking/Library/Artifacts/68/68dc31ec1d9db3568eb2a7d6c1e0f22b b/Unity/Better Tracking/Library/Artifacts/68/68dc31ec1d9db3568eb2a7d6c1e0f22b new file mode 100644 index 0000000..94a96fb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/68/68dc31ec1d9db3568eb2a7d6c1e0f22b differ diff --git a/Unity/Better Tracking/Library/Artifacts/68/68eededc5e5ca58992fc7664323ed8ae b/Unity/Better Tracking/Library/Artifacts/68/68eededc5e5ca58992fc7664323ed8ae new file mode 100644 index 0000000..1b0955a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/68/68eededc5e5ca58992fc7664323ed8ae differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/690279d0e4b3e1b577a35fc0c26ba405 b/Unity/Better Tracking/Library/Artifacts/69/690279d0e4b3e1b577a35fc0c26ba405 new file mode 100644 index 0000000..e6eaa51 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/690279d0e4b3e1b577a35fc0c26ba405 differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/6927fd5bc6f4221fdb4fb851fd92d9ca b/Unity/Better Tracking/Library/Artifacts/69/6927fd5bc6f4221fdb4fb851fd92d9ca new file mode 100644 index 0000000..87200d6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/6927fd5bc6f4221fdb4fb851fd92d9ca differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/692d29ba073b4c380cebdc167812dce1 b/Unity/Better Tracking/Library/Artifacts/69/692d29ba073b4c380cebdc167812dce1 new file mode 100644 index 0000000..85c2b35 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/692d29ba073b4c380cebdc167812dce1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/69333fd5799f56d9851fd4ed5828eb49 b/Unity/Better Tracking/Library/Artifacts/69/69333fd5799f56d9851fd4ed5828eb49 new file mode 100644 index 0000000..6af056a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/69333fd5799f56d9851fd4ed5828eb49 differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/693bcf214efbde0c1772c6b06c9d7c37 b/Unity/Better Tracking/Library/Artifacts/69/693bcf214efbde0c1772c6b06c9d7c37 new file mode 100644 index 0000000..cecf9d9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/693bcf214efbde0c1772c6b06c9d7c37 differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/69b591473dda2dd1a15909fb46171a43 b/Unity/Better Tracking/Library/Artifacts/69/69b591473dda2dd1a15909fb46171a43 new file mode 100644 index 0000000..c0adea1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/69b591473dda2dd1a15909fb46171a43 differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/69b5d30ebe09e555f76b8ad51962c589 b/Unity/Better Tracking/Library/Artifacts/69/69b5d30ebe09e555f76b8ad51962c589 new file mode 100644 index 0000000..59eebad Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/69b5d30ebe09e555f76b8ad51962c589 differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/69c22a199ea381362dcd3c23146c4613 b/Unity/Better Tracking/Library/Artifacts/69/69c22a199ea381362dcd3c23146c4613 new file mode 100644 index 0000000..b59e2f7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/69c22a199ea381362dcd3c23146c4613 differ diff --git a/Unity/Better Tracking/Library/Artifacts/69/69dab22444b2dde3340084d076b6e248 b/Unity/Better Tracking/Library/Artifacts/69/69dab22444b2dde3340084d076b6e248 new file mode 100644 index 0000000..00f6b33 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/69/69dab22444b2dde3340084d076b6e248 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6a/6a2ddefd11ac8ffa6f6d26f610865b88 b/Unity/Better Tracking/Library/Artifacts/6a/6a2ddefd11ac8ffa6f6d26f610865b88 new file mode 100644 index 0000000..bb5aec7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6a/6a2ddefd11ac8ffa6f6d26f610865b88 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6a/6a666f912ac09798b84d44c8f99311db b/Unity/Better Tracking/Library/Artifacts/6a/6a666f912ac09798b84d44c8f99311db new file mode 100644 index 0000000..2a61f5a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6a/6a666f912ac09798b84d44c8f99311db differ diff --git a/Unity/Better Tracking/Library/Artifacts/6a/6a8077d3c8ba601f495564104a50635f b/Unity/Better Tracking/Library/Artifacts/6a/6a8077d3c8ba601f495564104a50635f new file mode 100644 index 0000000..2113fd1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6a/6a8077d3c8ba601f495564104a50635f differ diff --git a/Unity/Better Tracking/Library/Artifacts/6a/6aa6567afef6a111e5f9b3ecbcd7d9af b/Unity/Better Tracking/Library/Artifacts/6a/6aa6567afef6a111e5f9b3ecbcd7d9af new file mode 100644 index 0000000..df645b9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6a/6aa6567afef6a111e5f9b3ecbcd7d9af differ diff --git a/Unity/Better Tracking/Library/Artifacts/6a/6acc43cac0b6957f234029d2474e1598 b/Unity/Better Tracking/Library/Artifacts/6a/6acc43cac0b6957f234029d2474e1598 new file mode 100644 index 0000000..de9a699 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6a/6acc43cac0b6957f234029d2474e1598 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6a/6ae85afb8c51ca3a23f4590e8ec1a1b2 b/Unity/Better Tracking/Library/Artifacts/6a/6ae85afb8c51ca3a23f4590e8ec1a1b2 new file mode 100644 index 0000000..5c7b02b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6a/6ae85afb8c51ca3a23f4590e8ec1a1b2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6b/6b3c67c196e8f40dd7f90c5a20812e0b b/Unity/Better Tracking/Library/Artifacts/6b/6b3c67c196e8f40dd7f90c5a20812e0b new file mode 100644 index 0000000..b5ef94f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6b/6b3c67c196e8f40dd7f90c5a20812e0b differ diff --git a/Unity/Better Tracking/Library/Artifacts/6b/6b3e4d3b0091e63a1d54a754d114a056 b/Unity/Better Tracking/Library/Artifacts/6b/6b3e4d3b0091e63a1d54a754d114a056 new file mode 100644 index 0000000..9a03628 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6b/6b3e4d3b0091e63a1d54a754d114a056 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6b/6b74e50b5ee011ccf48fb42f2485e7bb b/Unity/Better Tracking/Library/Artifacts/6b/6b74e50b5ee011ccf48fb42f2485e7bb new file mode 100644 index 0000000..5f495b4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6b/6b74e50b5ee011ccf48fb42f2485e7bb differ diff --git a/Unity/Better Tracking/Library/Artifacts/6b/6bd5f1dfef63af4570e5282bba1e856b b/Unity/Better Tracking/Library/Artifacts/6b/6bd5f1dfef63af4570e5282bba1e856b new file mode 100644 index 0000000..de13a00 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6b/6bd5f1dfef63af4570e5282bba1e856b differ diff --git a/Unity/Better Tracking/Library/Artifacts/6b/6be66cef2082a3c851df35a04241cdc8 b/Unity/Better Tracking/Library/Artifacts/6b/6be66cef2082a3c851df35a04241cdc8 new file mode 100644 index 0000000..12c528b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6b/6be66cef2082a3c851df35a04241cdc8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6b/6bfa459b3e5359d4118f10abda123ac3 b/Unity/Better Tracking/Library/Artifacts/6b/6bfa459b3e5359d4118f10abda123ac3 new file mode 100644 index 0000000..207ffcd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6b/6bfa459b3e5359d4118f10abda123ac3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6c/6c04dde9139f0bde78596bbafe1db8d2 b/Unity/Better Tracking/Library/Artifacts/6c/6c04dde9139f0bde78596bbafe1db8d2 new file mode 100644 index 0000000..f4f3a76 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6c/6c04dde9139f0bde78596bbafe1db8d2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6c/6c55561d39849a6d8a955a1517f2c151 b/Unity/Better Tracking/Library/Artifacts/6c/6c55561d39849a6d8a955a1517f2c151 new file mode 100644 index 0000000..9694edc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6c/6c55561d39849a6d8a955a1517f2c151 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 b/Unity/Better Tracking/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 new file mode 100644 index 0000000..b810d61 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6c/6c68999f70f27ff7c436d7d5ebec0443 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 b/Unity/Better Tracking/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 new file mode 100644 index 0000000..8952007 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6c/6c924df507920c74f1f6b75280298ea9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6c/6cc05cde506e0a1a654fac906ad2af29 b/Unity/Better Tracking/Library/Artifacts/6c/6cc05cde506e0a1a654fac906ad2af29 new file mode 100644 index 0000000..9e95384 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6c/6cc05cde506e0a1a654fac906ad2af29 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6c/6cc2a6ca054ef67fb1eea672476011cd b/Unity/Better Tracking/Library/Artifacts/6c/6cc2a6ca054ef67fb1eea672476011cd new file mode 100644 index 0000000..d0b40e8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6c/6cc2a6ca054ef67fb1eea672476011cd differ diff --git a/Unity/Better Tracking/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e b/Unity/Better Tracking/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e new file mode 100644 index 0000000..233a554 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6c/6cf9b68aa8ad3324ff114591df23787e differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6d33c577ed0b8db0994bd9d74050f799 b/Unity/Better Tracking/Library/Artifacts/6d/6d33c577ed0b8db0994bd9d74050f799 new file mode 100644 index 0000000..9bd5945 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6d33c577ed0b8db0994bd9d74050f799 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6d34ba8f2a6f4a238d69f5eb46697475 b/Unity/Better Tracking/Library/Artifacts/6d/6d34ba8f2a6f4a238d69f5eb46697475 new file mode 100644 index 0000000..5e6c2e4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6d34ba8f2a6f4a238d69f5eb46697475 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6d5df42c69f56e3a214acbc6ea3582b0 b/Unity/Better Tracking/Library/Artifacts/6d/6d5df42c69f56e3a214acbc6ea3582b0 new file mode 100644 index 0000000..b653229 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6d5df42c69f56e3a214acbc6ea3582b0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6d84dc722413fb9c3b48a8ea854bfce7 b/Unity/Better Tracking/Library/Artifacts/6d/6d84dc722413fb9c3b48a8ea854bfce7 new file mode 100644 index 0000000..6ad4036 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6d84dc722413fb9c3b48a8ea854bfce7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6daf0e9147ec45f4daa986a02a9fa881 b/Unity/Better Tracking/Library/Artifacts/6d/6daf0e9147ec45f4daa986a02a9fa881 new file mode 100644 index 0000000..2657689 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6daf0e9147ec45f4daa986a02a9fa881 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6db5bd1eb4531ed9a643af7bedd71b5b b/Unity/Better Tracking/Library/Artifacts/6d/6db5bd1eb4531ed9a643af7bedd71b5b new file mode 100644 index 0000000..7b143e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6db5bd1eb4531ed9a643af7bedd71b5b differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6db8718bdb5aee615df7e7c54cfe963a b/Unity/Better Tracking/Library/Artifacts/6d/6db8718bdb5aee615df7e7c54cfe963a new file mode 100644 index 0000000..8c86f11 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6db8718bdb5aee615df7e7c54cfe963a differ diff --git a/Unity/Better Tracking/Library/Artifacts/6d/6dc577e4ea823247c6665e838e7cb24f b/Unity/Better Tracking/Library/Artifacts/6d/6dc577e4ea823247c6665e838e7cb24f new file mode 100644 index 0000000..ff823e1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6d/6dc577e4ea823247c6665e838e7cb24f differ diff --git a/Unity/Better Tracking/Library/Artifacts/6e/6e6bffcb6c0319e2cfd2e9ea83512ed1 b/Unity/Better Tracking/Library/Artifacts/6e/6e6bffcb6c0319e2cfd2e9ea83512ed1 new file mode 100644 index 0000000..131b05b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6e/6e6bffcb6c0319e2cfd2e9ea83512ed1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6e/6e74efd09ce9f8a64019f362e1160526 b/Unity/Better Tracking/Library/Artifacts/6e/6e74efd09ce9f8a64019f362e1160526 new file mode 100644 index 0000000..dc78653 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6e/6e74efd09ce9f8a64019f362e1160526 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6e/6e8073072edfcfbd56cf460ee66c959b b/Unity/Better Tracking/Library/Artifacts/6e/6e8073072edfcfbd56cf460ee66c959b new file mode 100644 index 0000000..3e1aa1e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6e/6e8073072edfcfbd56cf460ee66c959b differ diff --git a/Unity/Better Tracking/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c b/Unity/Better Tracking/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c new file mode 100644 index 0000000..41fe660 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6e/6ece5606c0d91afb9cc6971d7156353c differ diff --git a/Unity/Better Tracking/Library/Artifacts/6e/6ee203a82086856e023968a6ec1d7bdc b/Unity/Better Tracking/Library/Artifacts/6e/6ee203a82086856e023968a6ec1d7bdc new file mode 100644 index 0000000..ad579a0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6e/6ee203a82086856e023968a6ec1d7bdc differ diff --git a/Unity/Better Tracking/Library/Artifacts/6f/6f5d32bde424e9b11e675cc783812242 b/Unity/Better Tracking/Library/Artifacts/6f/6f5d32bde424e9b11e675cc783812242 new file mode 100644 index 0000000..49f6baf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6f/6f5d32bde424e9b11e675cc783812242 differ diff --git a/Unity/Better Tracking/Library/Artifacts/6f/6f76868cdd38aa1b32189e326a6eaedf b/Unity/Better Tracking/Library/Artifacts/6f/6f76868cdd38aa1b32189e326a6eaedf new file mode 100644 index 0000000..889f53c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6f/6f76868cdd38aa1b32189e326a6eaedf differ diff --git a/Unity/Better Tracking/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 b/Unity/Better Tracking/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 new file mode 100644 index 0000000..b20da55 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/6f/6faaf401de9d925a06deb01031203d44 differ diff --git a/Unity/Better Tracking/Library/Artifacts/70/702047ef67b2d8bfb355891d5ee1882e b/Unity/Better Tracking/Library/Artifacts/70/702047ef67b2d8bfb355891d5ee1882e new file mode 100644 index 0000000..2957df1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/70/702047ef67b2d8bfb355891d5ee1882e differ diff --git a/Unity/Better Tracking/Library/Artifacts/70/703b722bc8ca7c9eff88a90d5326e208 b/Unity/Better Tracking/Library/Artifacts/70/703b722bc8ca7c9eff88a90d5326e208 new file mode 100644 index 0000000..03854c5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/70/703b722bc8ca7c9eff88a90d5326e208 differ diff --git a/Unity/Better Tracking/Library/Artifacts/70/70514af7bb14b5d1717f1112bdc4534c b/Unity/Better Tracking/Library/Artifacts/70/70514af7bb14b5d1717f1112bdc4534c new file mode 100644 index 0000000..d468b96 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/70/70514af7bb14b5d1717f1112bdc4534c differ diff --git a/Unity/Better Tracking/Library/Artifacts/70/70ca04000e9a315a5515ed57b7a0d28e b/Unity/Better Tracking/Library/Artifacts/70/70ca04000e9a315a5515ed57b7a0d28e new file mode 100644 index 0000000..d76e269 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/70/70ca04000e9a315a5515ed57b7a0d28e differ diff --git a/Unity/Better Tracking/Library/Artifacts/70/70e092c79f323aa6b9263c9d51de0653 b/Unity/Better Tracking/Library/Artifacts/70/70e092c79f323aa6b9263c9d51de0653 new file mode 100644 index 0000000..c11e919 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/70/70e092c79f323aa6b9263c9d51de0653 differ diff --git a/Unity/Better Tracking/Library/Artifacts/70/70e48661b243a0fc6cf33b757be76d14 b/Unity/Better Tracking/Library/Artifacts/70/70e48661b243a0fc6cf33b757be76d14 new file mode 100644 index 0000000..afa575a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/70/70e48661b243a0fc6cf33b757be76d14 differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/7143243f72fd872e2e9f1bb8f9fee218 b/Unity/Better Tracking/Library/Artifacts/71/7143243f72fd872e2e9f1bb8f9fee218 new file mode 100644 index 0000000..94a83a7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/7143243f72fd872e2e9f1bb8f9fee218 differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/7171b2d90f768f17363d57d13864195c b/Unity/Better Tracking/Library/Artifacts/71/7171b2d90f768f17363d57d13864195c new file mode 100644 index 0000000..0da5325 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/7171b2d90f768f17363d57d13864195c differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/7184fe33feeb74bccf10289f95a24c0b b/Unity/Better Tracking/Library/Artifacts/71/7184fe33feeb74bccf10289f95a24c0b new file mode 100644 index 0000000..5c89e7f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/7184fe33feeb74bccf10289f95a24c0b differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/7193b6f3dcdd5f5db690504bea173d60 b/Unity/Better Tracking/Library/Artifacts/71/7193b6f3dcdd5f5db690504bea173d60 new file mode 100644 index 0000000..b3b8319 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/7193b6f3dcdd5f5db690504bea173d60 differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/71a18bbe271fee201342ef85bfdcf337 b/Unity/Better Tracking/Library/Artifacts/71/71a18bbe271fee201342ef85bfdcf337 new file mode 100644 index 0000000..1aa4582 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/71a18bbe271fee201342ef85bfdcf337 differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 b/Unity/Better Tracking/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 new file mode 100644 index 0000000..3383775 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/71b1cf657d94ff8b63b342602256db33 differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/71c003f686446fe9d053ac3ff5f5397f b/Unity/Better Tracking/Library/Artifacts/71/71c003f686446fe9d053ac3ff5f5397f new file mode 100644 index 0000000..a2562ce Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/71c003f686446fe9d053ac3ff5f5397f differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/71ca30388cc7464cf7b3b2cf544f74f5 b/Unity/Better Tracking/Library/Artifacts/71/71ca30388cc7464cf7b3b2cf544f74f5 new file mode 100644 index 0000000..547e0ab Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/71ca30388cc7464cf7b3b2cf544f74f5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/71/71ed7e9ff8907a7e94ff9ad378500e21 b/Unity/Better Tracking/Library/Artifacts/71/71ed7e9ff8907a7e94ff9ad378500e21 new file mode 100644 index 0000000..e2ab133 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/71/71ed7e9ff8907a7e94ff9ad378500e21 differ diff --git a/Unity/Better Tracking/Library/Artifacts/72/721d1ac3e339db60bed0f256a5a1eaa3 b/Unity/Better Tracking/Library/Artifacts/72/721d1ac3e339db60bed0f256a5a1eaa3 new file mode 100644 index 0000000..8540f73 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/72/721d1ac3e339db60bed0f256a5a1eaa3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/72/7281810e862549188378b07a4682400d b/Unity/Better Tracking/Library/Artifacts/72/7281810e862549188378b07a4682400d new file mode 100644 index 0000000..3561b6a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/72/7281810e862549188378b07a4682400d differ diff --git a/Unity/Better Tracking/Library/Artifacts/72/72c3edecea0e9195fa67d014c56d8934 b/Unity/Better Tracking/Library/Artifacts/72/72c3edecea0e9195fa67d014c56d8934 new file mode 100644 index 0000000..3e22b75 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/72/72c3edecea0e9195fa67d014c56d8934 differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/7305256206811426e47b006bfff59fa7 b/Unity/Better Tracking/Library/Artifacts/73/7305256206811426e47b006bfff59fa7 new file mode 100644 index 0000000..22f402c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/7305256206811426e47b006bfff59fa7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/73179483da9ad9edc6d5fefc928798a8 b/Unity/Better Tracking/Library/Artifacts/73/73179483da9ad9edc6d5fefc928798a8 new file mode 100644 index 0000000..23b676d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/73179483da9ad9edc6d5fefc928798a8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/732b891100ab37ce64b2032da04600d3 b/Unity/Better Tracking/Library/Artifacts/73/732b891100ab37ce64b2032da04600d3 new file mode 100644 index 0000000..12f476e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/732b891100ab37ce64b2032da04600d3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/73304e21351977587a22197532e78e1a b/Unity/Better Tracking/Library/Artifacts/73/73304e21351977587a22197532e78e1a new file mode 100644 index 0000000..d18e3ce Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/73304e21351977587a22197532e78e1a differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/734aed3fd15f812930e9f91512321161 b/Unity/Better Tracking/Library/Artifacts/73/734aed3fd15f812930e9f91512321161 new file mode 100644 index 0000000..e9ab493 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/734aed3fd15f812930e9f91512321161 differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/734c03f510e4b803b453c4a48a7b74ea b/Unity/Better Tracking/Library/Artifacts/73/734c03f510e4b803b453c4a48a7b74ea new file mode 100644 index 0000000..67077c1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/734c03f510e4b803b453c4a48a7b74ea differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/73b3d01e94c632f6150e711d9532cb32 b/Unity/Better Tracking/Library/Artifacts/73/73b3d01e94c632f6150e711d9532cb32 new file mode 100644 index 0000000..e384652 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/73b3d01e94c632f6150e711d9532cb32 differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/73c3ee8b69b6ef37af65f53c1f2533cf b/Unity/Better Tracking/Library/Artifacts/73/73c3ee8b69b6ef37af65f53c1f2533cf new file mode 100644 index 0000000..7954dad Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/73c3ee8b69b6ef37af65f53c1f2533cf differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/73c6c895824cfb72337d4e7b3d886416 b/Unity/Better Tracking/Library/Artifacts/73/73c6c895824cfb72337d4e7b3d886416 new file mode 100644 index 0000000..e425555 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/73c6c895824cfb72337d4e7b3d886416 differ diff --git a/Unity/Better Tracking/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 b/Unity/Better Tracking/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 new file mode 100644 index 0000000..2c25d27 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/73/73d6a34541bf0be7d477ec68db129ef2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/7405e2311f3c6c7f54c455b119f4b44b b/Unity/Better Tracking/Library/Artifacts/74/7405e2311f3c6c7f54c455b119f4b44b new file mode 100644 index 0000000..9553df3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/7405e2311f3c6c7f54c455b119f4b44b differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/74131b455e0737ba162ee7e481058c67 b/Unity/Better Tracking/Library/Artifacts/74/74131b455e0737ba162ee7e481058c67 new file mode 100644 index 0000000..da8ae5f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/74131b455e0737ba162ee7e481058c67 differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/7463507ec60ff18ebe34789075cb2c27 b/Unity/Better Tracking/Library/Artifacts/74/7463507ec60ff18ebe34789075cb2c27 new file mode 100644 index 0000000..7e825ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/7463507ec60ff18ebe34789075cb2c27 differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 b/Unity/Better Tracking/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 new file mode 100644 index 0000000..d583604 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/74b84aeb0abb92f8128e2858db348eb5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/74c127916cdd33bac1e71ee74d5c8a94 b/Unity/Better Tracking/Library/Artifacts/74/74c127916cdd33bac1e71ee74d5c8a94 new file mode 100644 index 0000000..802ea42 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/74c127916cdd33bac1e71ee74d5c8a94 differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/74d672a1ce87aa8f91169eb11ffeb66a b/Unity/Better Tracking/Library/Artifacts/74/74d672a1ce87aa8f91169eb11ffeb66a new file mode 100644 index 0000000..188151e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/74d672a1ce87aa8f91169eb11ffeb66a differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/74de0390b86828ca6b4b2982fac10f13 b/Unity/Better Tracking/Library/Artifacts/74/74de0390b86828ca6b4b2982fac10f13 new file mode 100644 index 0000000..f56becc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/74de0390b86828ca6b4b2982fac10f13 differ diff --git a/Unity/Better Tracking/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 b/Unity/Better Tracking/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 new file mode 100644 index 0000000..a171986 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/74/74e8ae365aed8b147044d072c55b2099 differ diff --git a/Unity/Better Tracking/Library/Artifacts/75/7555f4ff7ee5d3598604832633b71495 b/Unity/Better Tracking/Library/Artifacts/75/7555f4ff7ee5d3598604832633b71495 new file mode 100644 index 0000000..e0d7054 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/75/7555f4ff7ee5d3598604832633b71495 differ diff --git a/Unity/Better Tracking/Library/Artifacts/75/756749fd90a8001f9a9e2c7a1c6dfa72 b/Unity/Better Tracking/Library/Artifacts/75/756749fd90a8001f9a9e2c7a1c6dfa72 new file mode 100644 index 0000000..feed333 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/75/756749fd90a8001f9a9e2c7a1c6dfa72 differ diff --git a/Unity/Better Tracking/Library/Artifacts/75/75878bade02e7171d14a8c5b9a54e240 b/Unity/Better Tracking/Library/Artifacts/75/75878bade02e7171d14a8c5b9a54e240 new file mode 100644 index 0000000..b9e8d2a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/75/75878bade02e7171d14a8c5b9a54e240 differ diff --git a/Unity/Better Tracking/Library/Artifacts/75/759f75b31a8fcae686e96a1270d2a760 b/Unity/Better Tracking/Library/Artifacts/75/759f75b31a8fcae686e96a1270d2a760 new file mode 100644 index 0000000..1bc63f1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/75/759f75b31a8fcae686e96a1270d2a760 differ diff --git a/Unity/Better Tracking/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 b/Unity/Better Tracking/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 new file mode 100644 index 0000000..24b3158 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/75/759fa782a1a19355fc7154f167b8e057 differ diff --git a/Unity/Better Tracking/Library/Artifacts/75/75bfd0b14a9d778b3743b8cc0563991f b/Unity/Better Tracking/Library/Artifacts/75/75bfd0b14a9d778b3743b8cc0563991f new file mode 100644 index 0000000..5176cd7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/75/75bfd0b14a9d778b3743b8cc0563991f differ diff --git a/Unity/Better Tracking/Library/Artifacts/75/75e4a2d73c968a62e66f8164a926f066 b/Unity/Better Tracking/Library/Artifacts/75/75e4a2d73c968a62e66f8164a926f066 new file mode 100644 index 0000000..f14933d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/75/75e4a2d73c968a62e66f8164a926f066 differ diff --git a/Unity/Better Tracking/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 b/Unity/Better Tracking/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 new file mode 100644 index 0000000..3d31682 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/76/76430bbe2e87dea9fe177a06461efb57 differ diff --git a/Unity/Better Tracking/Library/Artifacts/76/76867c67089c678b54ab1569d910d519 b/Unity/Better Tracking/Library/Artifacts/76/76867c67089c678b54ab1569d910d519 new file mode 100644 index 0000000..8e5e686 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/76/76867c67089c678b54ab1569d910d519 differ diff --git a/Unity/Better Tracking/Library/Artifacts/76/76ab963bc623aca2ea71170bba0c2493 b/Unity/Better Tracking/Library/Artifacts/76/76ab963bc623aca2ea71170bba0c2493 new file mode 100644 index 0000000..4e583fe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/76/76ab963bc623aca2ea71170bba0c2493 differ diff --git a/Unity/Better Tracking/Library/Artifacts/76/76bfef3a21ac63615241d0610705a215 b/Unity/Better Tracking/Library/Artifacts/76/76bfef3a21ac63615241d0610705a215 new file mode 100644 index 0000000..bbf4117 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/76/76bfef3a21ac63615241d0610705a215 differ diff --git a/Unity/Better Tracking/Library/Artifacts/76/76cc873912e091cb2672faf0fd489b11 b/Unity/Better Tracking/Library/Artifacts/76/76cc873912e091cb2672faf0fd489b11 new file mode 100644 index 0000000..5a0e0e4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/76/76cc873912e091cb2672faf0fd489b11 differ diff --git a/Unity/Better Tracking/Library/Artifacts/76/76ccc43f74d83e52261937ef1c4098cc b/Unity/Better Tracking/Library/Artifacts/76/76ccc43f74d83e52261937ef1c4098cc new file mode 100644 index 0000000..39a3495 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/76/76ccc43f74d83e52261937ef1c4098cc differ diff --git a/Unity/Better Tracking/Library/Artifacts/76/76d85f083e7929e18de1434a2429dcc7 b/Unity/Better Tracking/Library/Artifacts/76/76d85f083e7929e18de1434a2429dcc7 new file mode 100644 index 0000000..f08fc4e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/76/76d85f083e7929e18de1434a2429dcc7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/77/771670f9aecbda4eca15478bdd78b4e7 b/Unity/Better Tracking/Library/Artifacts/77/771670f9aecbda4eca15478bdd78b4e7 new file mode 100644 index 0000000..f348660 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/77/771670f9aecbda4eca15478bdd78b4e7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/77/774f6cfac1f710536ba937d4d6b1366e b/Unity/Better Tracking/Library/Artifacts/77/774f6cfac1f710536ba937d4d6b1366e new file mode 100644 index 0000000..4b37354 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/77/774f6cfac1f710536ba937d4d6b1366e differ diff --git a/Unity/Better Tracking/Library/Artifacts/77/7797eb449657eccd9682761749dc98b7 b/Unity/Better Tracking/Library/Artifacts/77/7797eb449657eccd9682761749dc98b7 new file mode 100644 index 0000000..804f0c8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/77/7797eb449657eccd9682761749dc98b7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/77/77c43309f6c34d13019197775b822d3b b/Unity/Better Tracking/Library/Artifacts/77/77c43309f6c34d13019197775b822d3b new file mode 100644 index 0000000..cd86252 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/77/77c43309f6c34d13019197775b822d3b differ diff --git a/Unity/Better Tracking/Library/Artifacts/77/77e2ddc941e459b9650e8403bd980b93 b/Unity/Better Tracking/Library/Artifacts/77/77e2ddc941e459b9650e8403bd980b93 new file mode 100644 index 0000000..39046cf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/77/77e2ddc941e459b9650e8403bd980b93 differ diff --git a/Unity/Better Tracking/Library/Artifacts/77/77ed88a1b00ef3567bad68937c218d2b b/Unity/Better Tracking/Library/Artifacts/77/77ed88a1b00ef3567bad68937c218d2b new file mode 100644 index 0000000..3bd41b3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/77/77ed88a1b00ef3567bad68937c218d2b differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/7805046c85617e1f1bacbb3887f83d6d b/Unity/Better Tracking/Library/Artifacts/78/7805046c85617e1f1bacbb3887f83d6d new file mode 100644 index 0000000..e819a95 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/7805046c85617e1f1bacbb3887f83d6d differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 b/Unity/Better Tracking/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 new file mode 100644 index 0000000..9c532f8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/7808c154cf09768b6b1b29474f47efc7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/7853bf6bb6483a103658380fc3c9bbe8 b/Unity/Better Tracking/Library/Artifacts/78/7853bf6bb6483a103658380fc3c9bbe8 new file mode 100644 index 0000000..080ffef Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/7853bf6bb6483a103658380fc3c9bbe8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/7873f9976707be88f39f4a3abf1c636a b/Unity/Better Tracking/Library/Artifacts/78/7873f9976707be88f39f4a3abf1c636a new file mode 100644 index 0000000..a432d03 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/7873f9976707be88f39f4a3abf1c636a differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/788fd406f03a595132757d57132189a5 b/Unity/Better Tracking/Library/Artifacts/78/788fd406f03a595132757d57132189a5 new file mode 100644 index 0000000..2d7e1a8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/788fd406f03a595132757d57132189a5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/789b27d0b1efa092b88b03d767ee54d0 b/Unity/Better Tracking/Library/Artifacts/78/789b27d0b1efa092b88b03d767ee54d0 new file mode 100644 index 0000000..da61b22 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/789b27d0b1efa092b88b03d767ee54d0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/78a8ab49d062ec2d8172623897c6dbe4 b/Unity/Better Tracking/Library/Artifacts/78/78a8ab49d062ec2d8172623897c6dbe4 new file mode 100644 index 0000000..fafbd31 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/78a8ab49d062ec2d8172623897c6dbe4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/78/78b99d9d4d136c68760170e060fd2f59 b/Unity/Better Tracking/Library/Artifacts/78/78b99d9d4d136c68760170e060fd2f59 new file mode 100644 index 0000000..f9aa91c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/78/78b99d9d4d136c68760170e060fd2f59 differ diff --git a/Unity/Better Tracking/Library/Artifacts/79/7942a6bcab520d1df04dc89890a5c092 b/Unity/Better Tracking/Library/Artifacts/79/7942a6bcab520d1df04dc89890a5c092 new file mode 100644 index 0000000..14e0f2d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/79/7942a6bcab520d1df04dc89890a5c092 differ diff --git a/Unity/Better Tracking/Library/Artifacts/79/7981c573c20fe116085d1fba92f69c56 b/Unity/Better Tracking/Library/Artifacts/79/7981c573c20fe116085d1fba92f69c56 new file mode 100644 index 0000000..59f387a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/79/7981c573c20fe116085d1fba92f69c56 differ diff --git a/Unity/Better Tracking/Library/Artifacts/79/798693a921f2453462d19c8ae4ba6cd5 b/Unity/Better Tracking/Library/Artifacts/79/798693a921f2453462d19c8ae4ba6cd5 new file mode 100644 index 0000000..4afdeb3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/79/798693a921f2453462d19c8ae4ba6cd5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/79/79a1cebf1b39e0096f402aa257544cf6 b/Unity/Better Tracking/Library/Artifacts/79/79a1cebf1b39e0096f402aa257544cf6 new file mode 100644 index 0000000..a3b1b41 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/79/79a1cebf1b39e0096f402aa257544cf6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/79/79dc1ef4e8ebe8a842109305c2eb315e b/Unity/Better Tracking/Library/Artifacts/79/79dc1ef4e8ebe8a842109305c2eb315e new file mode 100644 index 0000000..48adc75 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/79/79dc1ef4e8ebe8a842109305c2eb315e differ diff --git a/Unity/Better Tracking/Library/Artifacts/79/79e8d21e19b8674c488b2f14908c0a12 b/Unity/Better Tracking/Library/Artifacts/79/79e8d21e19b8674c488b2f14908c0a12 new file mode 100644 index 0000000..d448b1c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/79/79e8d21e19b8674c488b2f14908c0a12 differ diff --git a/Unity/Better Tracking/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 b/Unity/Better Tracking/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 new file mode 100644 index 0000000..7964e9b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/79/79ec9924523cab891e1402fd42acd369 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 b/Unity/Better Tracking/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 new file mode 100644 index 0000000..a9fbb89 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7a/7a1ddd4bb62494c94d9a519402133b72 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7a/7a3aba0946643c56e9b684f3cea3a4b4 b/Unity/Better Tracking/Library/Artifacts/7a/7a3aba0946643c56e9b684f3cea3a4b4 new file mode 100644 index 0000000..e532599 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7a/7a3aba0946643c56e9b684f3cea3a4b4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7a/7a56f33395eb4f62251e0bb2245debed b/Unity/Better Tracking/Library/Artifacts/7a/7a56f33395eb4f62251e0bb2245debed new file mode 100644 index 0000000..49823d2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7a/7a56f33395eb4f62251e0bb2245debed differ diff --git a/Unity/Better Tracking/Library/Artifacts/7a/7a7a6c88e921b93e7b16d0a3aa967e5d b/Unity/Better Tracking/Library/Artifacts/7a/7a7a6c88e921b93e7b16d0a3aa967e5d new file mode 100644 index 0000000..fece711 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7a/7a7a6c88e921b93e7b16d0a3aa967e5d differ diff --git a/Unity/Better Tracking/Library/Artifacts/7a/7aec6593587f263294959d2ffbc51afd b/Unity/Better Tracking/Library/Artifacts/7a/7aec6593587f263294959d2ffbc51afd new file mode 100644 index 0000000..705127a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7a/7aec6593587f263294959d2ffbc51afd differ diff --git a/Unity/Better Tracking/Library/Artifacts/7b/7b146981c29039756d93f26061246064 b/Unity/Better Tracking/Library/Artifacts/7b/7b146981c29039756d93f26061246064 new file mode 100644 index 0000000..81be6ae Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7b/7b146981c29039756d93f26061246064 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7b/7b469a310b1732c7f8f6a30ab2b36fbb b/Unity/Better Tracking/Library/Artifacts/7b/7b469a310b1732c7f8f6a30ab2b36fbb new file mode 100644 index 0000000..2f0972c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7b/7b469a310b1732c7f8f6a30ab2b36fbb differ diff --git a/Unity/Better Tracking/Library/Artifacts/7b/7b5781c8023c4881631fdc3d19b9bcc4 b/Unity/Better Tracking/Library/Artifacts/7b/7b5781c8023c4881631fdc3d19b9bcc4 new file mode 100644 index 0000000..a7dadd0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7b/7b5781c8023c4881631fdc3d19b9bcc4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7b/7b6d39481446b09e5f68a6cdbb20766c b/Unity/Better Tracking/Library/Artifacts/7b/7b6d39481446b09e5f68a6cdbb20766c new file mode 100644 index 0000000..92a9eca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7b/7b6d39481446b09e5f68a6cdbb20766c differ diff --git a/Unity/Better Tracking/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 b/Unity/Better Tracking/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 new file mode 100644 index 0000000..7ba63e2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7b/7bcf1c1dac433557299f90223a6b1796 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7b/7bf1033f47dc24e0e9aa110c94654e85 b/Unity/Better Tracking/Library/Artifacts/7b/7bf1033f47dc24e0e9aa110c94654e85 new file mode 100644 index 0000000..90df379 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7b/7bf1033f47dc24e0e9aa110c94654e85 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7b/7bf2a367d7eaa78331942124e5df6386 b/Unity/Better Tracking/Library/Artifacts/7b/7bf2a367d7eaa78331942124e5df6386 new file mode 100644 index 0000000..51a1a04 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7b/7bf2a367d7eaa78331942124e5df6386 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7c/7c37aa5e6d058a7efb592c6ed1d199f9 b/Unity/Better Tracking/Library/Artifacts/7c/7c37aa5e6d058a7efb592c6ed1d199f9 new file mode 100644 index 0000000..a4927bb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7c/7c37aa5e6d058a7efb592c6ed1d199f9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7c/7c6b828b082a53b498ab21cfe69795cf b/Unity/Better Tracking/Library/Artifacts/7c/7c6b828b082a53b498ab21cfe69795cf new file mode 100644 index 0000000..e55b4b6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7c/7c6b828b082a53b498ab21cfe69795cf differ diff --git a/Unity/Better Tracking/Library/Artifacts/7c/7c6f4f06e63c30c76114dd798226e65e b/Unity/Better Tracking/Library/Artifacts/7c/7c6f4f06e63c30c76114dd798226e65e new file mode 100644 index 0000000..2501180 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7c/7c6f4f06e63c30c76114dd798226e65e differ diff --git a/Unity/Better Tracking/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 b/Unity/Better Tracking/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 new file mode 100644 index 0000000..bf7b746 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7c/7c97c493dafce68bb2b711f1e7c82cc6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7c/7cd0438c6091a65f035970275c0f305a b/Unity/Better Tracking/Library/Artifacts/7c/7cd0438c6091a65f035970275c0f305a new file mode 100644 index 0000000..41c72a4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7c/7cd0438c6091a65f035970275c0f305a differ diff --git a/Unity/Better Tracking/Library/Artifacts/7c/7cd590c5c559763145c8d69e7371ceb6 b/Unity/Better Tracking/Library/Artifacts/7c/7cd590c5c559763145c8d69e7371ceb6 new file mode 100644 index 0000000..a53b212 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7c/7cd590c5c559763145c8d69e7371ceb6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7c/7ce2e0c23afb066ac2b92a66da50e98b b/Unity/Better Tracking/Library/Artifacts/7c/7ce2e0c23afb066ac2b92a66da50e98b new file mode 100644 index 0000000..ae26721 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7c/7ce2e0c23afb066ac2b92a66da50e98b differ diff --git a/Unity/Better Tracking/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 b/Unity/Better Tracking/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 new file mode 100644 index 0000000..e7ed25e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7d/7d2b1b311591fc74b13b637f7eb260d9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7d/7da194eb4f56066bd657cc1497af3802 b/Unity/Better Tracking/Library/Artifacts/7d/7da194eb4f56066bd657cc1497af3802 new file mode 100644 index 0000000..2f3afb7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7d/7da194eb4f56066bd657cc1497af3802 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7d/7dde6b7ec12be6e7733be16042836ba1 b/Unity/Better Tracking/Library/Artifacts/7d/7dde6b7ec12be6e7733be16042836ba1 new file mode 100644 index 0000000..ae002c0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7d/7dde6b7ec12be6e7733be16042836ba1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 b/Unity/Better Tracking/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 new file mode 100644 index 0000000..7b06c5d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7e/7e01561233644e028ea51dfa90cdfa74 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7e/7e14dc9a65e83f8dc07c31d05a190aa0 b/Unity/Better Tracking/Library/Artifacts/7e/7e14dc9a65e83f8dc07c31d05a190aa0 new file mode 100644 index 0000000..d6e05f7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7e/7e14dc9a65e83f8dc07c31d05a190aa0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7e/7e59fa134d64d1e68d5cd2fb8a99c303 b/Unity/Better Tracking/Library/Artifacts/7e/7e59fa134d64d1e68d5cd2fb8a99c303 new file mode 100644 index 0000000..d40bf8e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7e/7e59fa134d64d1e68d5cd2fb8a99c303 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7e/7e6abe94c3a4fb4ebafdc6e7059140ee b/Unity/Better Tracking/Library/Artifacts/7e/7e6abe94c3a4fb4ebafdc6e7059140ee new file mode 100644 index 0000000..ffa166c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7e/7e6abe94c3a4fb4ebafdc6e7059140ee differ diff --git a/Unity/Better Tracking/Library/Artifacts/7e/7e890ffd1ba534eab2dec982aa699704 b/Unity/Better Tracking/Library/Artifacts/7e/7e890ffd1ba534eab2dec982aa699704 new file mode 100644 index 0000000..1886942 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7e/7e890ffd1ba534eab2dec982aa699704 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7e/7ea73873c85915cdf98ea60bf64a0ccb b/Unity/Better Tracking/Library/Artifacts/7e/7ea73873c85915cdf98ea60bf64a0ccb new file mode 100644 index 0000000..f36c1f5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7e/7ea73873c85915cdf98ea60bf64a0ccb differ diff --git a/Unity/Better Tracking/Library/Artifacts/7e/7ecaa297073ac70fb8930b7562d5d143 b/Unity/Better Tracking/Library/Artifacts/7e/7ecaa297073ac70fb8930b7562d5d143 new file mode 100644 index 0000000..7f0bc22 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7e/7ecaa297073ac70fb8930b7562d5d143 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7f/7f15d50b64de5362060c8f590706497d b/Unity/Better Tracking/Library/Artifacts/7f/7f15d50b64de5362060c8f590706497d new file mode 100644 index 0000000..e3ae385 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7f/7f15d50b64de5362060c8f590706497d differ diff --git a/Unity/Better Tracking/Library/Artifacts/7f/7f4c76616d17e3c7d70a0a1407b1fc17 b/Unity/Better Tracking/Library/Artifacts/7f/7f4c76616d17e3c7d70a0a1407b1fc17 new file mode 100644 index 0000000..adeab2c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7f/7f4c76616d17e3c7d70a0a1407b1fc17 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7f/7fab59441effe8f456ead7bd5d735151 b/Unity/Better Tracking/Library/Artifacts/7f/7fab59441effe8f456ead7bd5d735151 new file mode 100644 index 0000000..c37d29c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7f/7fab59441effe8f456ead7bd5d735151 differ diff --git a/Unity/Better Tracking/Library/Artifacts/7f/7fe335eb8e8f8de59cf1e19b1511de35 b/Unity/Better Tracking/Library/Artifacts/7f/7fe335eb8e8f8de59cf1e19b1511de35 new file mode 100644 index 0000000..096e517 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/7f/7fe335eb8e8f8de59cf1e19b1511de35 differ diff --git a/Unity/Better Tracking/Library/Artifacts/80/8025c7405ff8ce2c784d59bb2dd59a37 b/Unity/Better Tracking/Library/Artifacts/80/8025c7405ff8ce2c784d59bb2dd59a37 new file mode 100644 index 0000000..036afc9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/80/8025c7405ff8ce2c784d59bb2dd59a37 differ diff --git a/Unity/Better Tracking/Library/Artifacts/80/80ed56f5e5753eb8861d02b642656819 b/Unity/Better Tracking/Library/Artifacts/80/80ed56f5e5753eb8861d02b642656819 new file mode 100644 index 0000000..2a98fdf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/80/80ed56f5e5753eb8861d02b642656819 differ diff --git a/Unity/Better Tracking/Library/Artifacts/80/80f34d81bac0691ef8e6c2e7357abe40 b/Unity/Better Tracking/Library/Artifacts/80/80f34d81bac0691ef8e6c2e7357abe40 new file mode 100644 index 0000000..cd0aba1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/80/80f34d81bac0691ef8e6c2e7357abe40 differ diff --git a/Unity/Better Tracking/Library/Artifacts/80/80f72d9de1d074cfeffbe6c20c20de55 b/Unity/Better Tracking/Library/Artifacts/80/80f72d9de1d074cfeffbe6c20c20de55 new file mode 100644 index 0000000..dfb8bb5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/80/80f72d9de1d074cfeffbe6c20c20de55 differ diff --git a/Unity/Better Tracking/Library/Artifacts/81/810c40968623c2d650b18c3bc1e29207 b/Unity/Better Tracking/Library/Artifacts/81/810c40968623c2d650b18c3bc1e29207 new file mode 100644 index 0000000..6c773c3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/81/810c40968623c2d650b18c3bc1e29207 differ diff --git a/Unity/Better Tracking/Library/Artifacts/81/8118780b570fa2fccba73a72f6395f4d b/Unity/Better Tracking/Library/Artifacts/81/8118780b570fa2fccba73a72f6395f4d new file mode 100644 index 0000000..5062ba4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/81/8118780b570fa2fccba73a72f6395f4d differ diff --git a/Unity/Better Tracking/Library/Artifacts/81/81339ae05c32c0a370d32a125ed1ec64 b/Unity/Better Tracking/Library/Artifacts/81/81339ae05c32c0a370d32a125ed1ec64 new file mode 100644 index 0000000..81f7f61 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/81/81339ae05c32c0a370d32a125ed1ec64 differ diff --git a/Unity/Better Tracking/Library/Artifacts/81/814a68f15e480aa58384fcc1701acc80 b/Unity/Better Tracking/Library/Artifacts/81/814a68f15e480aa58384fcc1701acc80 new file mode 100644 index 0000000..ee49110 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/81/814a68f15e480aa58384fcc1701acc80 differ diff --git a/Unity/Better Tracking/Library/Artifacts/81/8176c5af99a4d9032c5eda390672b35c b/Unity/Better Tracking/Library/Artifacts/81/8176c5af99a4d9032c5eda390672b35c new file mode 100644 index 0000000..4b417f4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/81/8176c5af99a4d9032c5eda390672b35c differ diff --git a/Unity/Better Tracking/Library/Artifacts/81/81bc134ebe2d8ad4d14260e98a855164 b/Unity/Better Tracking/Library/Artifacts/81/81bc134ebe2d8ad4d14260e98a855164 new file mode 100644 index 0000000..075aece Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/81/81bc134ebe2d8ad4d14260e98a855164 differ diff --git a/Unity/Better Tracking/Library/Artifacts/81/81dd1dc61d7465bb438cb15c0e421833 b/Unity/Better Tracking/Library/Artifacts/81/81dd1dc61d7465bb438cb15c0e421833 new file mode 100644 index 0000000..5b9b4da Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/81/81dd1dc61d7465bb438cb15c0e421833 differ diff --git a/Unity/Better Tracking/Library/Artifacts/82/826ac37a700076ade8fff626da684403 b/Unity/Better Tracking/Library/Artifacts/82/826ac37a700076ade8fff626da684403 new file mode 100644 index 0000000..00b0ef8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/82/826ac37a700076ade8fff626da684403 differ diff --git a/Unity/Better Tracking/Library/Artifacts/82/826cf23c912ac5e245eadd291409be1d b/Unity/Better Tracking/Library/Artifacts/82/826cf23c912ac5e245eadd291409be1d new file mode 100644 index 0000000..a605222 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/82/826cf23c912ac5e245eadd291409be1d differ diff --git a/Unity/Better Tracking/Library/Artifacts/82/826f933060fc58333bd19621634d9298 b/Unity/Better Tracking/Library/Artifacts/82/826f933060fc58333bd19621634d9298 new file mode 100644 index 0000000..ce07ef9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/82/826f933060fc58333bd19621634d9298 differ diff --git a/Unity/Better Tracking/Library/Artifacts/82/82de2d98f81cf13df2c309e85f18e7c6 b/Unity/Better Tracking/Library/Artifacts/82/82de2d98f81cf13df2c309e85f18e7c6 new file mode 100644 index 0000000..235a34d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/82/82de2d98f81cf13df2c309e85f18e7c6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/83/831ad1b8616f726f3d5cd0feb28cd945 b/Unity/Better Tracking/Library/Artifacts/83/831ad1b8616f726f3d5cd0feb28cd945 new file mode 100644 index 0000000..866801b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/83/831ad1b8616f726f3d5cd0feb28cd945 differ diff --git a/Unity/Better Tracking/Library/Artifacts/83/833c683e8baf929cc7acff08659f8063 b/Unity/Better Tracking/Library/Artifacts/83/833c683e8baf929cc7acff08659f8063 new file mode 100644 index 0000000..de6fc90 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/83/833c683e8baf929cc7acff08659f8063 differ diff --git a/Unity/Better Tracking/Library/Artifacts/83/8347a2ea97250c67737ac093121bb303 b/Unity/Better Tracking/Library/Artifacts/83/8347a2ea97250c67737ac093121bb303 new file mode 100644 index 0000000..173dbd0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/83/8347a2ea97250c67737ac093121bb303 differ diff --git a/Unity/Better Tracking/Library/Artifacts/83/834c93c7b0b6c1dcef208ff45239bcd8 b/Unity/Better Tracking/Library/Artifacts/83/834c93c7b0b6c1dcef208ff45239bcd8 new file mode 100644 index 0000000..af10907 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/83/834c93c7b0b6c1dcef208ff45239bcd8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa b/Unity/Better Tracking/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa new file mode 100644 index 0000000..6c7e4f9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/83/83a43593ec482460c58dc2754ac908aa differ diff --git a/Unity/Better Tracking/Library/Artifacts/84/8435a0d63c1860e50bd7d3e110bf8920 b/Unity/Better Tracking/Library/Artifacts/84/8435a0d63c1860e50bd7d3e110bf8920 new file mode 100644 index 0000000..43f3691 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/84/8435a0d63c1860e50bd7d3e110bf8920 differ diff --git a/Unity/Better Tracking/Library/Artifacts/84/843df1335bddf49636fdfb538c378326 b/Unity/Better Tracking/Library/Artifacts/84/843df1335bddf49636fdfb538c378326 new file mode 100644 index 0000000..9893f84 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/84/843df1335bddf49636fdfb538c378326 differ diff --git a/Unity/Better Tracking/Library/Artifacts/84/843e20f7cdb07bfbbac2c2490b845c50 b/Unity/Better Tracking/Library/Artifacts/84/843e20f7cdb07bfbbac2c2490b845c50 new file mode 100644 index 0000000..512d230 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/84/843e20f7cdb07bfbbac2c2490b845c50 differ diff --git a/Unity/Better Tracking/Library/Artifacts/84/845acd0b5058dd691537ea3b4711dd51 b/Unity/Better Tracking/Library/Artifacts/84/845acd0b5058dd691537ea3b4711dd51 new file mode 100644 index 0000000..77ee827 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/84/845acd0b5058dd691537ea3b4711dd51 differ diff --git a/Unity/Better Tracking/Library/Artifacts/84/84f20ecab0a8175dd027eb6998fec901 b/Unity/Better Tracking/Library/Artifacts/84/84f20ecab0a8175dd027eb6998fec901 new file mode 100644 index 0000000..76ac4d2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/84/84f20ecab0a8175dd027eb6998fec901 differ diff --git a/Unity/Better Tracking/Library/Artifacts/85/8507b011db70f76680411d6d5e5242ff b/Unity/Better Tracking/Library/Artifacts/85/8507b011db70f76680411d6d5e5242ff new file mode 100644 index 0000000..f5f5352 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/85/8507b011db70f76680411d6d5e5242ff differ diff --git a/Unity/Better Tracking/Library/Artifacts/85/852b884ee28553eeaa1a4d8dac0793e0 b/Unity/Better Tracking/Library/Artifacts/85/852b884ee28553eeaa1a4d8dac0793e0 new file mode 100644 index 0000000..c3d8b17 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/85/852b884ee28553eeaa1a4d8dac0793e0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 b/Unity/Better Tracking/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 new file mode 100644 index 0000000..2b6b177 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/85/85c9b223384f2d321bad364b289bee33 differ diff --git a/Unity/Better Tracking/Library/Artifacts/86/86251bd5b8dbfee10d54be7dcecdb2fd b/Unity/Better Tracking/Library/Artifacts/86/86251bd5b8dbfee10d54be7dcecdb2fd new file mode 100644 index 0000000..5fc1680 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/86/86251bd5b8dbfee10d54be7dcecdb2fd differ diff --git a/Unity/Better Tracking/Library/Artifacts/86/8631924ad680b92f1b7cdd8528428adb b/Unity/Better Tracking/Library/Artifacts/86/8631924ad680b92f1b7cdd8528428adb new file mode 100644 index 0000000..d9de0df Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/86/8631924ad680b92f1b7cdd8528428adb differ diff --git a/Unity/Better Tracking/Library/Artifacts/86/865a58bbcd4f971a7795891ced267798 b/Unity/Better Tracking/Library/Artifacts/86/865a58bbcd4f971a7795891ced267798 new file mode 100644 index 0000000..5c34537 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/86/865a58bbcd4f971a7795891ced267798 differ diff --git a/Unity/Better Tracking/Library/Artifacts/86/865cadba59a50a952b4fc3a05d9cc20f b/Unity/Better Tracking/Library/Artifacts/86/865cadba59a50a952b4fc3a05d9cc20f new file mode 100644 index 0000000..25bbb30 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/86/865cadba59a50a952b4fc3a05d9cc20f differ diff --git a/Unity/Better Tracking/Library/Artifacts/86/86651afcac132f4b61187e306e356f2c b/Unity/Better Tracking/Library/Artifacts/86/86651afcac132f4b61187e306e356f2c new file mode 100644 index 0000000..f956f08 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/86/86651afcac132f4b61187e306e356f2c differ diff --git a/Unity/Better Tracking/Library/Artifacts/86/86c8f878673fd415622a195b9cab1cb3 b/Unity/Better Tracking/Library/Artifacts/86/86c8f878673fd415622a195b9cab1cb3 new file mode 100644 index 0000000..84d967d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/86/86c8f878673fd415622a195b9cab1cb3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/86/86df5a5f6db6783b6c16bf84a8840c9d b/Unity/Better Tracking/Library/Artifacts/86/86df5a5f6db6783b6c16bf84a8840c9d new file mode 100644 index 0000000..20373a4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/86/86df5a5f6db6783b6c16bf84a8840c9d differ diff --git a/Unity/Better Tracking/Library/Artifacts/87/8709b7ca1a3d5db6e6a84c2c84303b8e b/Unity/Better Tracking/Library/Artifacts/87/8709b7ca1a3d5db6e6a84c2c84303b8e new file mode 100644 index 0000000..46cd87c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/87/8709b7ca1a3d5db6e6a84c2c84303b8e differ diff --git a/Unity/Better Tracking/Library/Artifacts/87/87fa482ab4042a5bdbbec0c6f9c76829 b/Unity/Better Tracking/Library/Artifacts/87/87fa482ab4042a5bdbbec0c6f9c76829 new file mode 100644 index 0000000..a37dfc9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/87/87fa482ab4042a5bdbbec0c6f9c76829 differ diff --git a/Unity/Better Tracking/Library/Artifacts/87/87fe0f8d0e872efe03e9e15971bd3e4c b/Unity/Better Tracking/Library/Artifacts/87/87fe0f8d0e872efe03e9e15971bd3e4c new file mode 100644 index 0000000..2ff0ebd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/87/87fe0f8d0e872efe03e9e15971bd3e4c differ diff --git a/Unity/Better Tracking/Library/Artifacts/88/8811458280c33944d054eca965466899 b/Unity/Better Tracking/Library/Artifacts/88/8811458280c33944d054eca965466899 new file mode 100644 index 0000000..00c965c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/88/8811458280c33944d054eca965466899 differ diff --git a/Unity/Better Tracking/Library/Artifacts/88/8814e6d1264cf66d4a4bcc7869e63857 b/Unity/Better Tracking/Library/Artifacts/88/8814e6d1264cf66d4a4bcc7869e63857 new file mode 100644 index 0000000..6257619 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/88/8814e6d1264cf66d4a4bcc7869e63857 differ diff --git a/Unity/Better Tracking/Library/Artifacts/88/8881505ea6e1353a7e600e040a70ee3f b/Unity/Better Tracking/Library/Artifacts/88/8881505ea6e1353a7e600e040a70ee3f new file mode 100644 index 0000000..b7194ab Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/88/8881505ea6e1353a7e600e040a70ee3f differ diff --git a/Unity/Better Tracking/Library/Artifacts/88/888a41b5797ad9c1dc6b4cb13d8819da b/Unity/Better Tracking/Library/Artifacts/88/888a41b5797ad9c1dc6b4cb13d8819da new file mode 100644 index 0000000..a27b421 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/88/888a41b5797ad9c1dc6b4cb13d8819da differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/890a63d30ed4c5995054878ca03ddd5c b/Unity/Better Tracking/Library/Artifacts/89/890a63d30ed4c5995054878ca03ddd5c new file mode 100644 index 0000000..13a95c6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/890a63d30ed4c5995054878ca03ddd5c differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/890c5f186881e9419b0a56451a9af1bc b/Unity/Better Tracking/Library/Artifacts/89/890c5f186881e9419b0a56451a9af1bc new file mode 100644 index 0000000..94ade78 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/890c5f186881e9419b0a56451a9af1bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/8915c633e512aa1794c9d0598433b3b9 b/Unity/Better Tracking/Library/Artifacts/89/8915c633e512aa1794c9d0598433b3b9 new file mode 100644 index 0000000..a78da58 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/8915c633e512aa1794c9d0598433b3b9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/891db58fb4160c6a3ad126c621cc5418 b/Unity/Better Tracking/Library/Artifacts/89/891db58fb4160c6a3ad126c621cc5418 new file mode 100644 index 0000000..b481dec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/891db58fb4160c6a3ad126c621cc5418 differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/8979058611cc04012f245e0542318373 b/Unity/Better Tracking/Library/Artifacts/89/8979058611cc04012f245e0542318373 new file mode 100644 index 0000000..f33f429 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/8979058611cc04012f245e0542318373 differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/898f938e74cf1e522af1a97c439bb121 b/Unity/Better Tracking/Library/Artifacts/89/898f938e74cf1e522af1a97c439bb121 new file mode 100644 index 0000000..6497811 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/898f938e74cf1e522af1a97c439bb121 differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/89b1197d85ffae9f3d3465bcd5e28238 b/Unity/Better Tracking/Library/Artifacts/89/89b1197d85ffae9f3d3465bcd5e28238 new file mode 100644 index 0000000..afdf6e2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/89b1197d85ffae9f3d3465bcd5e28238 differ diff --git a/Unity/Better Tracking/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 b/Unity/Better Tracking/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 new file mode 100644 index 0000000..683542a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/89/89e87464d9bfb1d39e531ee233514044 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8a5b4a2cb6da752179c0190ac5c454fa b/Unity/Better Tracking/Library/Artifacts/8a/8a5b4a2cb6da752179c0190ac5c454fa new file mode 100644 index 0000000..75f1eff Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8a5b4a2cb6da752179c0190ac5c454fa differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8a82fa2d77afd1910d541529af0a3dfe b/Unity/Better Tracking/Library/Artifacts/8a/8a82fa2d77afd1910d541529af0a3dfe new file mode 100644 index 0000000..e554712 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8a82fa2d77afd1910d541529af0a3dfe differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8a8fd7de68caf1c4bcfcb59c4ba1423e b/Unity/Better Tracking/Library/Artifacts/8a/8a8fd7de68caf1c4bcfcb59c4ba1423e new file mode 100644 index 0000000..0e7b3f4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8a8fd7de68caf1c4bcfcb59c4ba1423e differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 b/Unity/Better Tracking/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 new file mode 100644 index 0000000..6cc8d16 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8a9907ca198749bf8f6c6f8102a71cb1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8aa35b35e975b151de40cc9300804926 b/Unity/Better Tracking/Library/Artifacts/8a/8aa35b35e975b151de40cc9300804926 new file mode 100644 index 0000000..e341e44 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8aa35b35e975b151de40cc9300804926 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8ab0d88c27e61f00142707f31367bcda b/Unity/Better Tracking/Library/Artifacts/8a/8ab0d88c27e61f00142707f31367bcda new file mode 100644 index 0000000..68a831b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8ab0d88c27e61f00142707f31367bcda differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8ab6df6095510acc532b3e016d7fb68f b/Unity/Better Tracking/Library/Artifacts/8a/8ab6df6095510acc532b3e016d7fb68f new file mode 100644 index 0000000..7203e89 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8ab6df6095510acc532b3e016d7fb68f differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8adac430bacd79b04e35a3c89c82dad9 b/Unity/Better Tracking/Library/Artifacts/8a/8adac430bacd79b04e35a3c89c82dad9 new file mode 100644 index 0000000..e0ea3fc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8adac430bacd79b04e35a3c89c82dad9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8a/8ae496be7ffced23573cc4c5849a8c3b b/Unity/Better Tracking/Library/Artifacts/8a/8ae496be7ffced23573cc4c5849a8c3b new file mode 100644 index 0000000..64cd218 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8a/8ae496be7ffced23573cc4c5849a8c3b differ diff --git a/Unity/Better Tracking/Library/Artifacts/8b/8b0fc75aec14040c48d003615cb33506 b/Unity/Better Tracking/Library/Artifacts/8b/8b0fc75aec14040c48d003615cb33506 new file mode 100644 index 0000000..3597bed Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8b/8b0fc75aec14040c48d003615cb33506 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8b/8b23627cdbe7418493acc5f0b17cb267 b/Unity/Better Tracking/Library/Artifacts/8b/8b23627cdbe7418493acc5f0b17cb267 new file mode 100644 index 0000000..a2c8f78 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8b/8b23627cdbe7418493acc5f0b17cb267 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8b/8b23a149d777d9c296e8ebcfc2412b91 b/Unity/Better Tracking/Library/Artifacts/8b/8b23a149d777d9c296e8ebcfc2412b91 new file mode 100644 index 0000000..071a7cc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8b/8b23a149d777d9c296e8ebcfc2412b91 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8b/8b55623b6453004b31d3383d789052e5 b/Unity/Better Tracking/Library/Artifacts/8b/8b55623b6453004b31d3383d789052e5 new file mode 100644 index 0000000..884cd31 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8b/8b55623b6453004b31d3383d789052e5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8b/8b8f889974a561660beca44fa9a7777f b/Unity/Better Tracking/Library/Artifacts/8b/8b8f889974a561660beca44fa9a7777f new file mode 100644 index 0000000..71a5d6c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8b/8b8f889974a561660beca44fa9a7777f differ diff --git a/Unity/Better Tracking/Library/Artifacts/8b/8bcd23b9f6cefaa6b2d52c0aa4b3447e b/Unity/Better Tracking/Library/Artifacts/8b/8bcd23b9f6cefaa6b2d52c0aa4b3447e new file mode 100644 index 0000000..6845e58 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8b/8bcd23b9f6cefaa6b2d52c0aa4b3447e differ diff --git a/Unity/Better Tracking/Library/Artifacts/8b/8bfcd741bdeae82af95447403cd3c262 b/Unity/Better Tracking/Library/Artifacts/8b/8bfcd741bdeae82af95447403cd3c262 new file mode 100644 index 0000000..f65f0e6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8b/8bfcd741bdeae82af95447403cd3c262 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8c/8c48d8482f5a99e99a847dc033a25260 b/Unity/Better Tracking/Library/Artifacts/8c/8c48d8482f5a99e99a847dc033a25260 new file mode 100644 index 0000000..cf9d958 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8c/8c48d8482f5a99e99a847dc033a25260 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8c/8c4c483e9ae1d7c0c7aaa83815289e60 b/Unity/Better Tracking/Library/Artifacts/8c/8c4c483e9ae1d7c0c7aaa83815289e60 new file mode 100644 index 0000000..61e2f96 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8c/8c4c483e9ae1d7c0c7aaa83815289e60 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8c/8c4fc28dd9b94df0227e7ee171c09861 b/Unity/Better Tracking/Library/Artifacts/8c/8c4fc28dd9b94df0227e7ee171c09861 new file mode 100644 index 0000000..99c8603 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8c/8c4fc28dd9b94df0227e7ee171c09861 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8c/8c5c5479dde0abd30c1318e22414f7e1 b/Unity/Better Tracking/Library/Artifacts/8c/8c5c5479dde0abd30c1318e22414f7e1 new file mode 100644 index 0000000..5d425d2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8c/8c5c5479dde0abd30c1318e22414f7e1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8c/8c8432762e8c3a4abe573bf2ffdb9219 b/Unity/Better Tracking/Library/Artifacts/8c/8c8432762e8c3a4abe573bf2ffdb9219 new file mode 100644 index 0000000..912f157 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8c/8c8432762e8c3a4abe573bf2ffdb9219 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8c/8c8d6487d9fd7c4ad8d46949fcb62122 b/Unity/Better Tracking/Library/Artifacts/8c/8c8d6487d9fd7c4ad8d46949fcb62122 new file mode 100644 index 0000000..bbaf2c9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8c/8c8d6487d9fd7c4ad8d46949fcb62122 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e b/Unity/Better Tracking/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e new file mode 100644 index 0000000..9f9f91c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8c/8cf74902f6d9d5f1c571e436985f1d5e differ diff --git a/Unity/Better Tracking/Library/Artifacts/8d/8d08f781b535dd4f469519cd0ab117a9 b/Unity/Better Tracking/Library/Artifacts/8d/8d08f781b535dd4f469519cd0ab117a9 new file mode 100644 index 0000000..0f5cb4a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8d/8d08f781b535dd4f469519cd0ab117a9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8d/8d10619922d2459a0f28993c7264f463 b/Unity/Better Tracking/Library/Artifacts/8d/8d10619922d2459a0f28993c7264f463 new file mode 100644 index 0000000..fd492a3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8d/8d10619922d2459a0f28993c7264f463 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8d/8d1b35d6d41819f94926a10ae6c40b67 b/Unity/Better Tracking/Library/Artifacts/8d/8d1b35d6d41819f94926a10ae6c40b67 new file mode 100644 index 0000000..80feb5a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8d/8d1b35d6d41819f94926a10ae6c40b67 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8d/8d2ec43a1d4fbd223419454329a93118 b/Unity/Better Tracking/Library/Artifacts/8d/8d2ec43a1d4fbd223419454329a93118 new file mode 100644 index 0000000..1944a98 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8d/8d2ec43a1d4fbd223419454329a93118 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8d/8db5333e1ce5a12caa34c038fd39a5c2 b/Unity/Better Tracking/Library/Artifacts/8d/8db5333e1ce5a12caa34c038fd39a5c2 new file mode 100644 index 0000000..aaf8e09 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8d/8db5333e1ce5a12caa34c038fd39a5c2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8e0f41e57805ff9f760a60bf26de674d b/Unity/Better Tracking/Library/Artifacts/8e/8e0f41e57805ff9f760a60bf26de674d new file mode 100644 index 0000000..9190efd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8e0f41e57805ff9f760a60bf26de674d differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8e23fb0b31307a2969e411bdcac7d6bd b/Unity/Better Tracking/Library/Artifacts/8e/8e23fb0b31307a2969e411bdcac7d6bd new file mode 100644 index 0000000..ccdbd35 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8e23fb0b31307a2969e411bdcac7d6bd differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c b/Unity/Better Tracking/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c new file mode 100644 index 0000000..8b3a729 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8e372c5e92f7b0bfb7d0a5fef938248c differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8e4ed8c81225beea808a019d6de81ead b/Unity/Better Tracking/Library/Artifacts/8e/8e4ed8c81225beea808a019d6de81ead new file mode 100644 index 0000000..5b00f26 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8e4ed8c81225beea808a019d6de81ead differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8e54829bb69d4b31f072a5936cc0635d b/Unity/Better Tracking/Library/Artifacts/8e/8e54829bb69d4b31f072a5936cc0635d new file mode 100644 index 0000000..31c43d7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8e54829bb69d4b31f072a5936cc0635d differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8e815e3393746a17b3ddf9741564dc06 b/Unity/Better Tracking/Library/Artifacts/8e/8e815e3393746a17b3ddf9741564dc06 new file mode 100644 index 0000000..a273941 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8e815e3393746a17b3ddf9741564dc06 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8e84f94e0f2c82bd582aa8f935547870 b/Unity/Better Tracking/Library/Artifacts/8e/8e84f94e0f2c82bd582aa8f935547870 new file mode 100644 index 0000000..115e9f6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8e84f94e0f2c82bd582aa8f935547870 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8ec136c5fe62c9d13eed8113d4929826 b/Unity/Better Tracking/Library/Artifacts/8e/8ec136c5fe62c9d13eed8113d4929826 new file mode 100644 index 0000000..cf1b2d9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8ec136c5fe62c9d13eed8113d4929826 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8ed2f2285950797a0b85c78412280cce b/Unity/Better Tracking/Library/Artifacts/8e/8ed2f2285950797a0b85c78412280cce new file mode 100644 index 0000000..5e795aa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8ed2f2285950797a0b85c78412280cce differ diff --git a/Unity/Better Tracking/Library/Artifacts/8e/8efa0415771b5d1e9f9ba4c0ac1997e8 b/Unity/Better Tracking/Library/Artifacts/8e/8efa0415771b5d1e9f9ba4c0ac1997e8 new file mode 100644 index 0000000..82ff214 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8e/8efa0415771b5d1e9f9ba4c0ac1997e8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8f/8f0a2548796a19fc04a05b3f51bd19aa b/Unity/Better Tracking/Library/Artifacts/8f/8f0a2548796a19fc04a05b3f51bd19aa new file mode 100644 index 0000000..c77e2b4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8f/8f0a2548796a19fc04a05b3f51bd19aa differ diff --git a/Unity/Better Tracking/Library/Artifacts/8f/8f4492cc63b60d7b64212e324b5157d1 b/Unity/Better Tracking/Library/Artifacts/8f/8f4492cc63b60d7b64212e324b5157d1 new file mode 100644 index 0000000..26a6bbc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8f/8f4492cc63b60d7b64212e324b5157d1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8f/8f4555d10855095c5353fb06b1f6e7d2 b/Unity/Better Tracking/Library/Artifacts/8f/8f4555d10855095c5353fb06b1f6e7d2 new file mode 100644 index 0000000..048d7a6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8f/8f4555d10855095c5353fb06b1f6e7d2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8f/8f65d09e093866fce9684e90cb243e48 b/Unity/Better Tracking/Library/Artifacts/8f/8f65d09e093866fce9684e90cb243e48 new file mode 100644 index 0000000..109ad20 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8f/8f65d09e093866fce9684e90cb243e48 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8f/8f73b95382e2f7550bfcfa13d133eede b/Unity/Better Tracking/Library/Artifacts/8f/8f73b95382e2f7550bfcfa13d133eede new file mode 100644 index 0000000..ed265be Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8f/8f73b95382e2f7550bfcfa13d133eede differ diff --git a/Unity/Better Tracking/Library/Artifacts/8f/8fa81c20d22fc25d1deff68e5cbd96c3 b/Unity/Better Tracking/Library/Artifacts/8f/8fa81c20d22fc25d1deff68e5cbd96c3 new file mode 100644 index 0000000..981b7e4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8f/8fa81c20d22fc25d1deff68e5cbd96c3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/8f/8ffaab6aaff11e724f75843152f24bd7 b/Unity/Better Tracking/Library/Artifacts/8f/8ffaab6aaff11e724f75843152f24bd7 new file mode 100644 index 0000000..bc300aa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/8f/8ffaab6aaff11e724f75843152f24bd7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/90/90038260befa12c64e96b1fb9c0dec38 b/Unity/Better Tracking/Library/Artifacts/90/90038260befa12c64e96b1fb9c0dec38 new file mode 100644 index 0000000..bb24ff2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/90/90038260befa12c64e96b1fb9c0dec38 differ diff --git a/Unity/Better Tracking/Library/Artifacts/90/902c4bb92eade4dd6eebe179971a193a b/Unity/Better Tracking/Library/Artifacts/90/902c4bb92eade4dd6eebe179971a193a new file mode 100644 index 0000000..09ad604 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/90/902c4bb92eade4dd6eebe179971a193a differ diff --git a/Unity/Better Tracking/Library/Artifacts/90/904619cb9abda30dec1949b95032fe00 b/Unity/Better Tracking/Library/Artifacts/90/904619cb9abda30dec1949b95032fe00 new file mode 100644 index 0000000..04b0410 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/90/904619cb9abda30dec1949b95032fe00 differ diff --git a/Unity/Better Tracking/Library/Artifacts/90/90818c034462af480aeef99e63d1a662 b/Unity/Better Tracking/Library/Artifacts/90/90818c034462af480aeef99e63d1a662 new file mode 100644 index 0000000..107d4d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/90/90818c034462af480aeef99e63d1a662 differ diff --git a/Unity/Better Tracking/Library/Artifacts/90/90d8329e4b9685cbaac4739a9ca95df7 b/Unity/Better Tracking/Library/Artifacts/90/90d8329e4b9685cbaac4739a9ca95df7 new file mode 100644 index 0000000..18ee85a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/90/90d8329e4b9685cbaac4739a9ca95df7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/90/90e5f6aedc116890ad00aeb33f49badd b/Unity/Better Tracking/Library/Artifacts/90/90e5f6aedc116890ad00aeb33f49badd new file mode 100644 index 0000000..a207c42 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/90/90e5f6aedc116890ad00aeb33f49badd differ diff --git a/Unity/Better Tracking/Library/Artifacts/91/9157e37870d771d3ecc23860c8511a9c b/Unity/Better Tracking/Library/Artifacts/91/9157e37870d771d3ecc23860c8511a9c new file mode 100644 index 0000000..468fc71 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/91/9157e37870d771d3ecc23860c8511a9c differ diff --git a/Unity/Better Tracking/Library/Artifacts/91/916c52e905d53400696c012da2179116 b/Unity/Better Tracking/Library/Artifacts/91/916c52e905d53400696c012da2179116 new file mode 100644 index 0000000..c56e325 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/91/916c52e905d53400696c012da2179116 differ diff --git a/Unity/Better Tracking/Library/Artifacts/92/92058184aa26d457cfe7194fb767f1d8 b/Unity/Better Tracking/Library/Artifacts/92/92058184aa26d457cfe7194fb767f1d8 new file mode 100644 index 0000000..9baf06d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/92/92058184aa26d457cfe7194fb767f1d8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/92/921d74a7489010fb0da4f268da3ee91a b/Unity/Better Tracking/Library/Artifacts/92/921d74a7489010fb0da4f268da3ee91a new file mode 100644 index 0000000..1b0e03d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/92/921d74a7489010fb0da4f268da3ee91a differ diff --git a/Unity/Better Tracking/Library/Artifacts/92/922ab665e51ae33ee3ff2a29a260b675 b/Unity/Better Tracking/Library/Artifacts/92/922ab665e51ae33ee3ff2a29a260b675 new file mode 100644 index 0000000..03f8646 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/92/922ab665e51ae33ee3ff2a29a260b675 differ diff --git a/Unity/Better Tracking/Library/Artifacts/92/9243e83064b6b5aedee1d26a9a2680fc b/Unity/Better Tracking/Library/Artifacts/92/9243e83064b6b5aedee1d26a9a2680fc new file mode 100644 index 0000000..930cf46 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/92/9243e83064b6b5aedee1d26a9a2680fc differ diff --git a/Unity/Better Tracking/Library/Artifacts/92/92e7d4607b1cc7949bacb62fe2840621 b/Unity/Better Tracking/Library/Artifacts/92/92e7d4607b1cc7949bacb62fe2840621 new file mode 100644 index 0000000..4743b5e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/92/92e7d4607b1cc7949bacb62fe2840621 differ diff --git a/Unity/Better Tracking/Library/Artifacts/92/92f27e0ac8058bc02b527c46b63ac064 b/Unity/Better Tracking/Library/Artifacts/92/92f27e0ac8058bc02b527c46b63ac064 new file mode 100644 index 0000000..c06aaf7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/92/92f27e0ac8058bc02b527c46b63ac064 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/9316ee52c278175f6ba6f72c0cb47161 b/Unity/Better Tracking/Library/Artifacts/93/9316ee52c278175f6ba6f72c0cb47161 new file mode 100644 index 0000000..4cae6bb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/9316ee52c278175f6ba6f72c0cb47161 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 b/Unity/Better Tracking/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 new file mode 100644 index 0000000..6132453 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/932e760195be1e29952b74e977f84c48 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/933067cf86854a3551ae70eeb4c679ff b/Unity/Better Tracking/Library/Artifacts/93/933067cf86854a3551ae70eeb4c679ff new file mode 100644 index 0000000..bfe9601 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/933067cf86854a3551ae70eeb4c679ff differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/933178bdb4b1a5fb8f66d6e7517da3bc b/Unity/Better Tracking/Library/Artifacts/93/933178bdb4b1a5fb8f66d6e7517da3bc new file mode 100644 index 0000000..e4febd1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/933178bdb4b1a5fb8f66d6e7517da3bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/9353789cf87e80b518df81b59fe33108 b/Unity/Better Tracking/Library/Artifacts/93/9353789cf87e80b518df81b59fe33108 new file mode 100644 index 0000000..df9465f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/9353789cf87e80b518df81b59fe33108 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/935ac55a2f1d8a1c37fb32a9ea5ae589 b/Unity/Better Tracking/Library/Artifacts/93/935ac55a2f1d8a1c37fb32a9ea5ae589 new file mode 100644 index 0000000..f1e46a3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/935ac55a2f1d8a1c37fb32a9ea5ae589 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/938e8af392a5c5f7d8993eaf8401d2da b/Unity/Better Tracking/Library/Artifacts/93/938e8af392a5c5f7d8993eaf8401d2da new file mode 100644 index 0000000..b979a9b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/938e8af392a5c5f7d8993eaf8401d2da differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/939dfef4b090ceb1dd1ecf465220dac9 b/Unity/Better Tracking/Library/Artifacts/93/939dfef4b090ceb1dd1ecf465220dac9 new file mode 100644 index 0000000..e0929a8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/939dfef4b090ceb1dd1ecf465220dac9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/93af508b6127ca7fadab1f5f25702461 b/Unity/Better Tracking/Library/Artifacts/93/93af508b6127ca7fadab1f5f25702461 new file mode 100644 index 0000000..95b4001 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/93af508b6127ca7fadab1f5f25702461 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/93c10827e9df6a016cab39a385e1d618 b/Unity/Better Tracking/Library/Artifacts/93/93c10827e9df6a016cab39a385e1d618 new file mode 100644 index 0000000..d2a89d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/93c10827e9df6a016cab39a385e1d618 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/93cff19a05b7d34684a0ff466e821721 b/Unity/Better Tracking/Library/Artifacts/93/93cff19a05b7d34684a0ff466e821721 new file mode 100644 index 0000000..e54e8bd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/93cff19a05b7d34684a0ff466e821721 differ diff --git a/Unity/Better Tracking/Library/Artifacts/93/93fc3012d797b749abde15f373285520 b/Unity/Better Tracking/Library/Artifacts/93/93fc3012d797b749abde15f373285520 new file mode 100644 index 0000000..6b71348 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/93/93fc3012d797b749abde15f373285520 differ diff --git a/Unity/Better Tracking/Library/Artifacts/94/94136aaf0fba1399eefa445d584c74bd b/Unity/Better Tracking/Library/Artifacts/94/94136aaf0fba1399eefa445d584c74bd new file mode 100644 index 0000000..141aa78 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/94/94136aaf0fba1399eefa445d584c74bd differ diff --git a/Unity/Better Tracking/Library/Artifacts/94/941ac8f70a0d962488cbbdce8f56e0a2 b/Unity/Better Tracking/Library/Artifacts/94/941ac8f70a0d962488cbbdce8f56e0a2 new file mode 100644 index 0000000..a774678 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/94/941ac8f70a0d962488cbbdce8f56e0a2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/94/94592105a82df1d19ec9d11478563090 b/Unity/Better Tracking/Library/Artifacts/94/94592105a82df1d19ec9d11478563090 new file mode 100644 index 0000000..27bae04 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/94/94592105a82df1d19ec9d11478563090 differ diff --git a/Unity/Better Tracking/Library/Artifacts/94/947b560b71094e51fb58b3775fbc5677 b/Unity/Better Tracking/Library/Artifacts/94/947b560b71094e51fb58b3775fbc5677 new file mode 100644 index 0000000..7ba7ba4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/94/947b560b71094e51fb58b3775fbc5677 differ diff --git a/Unity/Better Tracking/Library/Artifacts/94/947e67352876d1c9526e87dde8d7d135 b/Unity/Better Tracking/Library/Artifacts/94/947e67352876d1c9526e87dde8d7d135 new file mode 100644 index 0000000..6eb9757 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/94/947e67352876d1c9526e87dde8d7d135 differ diff --git a/Unity/Better Tracking/Library/Artifacts/94/94968e8275b5f5ff2c956919a641f5f9 b/Unity/Better Tracking/Library/Artifacts/94/94968e8275b5f5ff2c956919a641f5f9 new file mode 100644 index 0000000..8de3500 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/94/94968e8275b5f5ff2c956919a641f5f9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/95/95068eac4f7b98f7456cccf8c718d6c0 b/Unity/Better Tracking/Library/Artifacts/95/95068eac4f7b98f7456cccf8c718d6c0 new file mode 100644 index 0000000..74adf9b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/95/95068eac4f7b98f7456cccf8c718d6c0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/95/950e797cddf67e602f4c0c2efcc2b4dd b/Unity/Better Tracking/Library/Artifacts/95/950e797cddf67e602f4c0c2efcc2b4dd new file mode 100644 index 0000000..9abea75 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/95/950e797cddf67e602f4c0c2efcc2b4dd differ diff --git a/Unity/Better Tracking/Library/Artifacts/95/9594808f16b01625b825e9aa38eb72f3 b/Unity/Better Tracking/Library/Artifacts/95/9594808f16b01625b825e9aa38eb72f3 new file mode 100644 index 0000000..3e92f10 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/95/9594808f16b01625b825e9aa38eb72f3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/95/95d0858bbd0bf9108db3bd824776de2f b/Unity/Better Tracking/Library/Artifacts/95/95d0858bbd0bf9108db3bd824776de2f new file mode 100644 index 0000000..c649410 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/95/95d0858bbd0bf9108db3bd824776de2f differ diff --git a/Unity/Better Tracking/Library/Artifacts/96/9609a6f103a3a61f639930059eb4e1f1 b/Unity/Better Tracking/Library/Artifacts/96/9609a6f103a3a61f639930059eb4e1f1 new file mode 100644 index 0000000..7d87240 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/96/9609a6f103a3a61f639930059eb4e1f1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/96/961e9f0b2101c23758cad2b396c14083 b/Unity/Better Tracking/Library/Artifacts/96/961e9f0b2101c23758cad2b396c14083 new file mode 100644 index 0000000..25d11aa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/96/961e9f0b2101c23758cad2b396c14083 differ diff --git a/Unity/Better Tracking/Library/Artifacts/96/9646f67484b575ee5976b038d609689f b/Unity/Better Tracking/Library/Artifacts/96/9646f67484b575ee5976b038d609689f new file mode 100644 index 0000000..9b25193 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/96/9646f67484b575ee5976b038d609689f differ diff --git a/Unity/Better Tracking/Library/Artifacts/96/9652d4c55bfe2db57618262142c06c12 b/Unity/Better Tracking/Library/Artifacts/96/9652d4c55bfe2db57618262142c06c12 new file mode 100644 index 0000000..afef58d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/96/9652d4c55bfe2db57618262142c06c12 differ diff --git a/Unity/Better Tracking/Library/Artifacts/96/96a620175afbd61cb15c115eb6a71714 b/Unity/Better Tracking/Library/Artifacts/96/96a620175afbd61cb15c115eb6a71714 new file mode 100644 index 0000000..0b04966 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/96/96a620175afbd61cb15c115eb6a71714 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/970b2301c0a5af01d01a79467dab7107 b/Unity/Better Tracking/Library/Artifacts/97/970b2301c0a5af01d01a79467dab7107 new file mode 100644 index 0000000..245727e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/970b2301c0a5af01d01a79467dab7107 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/970d1841293747b2d99f38266934c6ef b/Unity/Better Tracking/Library/Artifacts/97/970d1841293747b2d99f38266934c6ef new file mode 100644 index 0000000..ee22e94 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/970d1841293747b2d99f38266934c6ef differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/972298c92ceef306e9401b34dae36790 b/Unity/Better Tracking/Library/Artifacts/97/972298c92ceef306e9401b34dae36790 new file mode 100644 index 0000000..1d27454 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/972298c92ceef306e9401b34dae36790 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/9766af0893608414b9ecbc3f001be028 b/Unity/Better Tracking/Library/Artifacts/97/9766af0893608414b9ecbc3f001be028 new file mode 100644 index 0000000..1322ad9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/9766af0893608414b9ecbc3f001be028 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/9777581b9f18fa09bf9f2b026f0f8ce3 b/Unity/Better Tracking/Library/Artifacts/97/9777581b9f18fa09bf9f2b026f0f8ce3 new file mode 100644 index 0000000..779d801 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/9777581b9f18fa09bf9f2b026f0f8ce3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/97a5665e9adc4cf4ce945699837c85b9 b/Unity/Better Tracking/Library/Artifacts/97/97a5665e9adc4cf4ce945699837c85b9 new file mode 100644 index 0000000..497e839 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/97a5665e9adc4cf4ce945699837c85b9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/97b2f64d6c17de6387a555c3eee10674 b/Unity/Better Tracking/Library/Artifacts/97/97b2f64d6c17de6387a555c3eee10674 new file mode 100644 index 0000000..a1996d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/97b2f64d6c17de6387a555c3eee10674 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/97bce2ea7c73e41c7200a096fc55066b b/Unity/Better Tracking/Library/Artifacts/97/97bce2ea7c73e41c7200a096fc55066b new file mode 100644 index 0000000..ee16144 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/97bce2ea7c73e41c7200a096fc55066b differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/97c09f9fe29b0e82fd30cbd618a11353 b/Unity/Better Tracking/Library/Artifacts/97/97c09f9fe29b0e82fd30cbd618a11353 new file mode 100644 index 0000000..d30e81b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/97c09f9fe29b0e82fd30cbd618a11353 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/97d3874634d9eb5c5df8814fecc899c1 b/Unity/Better Tracking/Library/Artifacts/97/97d3874634d9eb5c5df8814fecc899c1 new file mode 100644 index 0000000..c856f11 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/97d3874634d9eb5c5df8814fecc899c1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/97/97e5b3909c72d2b1c1b040cef11ad515 b/Unity/Better Tracking/Library/Artifacts/97/97e5b3909c72d2b1c1b040cef11ad515 new file mode 100644 index 0000000..f8c463d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/97/97e5b3909c72d2b1c1b040cef11ad515 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/9818b4ff0eeebaf15690978049a89d71 b/Unity/Better Tracking/Library/Artifacts/98/9818b4ff0eeebaf15690978049a89d71 new file mode 100644 index 0000000..b5c3b3d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/9818b4ff0eeebaf15690978049a89d71 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/98639cf4295110abb3238450a832a233 b/Unity/Better Tracking/Library/Artifacts/98/98639cf4295110abb3238450a832a233 new file mode 100644 index 0000000..a9c6a13 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/98639cf4295110abb3238450a832a233 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/987175f8adb19cdf53c64ca4cf01c09c b/Unity/Better Tracking/Library/Artifacts/98/987175f8adb19cdf53c64ca4cf01c09c new file mode 100644 index 0000000..76dcf9d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/987175f8adb19cdf53c64ca4cf01c09c differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/988637d7289962bf7f5cb5c024c85af8 b/Unity/Better Tracking/Library/Artifacts/98/988637d7289962bf7f5cb5c024c85af8 new file mode 100644 index 0000000..6788bfb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/988637d7289962bf7f5cb5c024c85af8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/98a42c38b4ff8fbb5d9e7c7d98a0e225 b/Unity/Better Tracking/Library/Artifacts/98/98a42c38b4ff8fbb5d9e7c7d98a0e225 new file mode 100644 index 0000000..22eba9f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/98a42c38b4ff8fbb5d9e7c7d98a0e225 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/98af891a2a99faa062c4035f46d5d994 b/Unity/Better Tracking/Library/Artifacts/98/98af891a2a99faa062c4035f46d5d994 new file mode 100644 index 0000000..ec0a06f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/98af891a2a99faa062c4035f46d5d994 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/98ba217eb2bf1d1d8fc414dbf6c53f88 b/Unity/Better Tracking/Library/Artifacts/98/98ba217eb2bf1d1d8fc414dbf6c53f88 new file mode 100644 index 0000000..94342eb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/98ba217eb2bf1d1d8fc414dbf6c53f88 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/98d351ccdcafccec0cfcdd0e41c2d727 b/Unity/Better Tracking/Library/Artifacts/98/98d351ccdcafccec0cfcdd0e41c2d727 new file mode 100644 index 0000000..6d640c2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/98d351ccdcafccec0cfcdd0e41c2d727 differ diff --git a/Unity/Better Tracking/Library/Artifacts/98/98f6f256e9fc73ce39477655a3d67d32 b/Unity/Better Tracking/Library/Artifacts/98/98f6f256e9fc73ce39477655a3d67d32 new file mode 100644 index 0000000..78672e9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/98/98f6f256e9fc73ce39477655a3d67d32 differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/9916fb5b56e7d3251bab0e71136ea310 b/Unity/Better Tracking/Library/Artifacts/99/9916fb5b56e7d3251bab0e71136ea310 new file mode 100644 index 0000000..08862d3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/9916fb5b56e7d3251bab0e71136ea310 differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/99184534f584bb58ab0ad3b6d3c5273e b/Unity/Better Tracking/Library/Artifacts/99/99184534f584bb58ab0ad3b6d3c5273e new file mode 100644 index 0000000..762c7f3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/99184534f584bb58ab0ad3b6d3c5273e differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/994027d94a86e7d78f392473002ad8ed b/Unity/Better Tracking/Library/Artifacts/99/994027d94a86e7d78f392473002ad8ed new file mode 100644 index 0000000..c7a09c8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/994027d94a86e7d78f392473002ad8ed differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 b/Unity/Better Tracking/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 new file mode 100644 index 0000000..50551e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/999cacb2f6d0854d22fadc90a50cafd6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/99be140448f47c4a3ba4e684b187e717 b/Unity/Better Tracking/Library/Artifacts/99/99be140448f47c4a3ba4e684b187e717 new file mode 100644 index 0000000..cae01d7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/99be140448f47c4a3ba4e684b187e717 differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/99e039e1fbcb37e3eea731146e4b0aad b/Unity/Better Tracking/Library/Artifacts/99/99e039e1fbcb37e3eea731146e4b0aad new file mode 100644 index 0000000..08fc598 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/99e039e1fbcb37e3eea731146e4b0aad differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/99e72d47d476780e9a05587c7e691004 b/Unity/Better Tracking/Library/Artifacts/99/99e72d47d476780e9a05587c7e691004 new file mode 100644 index 0000000..3959780 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/99e72d47d476780e9a05587c7e691004 differ diff --git a/Unity/Better Tracking/Library/Artifacts/99/99eafeff23bfdca484eae54ff8c5fba2 b/Unity/Better Tracking/Library/Artifacts/99/99eafeff23bfdca484eae54ff8c5fba2 new file mode 100644 index 0000000..42b88c4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/99/99eafeff23bfdca484eae54ff8c5fba2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9a/9a71f3e4be191f0d249ea6986eb55ff3 b/Unity/Better Tracking/Library/Artifacts/9a/9a71f3e4be191f0d249ea6986eb55ff3 new file mode 100644 index 0000000..01d13a1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9a/9a71f3e4be191f0d249ea6986eb55ff3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9a/9ab73eaaeb40e930f405d2b6e60614e8 b/Unity/Better Tracking/Library/Artifacts/9a/9ab73eaaeb40e930f405d2b6e60614e8 new file mode 100644 index 0000000..fd4bc28 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9a/9ab73eaaeb40e930f405d2b6e60614e8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9b/9b14eac2329257b5a9de894b1248a7f0 b/Unity/Better Tracking/Library/Artifacts/9b/9b14eac2329257b5a9de894b1248a7f0 new file mode 100644 index 0000000..16ec874 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9b/9b14eac2329257b5a9de894b1248a7f0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9b/9b2297da4a938d0226a4b0e71f6f317f b/Unity/Better Tracking/Library/Artifacts/9b/9b2297da4a938d0226a4b0e71f6f317f new file mode 100644 index 0000000..fd82186 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9b/9b2297da4a938d0226a4b0e71f6f317f differ diff --git a/Unity/Better Tracking/Library/Artifacts/9b/9b6830d74c467c3f19ab3eebcf21434b b/Unity/Better Tracking/Library/Artifacts/9b/9b6830d74c467c3f19ab3eebcf21434b new file mode 100644 index 0000000..40a0034 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9b/9b6830d74c467c3f19ab3eebcf21434b differ diff --git a/Unity/Better Tracking/Library/Artifacts/9b/9b9df5ffb918ee5313ecec315c80aa85 b/Unity/Better Tracking/Library/Artifacts/9b/9b9df5ffb918ee5313ecec315c80aa85 new file mode 100644 index 0000000..1e2b526 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9b/9b9df5ffb918ee5313ecec315c80aa85 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f b/Unity/Better Tracking/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f new file mode 100644 index 0000000..9353a9d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9b/9bb61e4064cce20fff242d8719ec225f differ diff --git a/Unity/Better Tracking/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 b/Unity/Better Tracking/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 new file mode 100644 index 0000000..07874f8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9c/9c9f84d493c412ccd7f753ed29b2e4b9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9d11493bc24caa5861a0d7ad42aa2aca b/Unity/Better Tracking/Library/Artifacts/9d/9d11493bc24caa5861a0d7ad42aa2aca new file mode 100644 index 0000000..d0817fd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9d11493bc24caa5861a0d7ad42aa2aca differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9d35d859b67bcc4f93b34f46d731cc8b b/Unity/Better Tracking/Library/Artifacts/9d/9d35d859b67bcc4f93b34f46d731cc8b new file mode 100644 index 0000000..f0c77e6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9d35d859b67bcc4f93b34f46d731cc8b differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9d45ef70c73438796e6a093f114b4a99 b/Unity/Better Tracking/Library/Artifacts/9d/9d45ef70c73438796e6a093f114b4a99 new file mode 100644 index 0000000..41b5dbf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9d45ef70c73438796e6a093f114b4a99 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9d6476ec95d9a8f705a2951abec67701 b/Unity/Better Tracking/Library/Artifacts/9d/9d6476ec95d9a8f705a2951abec67701 new file mode 100644 index 0000000..c8e22ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9d6476ec95d9a8f705a2951abec67701 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9d73fe2fc98d31c4ce16260fed09bdc7 b/Unity/Better Tracking/Library/Artifacts/9d/9d73fe2fc98d31c4ce16260fed09bdc7 new file mode 100644 index 0000000..5e28900 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9d73fe2fc98d31c4ce16260fed09bdc7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9d918f25a7302ce017899748cc36d203 b/Unity/Better Tracking/Library/Artifacts/9d/9d918f25a7302ce017899748cc36d203 new file mode 100644 index 0000000..b0ea63c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9d918f25a7302ce017899748cc36d203 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9dcbdb21fcfa197ff47e21b5a596f609 b/Unity/Better Tracking/Library/Artifacts/9d/9dcbdb21fcfa197ff47e21b5a596f609 new file mode 100644 index 0000000..5f2f637 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9dcbdb21fcfa197ff47e21b5a596f609 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9d/9de56b662333fa2e30152efc482fd557 b/Unity/Better Tracking/Library/Artifacts/9d/9de56b662333fa2e30152efc482fd557 new file mode 100644 index 0000000..69b53f9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9d/9de56b662333fa2e30152efc482fd557 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9e/9e0abd968b10264de0a15a38cadee569 b/Unity/Better Tracking/Library/Artifacts/9e/9e0abd968b10264de0a15a38cadee569 new file mode 100644 index 0000000..77b195a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9e/9e0abd968b10264de0a15a38cadee569 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9e/9e653e2bca432a807bc93f2e25ef287b b/Unity/Better Tracking/Library/Artifacts/9e/9e653e2bca432a807bc93f2e25ef287b new file mode 100644 index 0000000..31d6cf5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9e/9e653e2bca432a807bc93f2e25ef287b differ diff --git a/Unity/Better Tracking/Library/Artifacts/9e/9e8e9d16fe5b5d00b3013f51184b8f96 b/Unity/Better Tracking/Library/Artifacts/9e/9e8e9d16fe5b5d00b3013f51184b8f96 new file mode 100644 index 0000000..cf17952 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9e/9e8e9d16fe5b5d00b3013f51184b8f96 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9e/9ebc2f5b0593e9fe38ac22c5480a271d b/Unity/Better Tracking/Library/Artifacts/9e/9ebc2f5b0593e9fe38ac22c5480a271d new file mode 100644 index 0000000..4cbff71 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9e/9ebc2f5b0593e9fe38ac22c5480a271d differ diff --git a/Unity/Better Tracking/Library/Artifacts/9e/9ec3ce3fb21af6eed51184ca78304adb b/Unity/Better Tracking/Library/Artifacts/9e/9ec3ce3fb21af6eed51184ca78304adb new file mode 100644 index 0000000..3794215 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9e/9ec3ce3fb21af6eed51184ca78304adb differ diff --git a/Unity/Better Tracking/Library/Artifacts/9f/9f105107d617013ac6533e934ee9fbe6 b/Unity/Better Tracking/Library/Artifacts/9f/9f105107d617013ac6533e934ee9fbe6 new file mode 100644 index 0000000..2f17462 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9f/9f105107d617013ac6533e934ee9fbe6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9f/9f527b562d75c627731fe37eeb799921 b/Unity/Better Tracking/Library/Artifacts/9f/9f527b562d75c627731fe37eeb799921 new file mode 100644 index 0000000..30b3d67 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9f/9f527b562d75c627731fe37eeb799921 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9f/9fd8cffee733673cfd3b589862819789 b/Unity/Better Tracking/Library/Artifacts/9f/9fd8cffee733673cfd3b589862819789 new file mode 100644 index 0000000..e7f5727 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9f/9fd8cffee733673cfd3b589862819789 differ diff --git a/Unity/Better Tracking/Library/Artifacts/9f/9ffa5e41b8acfa13ff956367a546389b b/Unity/Better Tracking/Library/Artifacts/9f/9ffa5e41b8acfa13ff956367a546389b new file mode 100644 index 0000000..f170c04 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/9f/9ffa5e41b8acfa13ff956367a546389b differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a0061d7cf3f8708f86cc3ed9e9a05a0f b/Unity/Better Tracking/Library/Artifacts/a0/a0061d7cf3f8708f86cc3ed9e9a05a0f new file mode 100644 index 0000000..1d1bf67 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a0061d7cf3f8708f86cc3ed9e9a05a0f differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a0079e4d5f74ae8f9a8ea89e6bbc2f88 b/Unity/Better Tracking/Library/Artifacts/a0/a0079e4d5f74ae8f9a8ea89e6bbc2f88 new file mode 100644 index 0000000..89b4079 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a0079e4d5f74ae8f9a8ea89e6bbc2f88 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a04c3a7f91d3a06d1bc5645118419407 b/Unity/Better Tracking/Library/Artifacts/a0/a04c3a7f91d3a06d1bc5645118419407 new file mode 100644 index 0000000..b13a978 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a04c3a7f91d3a06d1bc5645118419407 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa b/Unity/Better Tracking/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa new file mode 100644 index 0000000..d42e38f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a055a1e3667d97d0da344d7bd76081aa differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a06386553a46c1f7a146be3f6f234cac b/Unity/Better Tracking/Library/Artifacts/a0/a06386553a46c1f7a146be3f6f234cac new file mode 100644 index 0000000..03d63bc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a06386553a46c1f7a146be3f6f234cac differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a06d89b21c6be064255adb8ab55ba52b b/Unity/Better Tracking/Library/Artifacts/a0/a06d89b21c6be064255adb8ab55ba52b new file mode 100644 index 0000000..ef601f1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a06d89b21c6be064255adb8ab55ba52b differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a070dc0937b59f83a202051931ebe7a2 b/Unity/Better Tracking/Library/Artifacts/a0/a070dc0937b59f83a202051931ebe7a2 new file mode 100644 index 0000000..672f265 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a070dc0937b59f83a202051931ebe7a2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a073ec2bd32be80afbfde42379e629bf b/Unity/Better Tracking/Library/Artifacts/a0/a073ec2bd32be80afbfde42379e629bf new file mode 100644 index 0000000..62305e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a073ec2bd32be80afbfde42379e629bf differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a0e182f00772ecec4ce3786370c4328f b/Unity/Better Tracking/Library/Artifacts/a0/a0e182f00772ecec4ce3786370c4328f new file mode 100644 index 0000000..71577fb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a0e182f00772ecec4ce3786370c4328f differ diff --git a/Unity/Better Tracking/Library/Artifacts/a0/a0ecb55f48eee15083a479278954a87b b/Unity/Better Tracking/Library/Artifacts/a0/a0ecb55f48eee15083a479278954a87b new file mode 100644 index 0000000..e74ea0a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a0/a0ecb55f48eee15083a479278954a87b differ diff --git a/Unity/Better Tracking/Library/Artifacts/a1/a1402d9e7f3ffa37eb6990fe599a5e01 b/Unity/Better Tracking/Library/Artifacts/a1/a1402d9e7f3ffa37eb6990fe599a5e01 new file mode 100644 index 0000000..0e55c50 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a1/a1402d9e7f3ffa37eb6990fe599a5e01 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a1/a155b7cae4c123e554e50ac5a2283380 b/Unity/Better Tracking/Library/Artifacts/a1/a155b7cae4c123e554e50ac5a2283380 new file mode 100644 index 0000000..373249a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a1/a155b7cae4c123e554e50ac5a2283380 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a1/a1894fe966b59782fe17c1eddf5eb4b1 b/Unity/Better Tracking/Library/Artifacts/a1/a1894fe966b59782fe17c1eddf5eb4b1 new file mode 100644 index 0000000..49779b1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a1/a1894fe966b59782fe17c1eddf5eb4b1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a1/a18e47e7972c0abe662b3f58cf5bce48 b/Unity/Better Tracking/Library/Artifacts/a1/a18e47e7972c0abe662b3f58cf5bce48 new file mode 100644 index 0000000..a92bd52 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a1/a18e47e7972c0abe662b3f58cf5bce48 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a1/a1abd34877b51dddcde26739f9500d80 b/Unity/Better Tracking/Library/Artifacts/a1/a1abd34877b51dddcde26739f9500d80 new file mode 100644 index 0000000..d6104fc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a1/a1abd34877b51dddcde26739f9500d80 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a2/a20ca5d81229b2fffac2a69c673cf2cc b/Unity/Better Tracking/Library/Artifacts/a2/a20ca5d81229b2fffac2a69c673cf2cc new file mode 100644 index 0000000..21024dd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a2/a20ca5d81229b2fffac2a69c673cf2cc differ diff --git a/Unity/Better Tracking/Library/Artifacts/a2/a23f7f0a0cf2dac466dacf73fbe97df3 b/Unity/Better Tracking/Library/Artifacts/a2/a23f7f0a0cf2dac466dacf73fbe97df3 new file mode 100644 index 0000000..051ff60 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a2/a23f7f0a0cf2dac466dacf73fbe97df3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a2/a2f0b79bea832a1374ccd6f56ead2758 b/Unity/Better Tracking/Library/Artifacts/a2/a2f0b79bea832a1374ccd6f56ead2758 new file mode 100644 index 0000000..9ef2490 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a2/a2f0b79bea832a1374ccd6f56ead2758 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a2/a2fceb594a516653ee741de092c71227 b/Unity/Better Tracking/Library/Artifacts/a2/a2fceb594a516653ee741de092c71227 new file mode 100644 index 0000000..fee1d5b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a2/a2fceb594a516653ee741de092c71227 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a3/a35830f4fcbb22b5d5022fa04a72b251 b/Unity/Better Tracking/Library/Artifacts/a3/a35830f4fcbb22b5d5022fa04a72b251 new file mode 100644 index 0000000..d33a402 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a3/a35830f4fcbb22b5d5022fa04a72b251 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a3/a3ce0c64adbf2646033c29af0dd2fa23 b/Unity/Better Tracking/Library/Artifacts/a3/a3ce0c64adbf2646033c29af0dd2fa23 new file mode 100644 index 0000000..21f5917 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a3/a3ce0c64adbf2646033c29af0dd2fa23 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a4/a44621c4540be8dda86569952b0f7078 b/Unity/Better Tracking/Library/Artifacts/a4/a44621c4540be8dda86569952b0f7078 new file mode 100644 index 0000000..10d6388 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a4/a44621c4540be8dda86569952b0f7078 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a4/a44763b1a2a83b9f5ab6378e3bf97c24 b/Unity/Better Tracking/Library/Artifacts/a4/a44763b1a2a83b9f5ab6378e3bf97c24 new file mode 100644 index 0000000..bc7c1e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a4/a44763b1a2a83b9f5ab6378e3bf97c24 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a4/a4a435129929507468eaac029e20c142 b/Unity/Better Tracking/Library/Artifacts/a4/a4a435129929507468eaac029e20c142 new file mode 100644 index 0000000..a8ea597 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a4/a4a435129929507468eaac029e20c142 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a4/a4cbdd43496df1a04b25bae1affb1e3b b/Unity/Better Tracking/Library/Artifacts/a4/a4cbdd43496df1a04b25bae1affb1e3b new file mode 100644 index 0000000..2f16b91 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a4/a4cbdd43496df1a04b25bae1affb1e3b differ diff --git a/Unity/Better Tracking/Library/Artifacts/a4/a4ee92c6d19ae49445b2cca987894671 b/Unity/Better Tracking/Library/Artifacts/a4/a4ee92c6d19ae49445b2cca987894671 new file mode 100644 index 0000000..b6e4222 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a4/a4ee92c6d19ae49445b2cca987894671 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a5/a51212cb34bbb91aef0d2c7c93624747 b/Unity/Better Tracking/Library/Artifacts/a5/a51212cb34bbb91aef0d2c7c93624747 new file mode 100644 index 0000000..2381d0e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a5/a51212cb34bbb91aef0d2c7c93624747 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a5/a51912fb4759a95bb6b05814cdea8b95 b/Unity/Better Tracking/Library/Artifacts/a5/a51912fb4759a95bb6b05814cdea8b95 new file mode 100644 index 0000000..bc92abf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a5/a51912fb4759a95bb6b05814cdea8b95 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a5/a5390d166f0ea589238d10a9c9be8989 b/Unity/Better Tracking/Library/Artifacts/a5/a5390d166f0ea589238d10a9c9be8989 new file mode 100644 index 0000000..df826ea Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a5/a5390d166f0ea589238d10a9c9be8989 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a5/a5707e088d10f5e6d07b8b967289bce8 b/Unity/Better Tracking/Library/Artifacts/a5/a5707e088d10f5e6d07b8b967289bce8 new file mode 100644 index 0000000..24795ed Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a5/a5707e088d10f5e6d07b8b967289bce8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a5/a57f36ad92a8fc80e048809278c15b48 b/Unity/Better Tracking/Library/Artifacts/a5/a57f36ad92a8fc80e048809278c15b48 new file mode 100644 index 0000000..fac50a1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a5/a57f36ad92a8fc80e048809278c15b48 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a5/a5d5b60388bd0bf455c8ffdb1a5beedc b/Unity/Better Tracking/Library/Artifacts/a5/a5d5b60388bd0bf455c8ffdb1a5beedc new file mode 100644 index 0000000..a5d6758 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a5/a5d5b60388bd0bf455c8ffdb1a5beedc differ diff --git a/Unity/Better Tracking/Library/Artifacts/a5/a5d6a14b687ff79b57c547dcda8adce3 b/Unity/Better Tracking/Library/Artifacts/a5/a5d6a14b687ff79b57c547dcda8adce3 new file mode 100644 index 0000000..3529289 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a5/a5d6a14b687ff79b57c547dcda8adce3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a6/a629d02023e549996eb13f0f000400f4 b/Unity/Better Tracking/Library/Artifacts/a6/a629d02023e549996eb13f0f000400f4 new file mode 100644 index 0000000..cbc6ecb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a6/a629d02023e549996eb13f0f000400f4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a6/a6e04fbd38c5db13eb55adc5de1567b0 b/Unity/Better Tracking/Library/Artifacts/a6/a6e04fbd38c5db13eb55adc5de1567b0 new file mode 100644 index 0000000..4c84e37 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a6/a6e04fbd38c5db13eb55adc5de1567b0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a6/a6e8ecb5114957f91746d41b336fbf02 b/Unity/Better Tracking/Library/Artifacts/a6/a6e8ecb5114957f91746d41b336fbf02 new file mode 100644 index 0000000..f2ca991 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a6/a6e8ecb5114957f91746d41b336fbf02 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b b/Unity/Better Tracking/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b new file mode 100644 index 0000000..198cc8c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a7/a7106456c6eec96fbd8b1e9d903e603b differ diff --git a/Unity/Better Tracking/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 b/Unity/Better Tracking/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 new file mode 100644 index 0000000..93e3e48 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a7/a73257752b3bb8d7ce052b37b4fac1d3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a7/a7461ff5642d4179f2ba6fc03081c134 b/Unity/Better Tracking/Library/Artifacts/a7/a7461ff5642d4179f2ba6fc03081c134 new file mode 100644 index 0000000..cd0fb62 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a7/a7461ff5642d4179f2ba6fc03081c134 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a8/a80fb9168a8dab3ec799645c2aa6061e b/Unity/Better Tracking/Library/Artifacts/a8/a80fb9168a8dab3ec799645c2aa6061e new file mode 100644 index 0000000..d7ab454 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a8/a80fb9168a8dab3ec799645c2aa6061e differ diff --git a/Unity/Better Tracking/Library/Artifacts/a8/a82742a314390886ded571e0b492755f b/Unity/Better Tracking/Library/Artifacts/a8/a82742a314390886ded571e0b492755f new file mode 100644 index 0000000..92a78e2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a8/a82742a314390886ded571e0b492755f differ diff --git a/Unity/Better Tracking/Library/Artifacts/a8/a827509afe97e5a12a08798e3c783f82 b/Unity/Better Tracking/Library/Artifacts/a8/a827509afe97e5a12a08798e3c783f82 new file mode 100644 index 0000000..27023ae Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a8/a827509afe97e5a12a08798e3c783f82 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a8/a8b83dade14a4e53f7e7940322c00859 b/Unity/Better Tracking/Library/Artifacts/a8/a8b83dade14a4e53f7e7940322c00859 new file mode 100644 index 0000000..bff009f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a8/a8b83dade14a4e53f7e7940322c00859 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a8/a8cbcf0e4e7976404b368b78fdca1516 b/Unity/Better Tracking/Library/Artifacts/a8/a8cbcf0e4e7976404b368b78fdca1516 new file mode 100644 index 0000000..3f7e0ee Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a8/a8cbcf0e4e7976404b368b78fdca1516 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a8/a8e56e91ddf326b21bcb2393aada4a9a b/Unity/Better Tracking/Library/Artifacts/a8/a8e56e91ddf326b21bcb2393aada4a9a new file mode 100644 index 0000000..14066a3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a8/a8e56e91ddf326b21bcb2393aada4a9a differ diff --git a/Unity/Better Tracking/Library/Artifacts/a9/a930ddf3ea3d57b8ee8dcac323c4e774 b/Unity/Better Tracking/Library/Artifacts/a9/a930ddf3ea3d57b8ee8dcac323c4e774 new file mode 100644 index 0000000..4fd1001 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a9/a930ddf3ea3d57b8ee8dcac323c4e774 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a9/a99b174d64feffb6cca59a7a6fb183a7 b/Unity/Better Tracking/Library/Artifacts/a9/a99b174d64feffb6cca59a7a6fb183a7 new file mode 100644 index 0000000..89e2033 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a9/a99b174d64feffb6cca59a7a6fb183a7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/a9/a9cffd7d0ecd48040d0a3becce24a283 b/Unity/Better Tracking/Library/Artifacts/a9/a9cffd7d0ecd48040d0a3becce24a283 new file mode 100644 index 0000000..3213cb8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/a9/a9cffd7d0ecd48040d0a3becce24a283 differ diff --git a/Unity/Better Tracking/Library/Artifacts/aa/aa3380c004c3cab176f1e668bc0289bf b/Unity/Better Tracking/Library/Artifacts/aa/aa3380c004c3cab176f1e668bc0289bf new file mode 100644 index 0000000..156732c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/aa/aa3380c004c3cab176f1e668bc0289bf differ diff --git a/Unity/Better Tracking/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 b/Unity/Better Tracking/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 new file mode 100644 index 0000000..f8e19c8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/aa/aa648354bba1a81903f335aacb48eb40 differ diff --git a/Unity/Better Tracking/Library/Artifacts/aa/aab3cdc42f06f9d7f37f7be563a1c7aa b/Unity/Better Tracking/Library/Artifacts/aa/aab3cdc42f06f9d7f37f7be563a1c7aa new file mode 100644 index 0000000..8ede953 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/aa/aab3cdc42f06f9d7f37f7be563a1c7aa differ diff --git a/Unity/Better Tracking/Library/Artifacts/ab/ab000a63929eb66bf30c642648fa8168 b/Unity/Better Tracking/Library/Artifacts/ab/ab000a63929eb66bf30c642648fa8168 new file mode 100644 index 0000000..ab8872f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ab/ab000a63929eb66bf30c642648fa8168 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ab/ab302bc215cfc8c6470faae5e322f7f8 b/Unity/Better Tracking/Library/Artifacts/ab/ab302bc215cfc8c6470faae5e322f7f8 new file mode 100644 index 0000000..ca3482c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ab/ab302bc215cfc8c6470faae5e322f7f8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ab/ab3d4e09501a9dad79e1f11bdaf06956 b/Unity/Better Tracking/Library/Artifacts/ab/ab3d4e09501a9dad79e1f11bdaf06956 new file mode 100644 index 0000000..32dcae3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ab/ab3d4e09501a9dad79e1f11bdaf06956 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ab/abb669f817cb83276476feb9791a23ea b/Unity/Better Tracking/Library/Artifacts/ab/abb669f817cb83276476feb9791a23ea new file mode 100644 index 0000000..0c21502 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ab/abb669f817cb83276476feb9791a23ea differ diff --git a/Unity/Better Tracking/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b b/Unity/Better Tracking/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b new file mode 100644 index 0000000..5ad8c1f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ab/abf1c012ec71f544a78e5cf0144d9d2b differ diff --git a/Unity/Better Tracking/Library/Artifacts/ab/abf7cdf59fdd5715ea72e547f3c11c59 b/Unity/Better Tracking/Library/Artifacts/ab/abf7cdf59fdd5715ea72e547f3c11c59 new file mode 100644 index 0000000..492c7d8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ab/abf7cdf59fdd5715ea72e547f3c11c59 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c b/Unity/Better Tracking/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c new file mode 100644 index 0000000..8d1da09 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ab/abfe0ca15be088b9dcfe631fe450304c differ diff --git a/Unity/Better Tracking/Library/Artifacts/ac/ac15b5a5bb9aa68bca51d3f7545c5576 b/Unity/Better Tracking/Library/Artifacts/ac/ac15b5a5bb9aa68bca51d3f7545c5576 new file mode 100644 index 0000000..96b4bf1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ac/ac15b5a5bb9aa68bca51d3f7545c5576 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ac/ac2701d5b24f711825345e44ee881c36 b/Unity/Better Tracking/Library/Artifacts/ac/ac2701d5b24f711825345e44ee881c36 new file mode 100644 index 0000000..ff10e1c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ac/ac2701d5b24f711825345e44ee881c36 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ac/ac51a442e4b31add9a0229b60566c429 b/Unity/Better Tracking/Library/Artifacts/ac/ac51a442e4b31add9a0229b60566c429 new file mode 100644 index 0000000..b5e9c62 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ac/ac51a442e4b31add9a0229b60566c429 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ac/ac950c4340b823966c080bdc031309bc b/Unity/Better Tracking/Library/Artifacts/ac/ac950c4340b823966c080bdc031309bc new file mode 100644 index 0000000..39a8121 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ac/ac950c4340b823966c080bdc031309bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/ac/acd4160567e9b0e088272ecf3a80e405 b/Unity/Better Tracking/Library/Artifacts/ac/acd4160567e9b0e088272ecf3a80e405 new file mode 100644 index 0000000..2ccc5b0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ac/acd4160567e9b0e088272ecf3a80e405 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ac/acd7e367cbbca9cac6219ff8257a2a15 b/Unity/Better Tracking/Library/Artifacts/ac/acd7e367cbbca9cac6219ff8257a2a15 new file mode 100644 index 0000000..93bfe4a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ac/acd7e367cbbca9cac6219ff8257a2a15 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ac/acf5fe8a4778f11a40c449d73e923afd b/Unity/Better Tracking/Library/Artifacts/ac/acf5fe8a4778f11a40c449d73e923afd new file mode 100644 index 0000000..1948a16 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ac/acf5fe8a4778f11a40c449d73e923afd differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/ad1ec128243a9893e651f5e47b978490 b/Unity/Better Tracking/Library/Artifacts/ad/ad1ec128243a9893e651f5e47b978490 new file mode 100644 index 0000000..5fa2140 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/ad1ec128243a9893e651f5e47b978490 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/ad1f97f7322482ccd947ca14bea53fbf b/Unity/Better Tracking/Library/Artifacts/ad/ad1f97f7322482ccd947ca14bea53fbf new file mode 100644 index 0000000..83a2bf8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/ad1f97f7322482ccd947ca14bea53fbf differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee b/Unity/Better Tracking/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee new file mode 100644 index 0000000..30d7a97 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/ad40db2c3f251c401a10af5340bb1eee differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/ad6aef83382d5449292e12c7f30c2ff5 b/Unity/Better Tracking/Library/Artifacts/ad/ad6aef83382d5449292e12c7f30c2ff5 new file mode 100644 index 0000000..ac77dd3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/ad6aef83382d5449292e12c7f30c2ff5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/ad6cfd9745ec2f30ebfbb5e2c84a8b74 b/Unity/Better Tracking/Library/Artifacts/ad/ad6cfd9745ec2f30ebfbb5e2c84a8b74 new file mode 100644 index 0000000..565ed5c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/ad6cfd9745ec2f30ebfbb5e2c84a8b74 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/ad783741fa69773267a4e37c0185f38b b/Unity/Better Tracking/Library/Artifacts/ad/ad783741fa69773267a4e37c0185f38b new file mode 100644 index 0000000..4a8c5d3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/ad783741fa69773267a4e37c0185f38b differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/adabc4e650ab5fefd4d346c67f5fe17e b/Unity/Better Tracking/Library/Artifacts/ad/adabc4e650ab5fefd4d346c67f5fe17e new file mode 100644 index 0000000..a5a16f4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/adabc4e650ab5fefd4d346c67f5fe17e differ diff --git a/Unity/Better Tracking/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b b/Unity/Better Tracking/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b new file mode 100644 index 0000000..6db2149 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ad/add3807966f73f68a10333821d37c06b differ diff --git a/Unity/Better Tracking/Library/Artifacts/ae/ae25e5e4ac9a562a93d7b8f1e294c651 b/Unity/Better Tracking/Library/Artifacts/ae/ae25e5e4ac9a562a93d7b8f1e294c651 new file mode 100644 index 0000000..2b53a02 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ae/ae25e5e4ac9a562a93d7b8f1e294c651 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f b/Unity/Better Tracking/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f new file mode 100644 index 0000000..46e2da4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ae/ae33e47ca2c8247394a6fbf66585009f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ae/ae9406e0b1d315321b51a38562eaea2a b/Unity/Better Tracking/Library/Artifacts/ae/ae9406e0b1d315321b51a38562eaea2a new file mode 100644 index 0000000..2787885 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ae/ae9406e0b1d315321b51a38562eaea2a differ diff --git a/Unity/Better Tracking/Library/Artifacts/ae/aefe94862bca757a83e7b7903e75dc29 b/Unity/Better Tracking/Library/Artifacts/ae/aefe94862bca757a83e7b7903e75dc29 new file mode 100644 index 0000000..559a883 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ae/aefe94862bca757a83e7b7903e75dc29 differ diff --git a/Unity/Better Tracking/Library/Artifacts/af/af00b1b1537251b5fab1fc082757a713 b/Unity/Better Tracking/Library/Artifacts/af/af00b1b1537251b5fab1fc082757a713 new file mode 100644 index 0000000..6f482c8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/af/af00b1b1537251b5fab1fc082757a713 differ diff --git a/Unity/Better Tracking/Library/Artifacts/af/af1664972f805901db2aac617a25f297 b/Unity/Better Tracking/Library/Artifacts/af/af1664972f805901db2aac617a25f297 new file mode 100644 index 0000000..f5f7e35 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/af/af1664972f805901db2aac617a25f297 differ diff --git a/Unity/Better Tracking/Library/Artifacts/af/af33654e5bc02ce80a37c2d07f9a3511 b/Unity/Better Tracking/Library/Artifacts/af/af33654e5bc02ce80a37c2d07f9a3511 new file mode 100644 index 0000000..ccf843b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/af/af33654e5bc02ce80a37c2d07f9a3511 differ diff --git a/Unity/Better Tracking/Library/Artifacts/af/af69867653a362a14d1f7035499c3f00 b/Unity/Better Tracking/Library/Artifacts/af/af69867653a362a14d1f7035499c3f00 new file mode 100644 index 0000000..670e767 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/af/af69867653a362a14d1f7035499c3f00 differ diff --git a/Unity/Better Tracking/Library/Artifacts/af/af7ae8bcbaade3edbed4fb651613cf2f b/Unity/Better Tracking/Library/Artifacts/af/af7ae8bcbaade3edbed4fb651613cf2f new file mode 100644 index 0000000..c502746 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/af/af7ae8bcbaade3edbed4fb651613cf2f differ diff --git a/Unity/Better Tracking/Library/Artifacts/af/afbdeea0ac48b38933351dc7005fbbc7 b/Unity/Better Tracking/Library/Artifacts/af/afbdeea0ac48b38933351dc7005fbbc7 new file mode 100644 index 0000000..02c1edb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/af/afbdeea0ac48b38933351dc7005fbbc7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b0/b00f7d88863ceb9c3653c79901f6984e b/Unity/Better Tracking/Library/Artifacts/b0/b00f7d88863ceb9c3653c79901f6984e new file mode 100644 index 0000000..7370e59 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b0/b00f7d88863ceb9c3653c79901f6984e differ diff --git a/Unity/Better Tracking/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be b/Unity/Better Tracking/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be new file mode 100644 index 0000000..10950b9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b0/b066bea681dce09ce59f12c41a68c8be differ diff --git a/Unity/Better Tracking/Library/Artifacts/b0/b077abe19f0d1fee920f38a6c7a59aa3 b/Unity/Better Tracking/Library/Artifacts/b0/b077abe19f0d1fee920f38a6c7a59aa3 new file mode 100644 index 0000000..d155588 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b0/b077abe19f0d1fee920f38a6c7a59aa3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b0/b0d38872dd9cc5c12e662a1ca36d0fff b/Unity/Better Tracking/Library/Artifacts/b0/b0d38872dd9cc5c12e662a1ca36d0fff new file mode 100644 index 0000000..5953a0f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b0/b0d38872dd9cc5c12e662a1ca36d0fff differ diff --git a/Unity/Better Tracking/Library/Artifacts/b0/b0e855a0df5ea9a301cf9f8db71df032 b/Unity/Better Tracking/Library/Artifacts/b0/b0e855a0df5ea9a301cf9f8db71df032 new file mode 100644 index 0000000..986efa3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b0/b0e855a0df5ea9a301cf9f8db71df032 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b1/b1122ba1c9318b5e646c619b1b1cb48e b/Unity/Better Tracking/Library/Artifacts/b1/b1122ba1c9318b5e646c619b1b1cb48e new file mode 100644 index 0000000..3e1504f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b1/b1122ba1c9318b5e646c619b1b1cb48e differ diff --git a/Unity/Better Tracking/Library/Artifacts/b1/b1212a927c06740246b406b51eea703c b/Unity/Better Tracking/Library/Artifacts/b1/b1212a927c06740246b406b51eea703c new file mode 100644 index 0000000..d623b56 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b1/b1212a927c06740246b406b51eea703c differ diff --git a/Unity/Better Tracking/Library/Artifacts/b1/b161b0a33cf51d1b55fa8fc4ce484b19 b/Unity/Better Tracking/Library/Artifacts/b1/b161b0a33cf51d1b55fa8fc4ce484b19 new file mode 100644 index 0000000..131f57b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b1/b161b0a33cf51d1b55fa8fc4ce484b19 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b1/b18dc81f68f72244f6b8da88f97be3b4 b/Unity/Better Tracking/Library/Artifacts/b1/b18dc81f68f72244f6b8da88f97be3b4 new file mode 100644 index 0000000..7b0d62a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b1/b18dc81f68f72244f6b8da88f97be3b4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b1/b1bea3da7c025ca8bd63f5d201ef1fab b/Unity/Better Tracking/Library/Artifacts/b1/b1bea3da7c025ca8bd63f5d201ef1fab new file mode 100644 index 0000000..bbf3bfc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b1/b1bea3da7c025ca8bd63f5d201ef1fab differ diff --git a/Unity/Better Tracking/Library/Artifacts/b1/b1c2867299ca46dc2fb3ef6fc63c2ac4 b/Unity/Better Tracking/Library/Artifacts/b1/b1c2867299ca46dc2fb3ef6fc63c2ac4 new file mode 100644 index 0000000..ba0c333 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b1/b1c2867299ca46dc2fb3ef6fc63c2ac4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b2/b20c6ad14d6b8730d973bb57d44d67b9 b/Unity/Better Tracking/Library/Artifacts/b2/b20c6ad14d6b8730d973bb57d44d67b9 new file mode 100644 index 0000000..3d5298a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b2/b20c6ad14d6b8730d973bb57d44d67b9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b2/b2b34713910c10a89b11185b607a70b1 b/Unity/Better Tracking/Library/Artifacts/b2/b2b34713910c10a89b11185b607a70b1 new file mode 100644 index 0000000..2d609a4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b2/b2b34713910c10a89b11185b607a70b1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b2/b2e497796a7f9395c5e251967606e665 b/Unity/Better Tracking/Library/Artifacts/b2/b2e497796a7f9395c5e251967606e665 new file mode 100644 index 0000000..a87842f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b2/b2e497796a7f9395c5e251967606e665 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b2/b2fe8a5631f167b1650329f8b0d6e87b b/Unity/Better Tracking/Library/Artifacts/b2/b2fe8a5631f167b1650329f8b0d6e87b new file mode 100644 index 0000000..7b85160 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b2/b2fe8a5631f167b1650329f8b0d6e87b differ diff --git a/Unity/Better Tracking/Library/Artifacts/b3/b35078818ed7657a164a1ad81f48d109 b/Unity/Better Tracking/Library/Artifacts/b3/b35078818ed7657a164a1ad81f48d109 new file mode 100644 index 0000000..9a06623 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b3/b35078818ed7657a164a1ad81f48d109 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b3/b39f8231ca4955719cf8bbfeef08815f b/Unity/Better Tracking/Library/Artifacts/b3/b39f8231ca4955719cf8bbfeef08815f new file mode 100644 index 0000000..6d46574 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b3/b39f8231ca4955719cf8bbfeef08815f differ diff --git a/Unity/Better Tracking/Library/Artifacts/b3/b3b39dc561a78c59b1c695ebfaa08e03 b/Unity/Better Tracking/Library/Artifacts/b3/b3b39dc561a78c59b1c695ebfaa08e03 new file mode 100644 index 0000000..35b9b43 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b3/b3b39dc561a78c59b1c695ebfaa08e03 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b3/b3e191b6dd13ccb591868cc1080d2b16 b/Unity/Better Tracking/Library/Artifacts/b3/b3e191b6dd13ccb591868cc1080d2b16 new file mode 100644 index 0000000..e1ba5c3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b3/b3e191b6dd13ccb591868cc1080d2b16 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b3/b3ee23112f1abd217845e5d755774d03 b/Unity/Better Tracking/Library/Artifacts/b3/b3ee23112f1abd217845e5d755774d03 new file mode 100644 index 0000000..5e3a648 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b3/b3ee23112f1abd217845e5d755774d03 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b4/b42165ea6c435f5624ad3e76e2ccf889 b/Unity/Better Tracking/Library/Artifacts/b4/b42165ea6c435f5624ad3e76e2ccf889 new file mode 100644 index 0000000..f9a7f1e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b4/b42165ea6c435f5624ad3e76e2ccf889 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b4/b4223be12f1f84ddf5e07db9922a0ab2 b/Unity/Better Tracking/Library/Artifacts/b4/b4223be12f1f84ddf5e07db9922a0ab2 new file mode 100644 index 0000000..e9d5af2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b4/b4223be12f1f84ddf5e07db9922a0ab2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b4/b495c7b52c3e0411119423454456a106 b/Unity/Better Tracking/Library/Artifacts/b4/b495c7b52c3e0411119423454456a106 new file mode 100644 index 0000000..37638a5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b4/b495c7b52c3e0411119423454456a106 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b4/b49c7a5ca5711bf3fd785acf28dbc288 b/Unity/Better Tracking/Library/Artifacts/b4/b49c7a5ca5711bf3fd785acf28dbc288 new file mode 100644 index 0000000..8f6110b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b4/b49c7a5ca5711bf3fd785acf28dbc288 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b4/b4a4ed44da98a076d1b54865d71e52ff b/Unity/Better Tracking/Library/Artifacts/b4/b4a4ed44da98a076d1b54865d71e52ff new file mode 100644 index 0000000..8422563 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b4/b4a4ed44da98a076d1b54865d71e52ff differ diff --git a/Unity/Better Tracking/Library/Artifacts/b4/b4b8013cdc3529d953524bfeec64f92c b/Unity/Better Tracking/Library/Artifacts/b4/b4b8013cdc3529d953524bfeec64f92c new file mode 100644 index 0000000..b89fb7f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b4/b4b8013cdc3529d953524bfeec64f92c differ diff --git a/Unity/Better Tracking/Library/Artifacts/b4/b4cc0a0e85509e62cfb88c609abc367b b/Unity/Better Tracking/Library/Artifacts/b4/b4cc0a0e85509e62cfb88c609abc367b new file mode 100644 index 0000000..4c68ea6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b4/b4cc0a0e85509e62cfb88c609abc367b differ diff --git a/Unity/Better Tracking/Library/Artifacts/b5/b5195f9c76b6771be0022b594af2fa1e b/Unity/Better Tracking/Library/Artifacts/b5/b5195f9c76b6771be0022b594af2fa1e new file mode 100644 index 0000000..18a5837 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b5/b5195f9c76b6771be0022b594af2fa1e differ diff --git a/Unity/Better Tracking/Library/Artifacts/b5/b53a0e650b6c0ac0bb22cd4dc7f3f7dd b/Unity/Better Tracking/Library/Artifacts/b5/b53a0e650b6c0ac0bb22cd4dc7f3f7dd new file mode 100644 index 0000000..c56a3f7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b5/b53a0e650b6c0ac0bb22cd4dc7f3f7dd differ diff --git a/Unity/Better Tracking/Library/Artifacts/b5/b54d7c9896eac7128108ab2baeef800f b/Unity/Better Tracking/Library/Artifacts/b5/b54d7c9896eac7128108ab2baeef800f new file mode 100644 index 0000000..72fbfa0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b5/b54d7c9896eac7128108ab2baeef800f differ diff --git a/Unity/Better Tracking/Library/Artifacts/b5/b56f515c3c4ea91c3f9d1c0eb5f4cb95 b/Unity/Better Tracking/Library/Artifacts/b5/b56f515c3c4ea91c3f9d1c0eb5f4cb95 new file mode 100644 index 0000000..92bfd65 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b5/b56f515c3c4ea91c3f9d1c0eb5f4cb95 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b5/b5b66e9507d03ac682f2da845cca3e88 b/Unity/Better Tracking/Library/Artifacts/b5/b5b66e9507d03ac682f2da845cca3e88 new file mode 100644 index 0000000..fd55685 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b5/b5b66e9507d03ac682f2da845cca3e88 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b5/b5c07980cb18e809975ea2172a86e698 b/Unity/Better Tracking/Library/Artifacts/b5/b5c07980cb18e809975ea2172a86e698 new file mode 100644 index 0000000..d55d753 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b5/b5c07980cb18e809975ea2172a86e698 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b5/b5d20fdaf51fce9af797101029b12e65 b/Unity/Better Tracking/Library/Artifacts/b5/b5d20fdaf51fce9af797101029b12e65 new file mode 100644 index 0000000..fa30bf6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b5/b5d20fdaf51fce9af797101029b12e65 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b610dd49556a1e10e8d7c2ab2e7e73fb b/Unity/Better Tracking/Library/Artifacts/b6/b610dd49556a1e10e8d7c2ab2e7e73fb new file mode 100644 index 0000000..78e6e6f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b610dd49556a1e10e8d7c2ab2e7e73fb differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b6406472a33be80703456a79a2afc5dc b/Unity/Better Tracking/Library/Artifacts/b6/b6406472a33be80703456a79a2afc5dc new file mode 100644 index 0000000..146d2ba Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b6406472a33be80703456a79a2afc5dc differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b67244839cce1f0bd57c043ce3ce180a b/Unity/Better Tracking/Library/Artifacts/b6/b67244839cce1f0bd57c043ce3ce180a new file mode 100644 index 0000000..567ddb3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b67244839cce1f0bd57c043ce3ce180a differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b67a8077b7943dda3c2dba1e3c8c85b1 b/Unity/Better Tracking/Library/Artifacts/b6/b67a8077b7943dda3c2dba1e3c8c85b1 new file mode 100644 index 0000000..7654eef Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b67a8077b7943dda3c2dba1e3c8c85b1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b689d264bde663c1ca47d7e37ae9ae5d b/Unity/Better Tracking/Library/Artifacts/b6/b689d264bde663c1ca47d7e37ae9ae5d new file mode 100644 index 0000000..845a1b0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b689d264bde663c1ca47d7e37ae9ae5d differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b693e83d979b0128db09361a4699ec42 b/Unity/Better Tracking/Library/Artifacts/b6/b693e83d979b0128db09361a4699ec42 new file mode 100644 index 0000000..dd29058 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b693e83d979b0128db09361a4699ec42 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b6a14e269d66b605885bd29ea01d1c91 b/Unity/Better Tracking/Library/Artifacts/b6/b6a14e269d66b605885bd29ea01d1c91 new file mode 100644 index 0000000..9ee93ba Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b6a14e269d66b605885bd29ea01d1c91 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b6/b6d64cdea4617fe0c5eb7c73fac55471 b/Unity/Better Tracking/Library/Artifacts/b6/b6d64cdea4617fe0c5eb7c73fac55471 new file mode 100644 index 0000000..ca12751 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b6/b6d64cdea4617fe0c5eb7c73fac55471 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b7/b7778121c2b5fa655d4745e725c3512d b/Unity/Better Tracking/Library/Artifacts/b7/b7778121c2b5fa655d4745e725c3512d new file mode 100644 index 0000000..5c16fd9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b7/b7778121c2b5fa655d4745e725c3512d differ diff --git a/Unity/Better Tracking/Library/Artifacts/b7/b7b380c578a9789ffe08384e2c09eaa7 b/Unity/Better Tracking/Library/Artifacts/b7/b7b380c578a9789ffe08384e2c09eaa7 new file mode 100644 index 0000000..05ddc38 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b7/b7b380c578a9789ffe08384e2c09eaa7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb b/Unity/Better Tracking/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb new file mode 100644 index 0000000..43174c3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b7/b7be73ab80deeaa6190bb0c5269a39fb differ diff --git a/Unity/Better Tracking/Library/Artifacts/b8/b800289c4da281cce99570945b8352e0 b/Unity/Better Tracking/Library/Artifacts/b8/b800289c4da281cce99570945b8352e0 new file mode 100644 index 0000000..4250744 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b8/b800289c4da281cce99570945b8352e0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b8/b8535a29372f1b40ceb8241606a92473 b/Unity/Better Tracking/Library/Artifacts/b8/b8535a29372f1b40ceb8241606a92473 new file mode 100644 index 0000000..5ae3cfe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b8/b8535a29372f1b40ceb8241606a92473 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b8/b8598edc87db3af3b740c7058a2c553c b/Unity/Better Tracking/Library/Artifacts/b8/b8598edc87db3af3b740c7058a2c553c new file mode 100644 index 0000000..b5109e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b8/b8598edc87db3af3b740c7058a2c553c differ diff --git a/Unity/Better Tracking/Library/Artifacts/b8/b87c6bb028be6c05b8788fbe0388b804 b/Unity/Better Tracking/Library/Artifacts/b8/b87c6bb028be6c05b8788fbe0388b804 new file mode 100644 index 0000000..9e5a12c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b8/b87c6bb028be6c05b8788fbe0388b804 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b8/b89aa313beb530535fbbe4ac3c71e74a b/Unity/Better Tracking/Library/Artifacts/b8/b89aa313beb530535fbbe4ac3c71e74a new file mode 100644 index 0000000..e8fd15f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b8/b89aa313beb530535fbbe4ac3c71e74a differ diff --git a/Unity/Better Tracking/Library/Artifacts/b8/b8df07db05b5a6f90338be7e7cb82bad b/Unity/Better Tracking/Library/Artifacts/b8/b8df07db05b5a6f90338be7e7cb82bad new file mode 100644 index 0000000..f65abfc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b8/b8df07db05b5a6f90338be7e7cb82bad differ diff --git a/Unity/Better Tracking/Library/Artifacts/b9/b921effc5f78ad016a0baee8f2e2acc3 b/Unity/Better Tracking/Library/Artifacts/b9/b921effc5f78ad016a0baee8f2e2acc3 new file mode 100644 index 0000000..e29c5d6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b9/b921effc5f78ad016a0baee8f2e2acc3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/b9/b94cbd0e7c91a94e7bfd77fa3f7fe04b b/Unity/Better Tracking/Library/Artifacts/b9/b94cbd0e7c91a94e7bfd77fa3f7fe04b new file mode 100644 index 0000000..33f78d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b9/b94cbd0e7c91a94e7bfd77fa3f7fe04b differ diff --git a/Unity/Better Tracking/Library/Artifacts/b9/b9c4390ed01d64b3ef2b54f91d10342c b/Unity/Better Tracking/Library/Artifacts/b9/b9c4390ed01d64b3ef2b54f91d10342c new file mode 100644 index 0000000..a60521e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b9/b9c4390ed01d64b3ef2b54f91d10342c differ diff --git a/Unity/Better Tracking/Library/Artifacts/b9/b9e3b353553f229b961755b87e32a09c b/Unity/Better Tracking/Library/Artifacts/b9/b9e3b353553f229b961755b87e32a09c new file mode 100644 index 0000000..fb53e4c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/b9/b9e3b353553f229b961755b87e32a09c differ diff --git a/Unity/Better Tracking/Library/Artifacts/ba/ba03fc80e814e5896b78f8ee73c9040a b/Unity/Better Tracking/Library/Artifacts/ba/ba03fc80e814e5896b78f8ee73c9040a new file mode 100644 index 0000000..f5d35e3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ba/ba03fc80e814e5896b78f8ee73c9040a differ diff --git a/Unity/Better Tracking/Library/Artifacts/ba/ba2675fb7db0d48b14f8db7de930cc62 b/Unity/Better Tracking/Library/Artifacts/ba/ba2675fb7db0d48b14f8db7de930cc62 new file mode 100644 index 0000000..8a8a786 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ba/ba2675fb7db0d48b14f8db7de930cc62 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ba/ba78ebd9617aed763202fa35d062ac5c b/Unity/Better Tracking/Library/Artifacts/ba/ba78ebd9617aed763202fa35d062ac5c new file mode 100644 index 0000000..02b0c25 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ba/ba78ebd9617aed763202fa35d062ac5c differ diff --git a/Unity/Better Tracking/Library/Artifacts/ba/ba934b4a3c7e39a6ffad0a28fd4f1a66 b/Unity/Better Tracking/Library/Artifacts/ba/ba934b4a3c7e39a6ffad0a28fd4f1a66 new file mode 100644 index 0000000..51c2d99 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ba/ba934b4a3c7e39a6ffad0a28fd4f1a66 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bb/bb0b2fc7d5e2eba0c15f062d50cabac1 b/Unity/Better Tracking/Library/Artifacts/bb/bb0b2fc7d5e2eba0c15f062d50cabac1 new file mode 100644 index 0000000..8293fd1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bb/bb0b2fc7d5e2eba0c15f062d50cabac1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bb/bb64b56acad1b9b77510cc53f7254821 b/Unity/Better Tracking/Library/Artifacts/bb/bb64b56acad1b9b77510cc53f7254821 new file mode 100644 index 0000000..635e6ac Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bb/bb64b56acad1b9b77510cc53f7254821 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bb/bb6feae7839ed5d20c22de657985f906 b/Unity/Better Tracking/Library/Artifacts/bb/bb6feae7839ed5d20c22de657985f906 new file mode 100644 index 0000000..5f00c30 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bb/bb6feae7839ed5d20c22de657985f906 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bb/bb9514e5a09347fa729c794d5119d2f3 b/Unity/Better Tracking/Library/Artifacts/bb/bb9514e5a09347fa729c794d5119d2f3 new file mode 100644 index 0000000..a7a637c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bb/bb9514e5a09347fa729c794d5119d2f3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bb/bbb9b89a295dca524d3a79424288ab61 b/Unity/Better Tracking/Library/Artifacts/bb/bbb9b89a295dca524d3a79424288ab61 new file mode 100644 index 0000000..b9ca49a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bb/bbb9b89a295dca524d3a79424288ab61 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bc/bc2c8436c2509d07cca5c0b06602f95d b/Unity/Better Tracking/Library/Artifacts/bc/bc2c8436c2509d07cca5c0b06602f95d new file mode 100644 index 0000000..16633e9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bc/bc2c8436c2509d07cca5c0b06602f95d differ diff --git a/Unity/Better Tracking/Library/Artifacts/bc/bc454ce8bd6ea53feb214eb7c544f445 b/Unity/Better Tracking/Library/Artifacts/bc/bc454ce8bd6ea53feb214eb7c544f445 new file mode 100644 index 0000000..dd80d74 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bc/bc454ce8bd6ea53feb214eb7c544f445 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bc/bc517f0722976c3c9a75c2ef977c3b2c b/Unity/Better Tracking/Library/Artifacts/bc/bc517f0722976c3c9a75c2ef977c3b2c new file mode 100644 index 0000000..eb91dcf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bc/bc517f0722976c3c9a75c2ef977c3b2c differ diff --git a/Unity/Better Tracking/Library/Artifacts/bc/bcc4704b1d65088da0adcb1e7cd2d4b9 b/Unity/Better Tracking/Library/Artifacts/bc/bcc4704b1d65088da0adcb1e7cd2d4b9 new file mode 100644 index 0000000..e6ec0b1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bc/bcc4704b1d65088da0adcb1e7cd2d4b9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bd/bd1b4a974c8451c28ae7f9d6dbf03ee7 b/Unity/Better Tracking/Library/Artifacts/bd/bd1b4a974c8451c28ae7f9d6dbf03ee7 new file mode 100644 index 0000000..b8a7351 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bd/bd1b4a974c8451c28ae7f9d6dbf03ee7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bd/bd22ff39fe2c3179d490abbc39124203 b/Unity/Better Tracking/Library/Artifacts/bd/bd22ff39fe2c3179d490abbc39124203 new file mode 100644 index 0000000..dd5de1d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bd/bd22ff39fe2c3179d490abbc39124203 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d b/Unity/Better Tracking/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d new file mode 100644 index 0000000..9be96ff Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bd/bd2d47745dba1290a985893cc6513d9d differ diff --git a/Unity/Better Tracking/Library/Artifacts/bd/bde2ab12a60b750d7764470437aec92d b/Unity/Better Tracking/Library/Artifacts/bd/bde2ab12a60b750d7764470437aec92d new file mode 100644 index 0000000..0669a29 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bd/bde2ab12a60b750d7764470437aec92d differ diff --git a/Unity/Better Tracking/Library/Artifacts/bd/bdf8c48d7da22730bcc77c134dc5f905 b/Unity/Better Tracking/Library/Artifacts/bd/bdf8c48d7da22730bcc77c134dc5f905 new file mode 100644 index 0000000..34ccd34 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bd/bdf8c48d7da22730bcc77c134dc5f905 differ diff --git a/Unity/Better Tracking/Library/Artifacts/be/be2846ac64a0bfa87b6a55e3902eb38e b/Unity/Better Tracking/Library/Artifacts/be/be2846ac64a0bfa87b6a55e3902eb38e new file mode 100644 index 0000000..47c01ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/be/be2846ac64a0bfa87b6a55e3902eb38e differ diff --git a/Unity/Better Tracking/Library/Artifacts/be/bee2f4be7dbbd75acb3abfa8da70c0da b/Unity/Better Tracking/Library/Artifacts/be/bee2f4be7dbbd75acb3abfa8da70c0da new file mode 100644 index 0000000..5d18f78 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/be/bee2f4be7dbbd75acb3abfa8da70c0da differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf156580b018c7911fe9c1ca776466c2 b/Unity/Better Tracking/Library/Artifacts/bf/bf156580b018c7911fe9c1ca776466c2 new file mode 100644 index 0000000..ac5fdf4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf156580b018c7911fe9c1ca776466c2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf225866df23535063b0889418dfae13 b/Unity/Better Tracking/Library/Artifacts/bf/bf225866df23535063b0889418dfae13 new file mode 100644 index 0000000..d61556b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf225866df23535063b0889418dfae13 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf40dbc3a63f8375912a2accf9064367 b/Unity/Better Tracking/Library/Artifacts/bf/bf40dbc3a63f8375912a2accf9064367 new file mode 100644 index 0000000..a6953e9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf40dbc3a63f8375912a2accf9064367 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf53400f86f1660f6e125c0f44813e0a b/Unity/Better Tracking/Library/Artifacts/bf/bf53400f86f1660f6e125c0f44813e0a new file mode 100644 index 0000000..ba315ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf53400f86f1660f6e125c0f44813e0a differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf5ab9e73cdc53c633c7d5b12016152d b/Unity/Better Tracking/Library/Artifacts/bf/bf5ab9e73cdc53c633c7d5b12016152d new file mode 100644 index 0000000..e9175ed Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf5ab9e73cdc53c633c7d5b12016152d differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf7b789e46d9c641bfc2a84d7863cd84 b/Unity/Better Tracking/Library/Artifacts/bf/bf7b789e46d9c641bfc2a84d7863cd84 new file mode 100644 index 0000000..ac161c9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf7b789e46d9c641bfc2a84d7863cd84 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf8ec0aab41fea7dbb0067ac8d4968b3 b/Unity/Better Tracking/Library/Artifacts/bf/bf8ec0aab41fea7dbb0067ac8d4968b3 new file mode 100644 index 0000000..bea6071 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf8ec0aab41fea7dbb0067ac8d4968b3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 b/Unity/Better Tracking/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 new file mode 100644 index 0000000..a14a5f6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bf9bf3e35bae89fdca54c6938e134288 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bfccf15b156d115d46bcac5a2fabb377 b/Unity/Better Tracking/Library/Artifacts/bf/bfccf15b156d115d46bcac5a2fabb377 new file mode 100644 index 0000000..401586b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bfccf15b156d115d46bcac5a2fabb377 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 b/Unity/Better Tracking/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 new file mode 100644 index 0000000..e7a06e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bfe8cb190a2048078e96c3e4185cfd24 differ diff --git a/Unity/Better Tracking/Library/Artifacts/bf/bfeb71239624bf6183fa71ff54eb4d90 b/Unity/Better Tracking/Library/Artifacts/bf/bfeb71239624bf6183fa71ff54eb4d90 new file mode 100644 index 0000000..a23aa5b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/bf/bfeb71239624bf6183fa71ff54eb4d90 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c0/c01ee8803ccad045d4d6fb133b93c51b b/Unity/Better Tracking/Library/Artifacts/c0/c01ee8803ccad045d4d6fb133b93c51b new file mode 100644 index 0000000..1ed2d8a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c0/c01ee8803ccad045d4d6fb133b93c51b differ diff --git a/Unity/Better Tracking/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 b/Unity/Better Tracking/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 new file mode 100644 index 0000000..6cea4ef Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c0/c03c5a55edb8174c8a03b88c99f2b204 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c0/c04b749b3b84a0a083b4c30f0ec1e66e b/Unity/Better Tracking/Library/Artifacts/c0/c04b749b3b84a0a083b4c30f0ec1e66e new file mode 100644 index 0000000..378804e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c0/c04b749b3b84a0a083b4c30f0ec1e66e differ diff --git a/Unity/Better Tracking/Library/Artifacts/c0/c076100877443afac47d861398393581 b/Unity/Better Tracking/Library/Artifacts/c0/c076100877443afac47d861398393581 new file mode 100644 index 0000000..1d489fa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c0/c076100877443afac47d861398393581 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c b/Unity/Better Tracking/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c new file mode 100644 index 0000000..4888b58 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c0/c0c25d4d2ade855fd5815b42af5c4a3c differ diff --git a/Unity/Better Tracking/Library/Artifacts/c0/c0db0022893bda583af151198a55128f b/Unity/Better Tracking/Library/Artifacts/c0/c0db0022893bda583af151198a55128f new file mode 100644 index 0000000..82db566 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c0/c0db0022893bda583af151198a55128f differ diff --git a/Unity/Better Tracking/Library/Artifacts/c0/c0e0a1be4116f63b96ebf07618e08b6c b/Unity/Better Tracking/Library/Artifacts/c0/c0e0a1be4116f63b96ebf07618e08b6c new file mode 100644 index 0000000..bedf0ac Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c0/c0e0a1be4116f63b96ebf07618e08b6c differ diff --git a/Unity/Better Tracking/Library/Artifacts/c1/c10a2925f727436fdcfe83e98f9cf5e0 b/Unity/Better Tracking/Library/Artifacts/c1/c10a2925f727436fdcfe83e98f9cf5e0 new file mode 100644 index 0000000..921007b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c1/c10a2925f727436fdcfe83e98f9cf5e0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c1/c1953cff51f878772c43fe2ead279b20 b/Unity/Better Tracking/Library/Artifacts/c1/c1953cff51f878772c43fe2ead279b20 new file mode 100644 index 0000000..6437493 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c1/c1953cff51f878772c43fe2ead279b20 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c1/c1f2e7f64817d553a4a4ca78eb0af77f b/Unity/Better Tracking/Library/Artifacts/c1/c1f2e7f64817d553a4a4ca78eb0af77f new file mode 100644 index 0000000..4b92799 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c1/c1f2e7f64817d553a4a4ca78eb0af77f differ diff --git a/Unity/Better Tracking/Library/Artifacts/c1/c1f6eb5db3f596fc5943b1f4f1640821 b/Unity/Better Tracking/Library/Artifacts/c1/c1f6eb5db3f596fc5943b1f4f1640821 new file mode 100644 index 0000000..df5f22c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c1/c1f6eb5db3f596fc5943b1f4f1640821 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c2/c20bed3558369ee88c47fe19bbdafe6d b/Unity/Better Tracking/Library/Artifacts/c2/c20bed3558369ee88c47fe19bbdafe6d new file mode 100644 index 0000000..065d6b8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c2/c20bed3558369ee88c47fe19bbdafe6d differ diff --git a/Unity/Better Tracking/Library/Artifacts/c2/c24b7849c4571cb8b717b9df7fc70097 b/Unity/Better Tracking/Library/Artifacts/c2/c24b7849c4571cb8b717b9df7fc70097 new file mode 100644 index 0000000..deb1a00 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c2/c24b7849c4571cb8b717b9df7fc70097 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 b/Unity/Better Tracking/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 new file mode 100644 index 0000000..5d66413 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c2/c25d40aa53d75d427be961b299599ac2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c2/c26576b222e9099765f0933b19284a17 b/Unity/Better Tracking/Library/Artifacts/c2/c26576b222e9099765f0933b19284a17 new file mode 100644 index 0000000..9873f2f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c2/c26576b222e9099765f0933b19284a17 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c2/c2853a688948e953a170ae8ce5198c1e b/Unity/Better Tracking/Library/Artifacts/c2/c2853a688948e953a170ae8ce5198c1e new file mode 100644 index 0000000..bc9a74d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c2/c2853a688948e953a170ae8ce5198c1e differ diff --git a/Unity/Better Tracking/Library/Artifacts/c2/c2ebda8b657db2faea2c0fb401130c74 b/Unity/Better Tracking/Library/Artifacts/c2/c2ebda8b657db2faea2c0fb401130c74 new file mode 100644 index 0000000..6c98b5f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c2/c2ebda8b657db2faea2c0fb401130c74 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c31cda7174b337f22d84c5c36794497c b/Unity/Better Tracking/Library/Artifacts/c3/c31cda7174b337f22d84c5c36794497c new file mode 100644 index 0000000..0f81b4c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c31cda7174b337f22d84c5c36794497c differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c34c993eac71702fb4a651193640f660 b/Unity/Better Tracking/Library/Artifacts/c3/c34c993eac71702fb4a651193640f660 new file mode 100644 index 0000000..54fdae3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c34c993eac71702fb4a651193640f660 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c35f60798d799ae1ae836e3584a45774 b/Unity/Better Tracking/Library/Artifacts/c3/c35f60798d799ae1ae836e3584a45774 new file mode 100644 index 0000000..d619415 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c35f60798d799ae1ae836e3584a45774 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c38277e0c296817e18340e5c3e55cf1b b/Unity/Better Tracking/Library/Artifacts/c3/c38277e0c296817e18340e5c3e55cf1b new file mode 100644 index 0000000..23af987 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c38277e0c296817e18340e5c3e55cf1b differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c3ac144472d6586b85c36dbdbbb7e5ee b/Unity/Better Tracking/Library/Artifacts/c3/c3ac144472d6586b85c36dbdbbb7e5ee new file mode 100644 index 0000000..113f163 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c3ac144472d6586b85c36dbdbbb7e5ee differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 b/Unity/Better Tracking/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 new file mode 100644 index 0000000..66e0922 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c3af1140aab68c8ee7f5ea4e852941d4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c3c59a0a7e215fe31894c1dee438288e b/Unity/Better Tracking/Library/Artifacts/c3/c3c59a0a7e215fe31894c1dee438288e new file mode 100644 index 0000000..efef8ae Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c3c59a0a7e215fe31894c1dee438288e differ diff --git a/Unity/Better Tracking/Library/Artifacts/c3/c3ca3493f0fb376fde6a8a33ba5ab753 b/Unity/Better Tracking/Library/Artifacts/c3/c3ca3493f0fb376fde6a8a33ba5ab753 new file mode 100644 index 0000000..2735975 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c3/c3ca3493f0fb376fde6a8a33ba5ab753 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f b/Unity/Better Tracking/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f new file mode 100644 index 0000000..5da5782 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c4/c445d040cfe1c1f6c088cad69d4fcd4f differ diff --git a/Unity/Better Tracking/Library/Artifacts/c4/c44f238122e98f7630cc49e42ed24724 b/Unity/Better Tracking/Library/Artifacts/c4/c44f238122e98f7630cc49e42ed24724 new file mode 100644 index 0000000..c5af7fc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c4/c44f238122e98f7630cc49e42ed24724 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c4/c48ba258ad4fe6e8b095a853232e531f b/Unity/Better Tracking/Library/Artifacts/c4/c48ba258ad4fe6e8b095a853232e531f new file mode 100644 index 0000000..aa19409 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c4/c48ba258ad4fe6e8b095a853232e531f differ diff --git a/Unity/Better Tracking/Library/Artifacts/c4/c49db2f82c7842b8aa03ae3fe9c1cd83 b/Unity/Better Tracking/Library/Artifacts/c4/c49db2f82c7842b8aa03ae3fe9c1cd83 new file mode 100644 index 0000000..7053e01 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c4/c49db2f82c7842b8aa03ae3fe9c1cd83 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c4/c4d450039e1044ff15654f60237d6b85 b/Unity/Better Tracking/Library/Artifacts/c4/c4d450039e1044ff15654f60237d6b85 new file mode 100644 index 0000000..ea42abc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c4/c4d450039e1044ff15654f60237d6b85 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c4/c4dc6a448841d92e326323c2f91dde62 b/Unity/Better Tracking/Library/Artifacts/c4/c4dc6a448841d92e326323c2f91dde62 new file mode 100644 index 0000000..276cb88 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c4/c4dc6a448841d92e326323c2f91dde62 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c4/c4f897cb677ce2d128bcf382f2773bc0 b/Unity/Better Tracking/Library/Artifacts/c4/c4f897cb677ce2d128bcf382f2773bc0 new file mode 100644 index 0000000..31818bf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c4/c4f897cb677ce2d128bcf382f2773bc0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c5/c5817e5a4eb2e3c527bf8f3a8cd7f0c5 b/Unity/Better Tracking/Library/Artifacts/c5/c5817e5a4eb2e3c527bf8f3a8cd7f0c5 new file mode 100644 index 0000000..30d3462 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c5/c5817e5a4eb2e3c527bf8f3a8cd7f0c5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c5/c5a964e73aacc265b66877a1469ca097 b/Unity/Better Tracking/Library/Artifacts/c5/c5a964e73aacc265b66877a1469ca097 new file mode 100644 index 0000000..c2847a3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c5/c5a964e73aacc265b66877a1469ca097 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 b/Unity/Better Tracking/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 new file mode 100644 index 0000000..2751c5c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c5/c5c0a8ddfe92a93198578c0419140148 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c5/c5eb00968a4792ec3805964b64dce7a8 b/Unity/Better Tracking/Library/Artifacts/c5/c5eb00968a4792ec3805964b64dce7a8 new file mode 100644 index 0000000..6e090ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c5/c5eb00968a4792ec3805964b64dce7a8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c5/c5fc9ce78614367fa03fc3ded7244dfa b/Unity/Better Tracking/Library/Artifacts/c5/c5fc9ce78614367fa03fc3ded7244dfa new file mode 100644 index 0000000..2728c3e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c5/c5fc9ce78614367fa03fc3ded7244dfa differ diff --git a/Unity/Better Tracking/Library/Artifacts/c6/c6244d593a0da1fc06b9f5ca38499e7d b/Unity/Better Tracking/Library/Artifacts/c6/c6244d593a0da1fc06b9f5ca38499e7d new file mode 100644 index 0000000..11c4e4a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c6/c6244d593a0da1fc06b9f5ca38499e7d differ diff --git a/Unity/Better Tracking/Library/Artifacts/c6/c63dc831cf541d97ed4ee75d3839eace b/Unity/Better Tracking/Library/Artifacts/c6/c63dc831cf541d97ed4ee75d3839eace new file mode 100644 index 0000000..11f9556 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c6/c63dc831cf541d97ed4ee75d3839eace differ diff --git a/Unity/Better Tracking/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 b/Unity/Better Tracking/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 new file mode 100644 index 0000000..542f921 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c6/c65a4453ee4799328a83abb3f218ab63 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c6/c6979737bfb612de0651c08b8c492a5b b/Unity/Better Tracking/Library/Artifacts/c6/c6979737bfb612de0651c08b8c492a5b new file mode 100644 index 0000000..af34ab5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c6/c6979737bfb612de0651c08b8c492a5b differ diff --git a/Unity/Better Tracking/Library/Artifacts/c6/c6d3431bd655a4ce859ee95a39555b27 b/Unity/Better Tracking/Library/Artifacts/c6/c6d3431bd655a4ce859ee95a39555b27 new file mode 100644 index 0000000..a324d8a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c6/c6d3431bd655a4ce859ee95a39555b27 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c7/c749eea233e322b10ead83df7e8ed32e b/Unity/Better Tracking/Library/Artifacts/c7/c749eea233e322b10ead83df7e8ed32e new file mode 100644 index 0000000..7e41e6e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c7/c749eea233e322b10ead83df7e8ed32e differ diff --git a/Unity/Better Tracking/Library/Artifacts/c7/c763a26e4d439c8b13fe01d235796b07 b/Unity/Better Tracking/Library/Artifacts/c7/c763a26e4d439c8b13fe01d235796b07 new file mode 100644 index 0000000..1886410 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c7/c763a26e4d439c8b13fe01d235796b07 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c7/c76fc61280498f55cf86dbd41c4a84b1 b/Unity/Better Tracking/Library/Artifacts/c7/c76fc61280498f55cf86dbd41c4a84b1 new file mode 100644 index 0000000..94bbda1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c7/c76fc61280498f55cf86dbd41c4a84b1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c7/c794293ae23afba1689395fc50d44bd2 b/Unity/Better Tracking/Library/Artifacts/c7/c794293ae23afba1689395fc50d44bd2 new file mode 100644 index 0000000..ee1ac24 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c7/c794293ae23afba1689395fc50d44bd2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c7/c7b31a88c1611434bf8a848f4db08bd2 b/Unity/Better Tracking/Library/Artifacts/c7/c7b31a88c1611434bf8a848f4db08bd2 new file mode 100644 index 0000000..48036a1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c7/c7b31a88c1611434bf8a848f4db08bd2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c7/c7c299c2247c92f9dccbad8d90978a37 b/Unity/Better Tracking/Library/Artifacts/c7/c7c299c2247c92f9dccbad8d90978a37 new file mode 100644 index 0000000..e202a8e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c7/c7c299c2247c92f9dccbad8d90978a37 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c7/c7c3950c0eca00aeb0a9c3c7fb6c8e62 b/Unity/Better Tracking/Library/Artifacts/c7/c7c3950c0eca00aeb0a9c3c7fb6c8e62 new file mode 100644 index 0000000..4614133 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c7/c7c3950c0eca00aeb0a9c3c7fb6c8e62 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c80b9d6682b1adcf1afdb00a5ff7536c b/Unity/Better Tracking/Library/Artifacts/c8/c80b9d6682b1adcf1afdb00a5ff7536c new file mode 100644 index 0000000..6049442 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c80b9d6682b1adcf1afdb00a5ff7536c differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c8130aa5373d2eb160ba82b8a2c79212 b/Unity/Better Tracking/Library/Artifacts/c8/c8130aa5373d2eb160ba82b8a2c79212 new file mode 100644 index 0000000..bf70813 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c8130aa5373d2eb160ba82b8a2c79212 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c81d633458fb5c4e94e822dc7b4a841f b/Unity/Better Tracking/Library/Artifacts/c8/c81d633458fb5c4e94e822dc7b4a841f new file mode 100644 index 0000000..da4faae Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c81d633458fb5c4e94e822dc7b4a841f differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c84b901a62cba53890429771d516d0ea b/Unity/Better Tracking/Library/Artifacts/c8/c84b901a62cba53890429771d516d0ea new file mode 100644 index 0000000..e6583d0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c84b901a62cba53890429771d516d0ea differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c88e112fef92c3e8da6972fa248a53b7 b/Unity/Better Tracking/Library/Artifacts/c8/c88e112fef92c3e8da6972fa248a53b7 new file mode 100644 index 0000000..97a332f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c88e112fef92c3e8da6972fa248a53b7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c8a2004260994f73c310af2d338a7dae b/Unity/Better Tracking/Library/Artifacts/c8/c8a2004260994f73c310af2d338a7dae new file mode 100644 index 0000000..fe368c0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c8a2004260994f73c310af2d338a7dae differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c8a6c458c490e0599a95cfb86e45eca4 b/Unity/Better Tracking/Library/Artifacts/c8/c8a6c458c490e0599a95cfb86e45eca4 new file mode 100644 index 0000000..7317ff0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c8a6c458c490e0599a95cfb86e45eca4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c8/c8ee7b22e4a94d5885b5b32d46833cd2 b/Unity/Better Tracking/Library/Artifacts/c8/c8ee7b22e4a94d5885b5b32d46833cd2 new file mode 100644 index 0000000..2691d56 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c8/c8ee7b22e4a94d5885b5b32d46833cd2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c9/c92c5f6bcac6c8df37e365b66c20df10 b/Unity/Better Tracking/Library/Artifacts/c9/c92c5f6bcac6c8df37e365b66c20df10 new file mode 100644 index 0000000..8d3d90a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c9/c92c5f6bcac6c8df37e365b66c20df10 differ diff --git a/Unity/Better Tracking/Library/Artifacts/c9/c971fced8c666f70c988f813258e2a9c b/Unity/Better Tracking/Library/Artifacts/c9/c971fced8c666f70c988f813258e2a9c new file mode 100644 index 0000000..f08b642 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c9/c971fced8c666f70c988f813258e2a9c differ diff --git a/Unity/Better Tracking/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a b/Unity/Better Tracking/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a new file mode 100644 index 0000000..68daecd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c9/c9c676058b9d43b8d2704601c68cf21a differ diff --git a/Unity/Better Tracking/Library/Artifacts/c9/c9daea43846befb0438b0696f85a3702 b/Unity/Better Tracking/Library/Artifacts/c9/c9daea43846befb0438b0696f85a3702 new file mode 100644 index 0000000..21eb068 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/c9/c9daea43846befb0438b0696f85a3702 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/ca1384a39550d906b0abe0a3e2517f39 b/Unity/Better Tracking/Library/Artifacts/ca/ca1384a39550d906b0abe0a3e2517f39 new file mode 100644 index 0000000..33f1369 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/ca1384a39550d906b0abe0a3e2517f39 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/ca19cf2fa50a55790eea44bd0a5c1723 b/Unity/Better Tracking/Library/Artifacts/ca/ca19cf2fa50a55790eea44bd0a5c1723 new file mode 100644 index 0000000..3473446 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/ca19cf2fa50a55790eea44bd0a5c1723 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/ca1b5dae37c0ffb2b207d64128527227 b/Unity/Better Tracking/Library/Artifacts/ca/ca1b5dae37c0ffb2b207d64128527227 new file mode 100644 index 0000000..5b8ab15 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/ca1b5dae37c0ffb2b207d64128527227 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/ca1ec8189312efbdec097bafd2c81b02 b/Unity/Better Tracking/Library/Artifacts/ca/ca1ec8189312efbdec097bafd2c81b02 new file mode 100644 index 0000000..6c6041e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/ca1ec8189312efbdec097bafd2c81b02 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/ca330efa0d26653569d7c5c95f38c994 b/Unity/Better Tracking/Library/Artifacts/ca/ca330efa0d26653569d7c5c95f38c994 new file mode 100644 index 0000000..b36d366 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/ca330efa0d26653569d7c5c95f38c994 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 b/Unity/Better Tracking/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 new file mode 100644 index 0000000..7d80c6a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/ca4de5b7044b4279c5dfdf824fcd4218 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/ca97f2f23e5dd08f087aa62470158e33 b/Unity/Better Tracking/Library/Artifacts/ca/ca97f2f23e5dd08f087aa62470158e33 new file mode 100644 index 0000000..507248b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/ca97f2f23e5dd08f087aa62470158e33 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/caa52b8f206f6f317685d080c177c00f b/Unity/Better Tracking/Library/Artifacts/ca/caa52b8f206f6f317685d080c177c00f new file mode 100644 index 0000000..92101ba Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/caa52b8f206f6f317685d080c177c00f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/caade45127d61c790b8112349afda5b7 b/Unity/Better Tracking/Library/Artifacts/ca/caade45127d61c790b8112349afda5b7 new file mode 100644 index 0000000..78b2487 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/caade45127d61c790b8112349afda5b7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/cab1e3e0baf933890b383b1bd6e12cf0 b/Unity/Better Tracking/Library/Artifacts/ca/cab1e3e0baf933890b383b1bd6e12cf0 new file mode 100644 index 0000000..d91a5ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/cab1e3e0baf933890b383b1bd6e12cf0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ca/cada7601b5ba783fd13b86de130cf19c b/Unity/Better Tracking/Library/Artifacts/ca/cada7601b5ba783fd13b86de130cf19c new file mode 100644 index 0000000..fb25515 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ca/cada7601b5ba783fd13b86de130cf19c differ diff --git a/Unity/Better Tracking/Library/Artifacts/cb/cb6660aed81700a0f30731b23ddaea7a b/Unity/Better Tracking/Library/Artifacts/cb/cb6660aed81700a0f30731b23ddaea7a new file mode 100644 index 0000000..50fb3de Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cb/cb6660aed81700a0f30731b23ddaea7a differ diff --git a/Unity/Better Tracking/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 b/Unity/Better Tracking/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 new file mode 100644 index 0000000..26804c1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cb/cb8c48ecb6ff36e31f577f04eb18fe67 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 b/Unity/Better Tracking/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 new file mode 100644 index 0000000..ff53521 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cb/cbae3560326b96c5ef1e7dd3540a7b94 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cb/cbc5ad5537aa9c3b71e6823283f11a68 b/Unity/Better Tracking/Library/Artifacts/cb/cbc5ad5537aa9c3b71e6823283f11a68 new file mode 100644 index 0000000..5bf2fa5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cb/cbc5ad5537aa9c3b71e6823283f11a68 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cb/cbc867af46f0583103e6fe419164b92d b/Unity/Better Tracking/Library/Artifacts/cb/cbc867af46f0583103e6fe419164b92d new file mode 100644 index 0000000..2315cc6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cb/cbc867af46f0583103e6fe419164b92d differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cc0a8e0ff418f138726dd35789bfe32f b/Unity/Better Tracking/Library/Artifacts/cc/cc0a8e0ff418f138726dd35789bfe32f new file mode 100644 index 0000000..86fd927 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cc0a8e0ff418f138726dd35789bfe32f differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cc1f73bd6e2d298c2738ad780b0b68c7 b/Unity/Better Tracking/Library/Artifacts/cc/cc1f73bd6e2d298c2738ad780b0b68c7 new file mode 100644 index 0000000..acaffd2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cc1f73bd6e2d298c2738ad780b0b68c7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cc4202a29d13b79f1c222b8fb63b909a b/Unity/Better Tracking/Library/Artifacts/cc/cc4202a29d13b79f1c222b8fb63b909a new file mode 100644 index 0000000..424c302 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cc4202a29d13b79f1c222b8fb63b909a differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cc5224152c07ef7e08fc331e2b10d380 b/Unity/Better Tracking/Library/Artifacts/cc/cc5224152c07ef7e08fc331e2b10d380 new file mode 100644 index 0000000..ae2c791 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cc5224152c07ef7e08fc331e2b10d380 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cc7010f0bb27e6fb8a9f2401b275f09f b/Unity/Better Tracking/Library/Artifacts/cc/cc7010f0bb27e6fb8a9f2401b275f09f new file mode 100644 index 0000000..c70df5e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cc7010f0bb27e6fb8a9f2401b275f09f differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cca310281ed825a1c5d288ad35edc263 b/Unity/Better Tracking/Library/Artifacts/cc/cca310281ed825a1c5d288ad35edc263 new file mode 100644 index 0000000..f504039 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cca310281ed825a1c5d288ad35edc263 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cca7db6b4cf1a10f1b13d853b89e3b10 b/Unity/Better Tracking/Library/Artifacts/cc/cca7db6b4cf1a10f1b13d853b89e3b10 new file mode 100644 index 0000000..8f6c19a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cca7db6b4cf1a10f1b13d853b89e3b10 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/ccc5e8cf9be4eeeb285ba4d106dd348c b/Unity/Better Tracking/Library/Artifacts/cc/ccc5e8cf9be4eeeb285ba4d106dd348c new file mode 100644 index 0000000..75ed485 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/ccc5e8cf9be4eeeb285ba4d106dd348c differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/ccdca11eb1fecc0620a793892a56d1da b/Unity/Better Tracking/Library/Artifacts/cc/ccdca11eb1fecc0620a793892a56d1da new file mode 100644 index 0000000..069bf7d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/ccdca11eb1fecc0620a793892a56d1da differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cceac9d0a0be179a51549d84fc330c3c b/Unity/Better Tracking/Library/Artifacts/cc/cceac9d0a0be179a51549d84fc330c3c new file mode 100644 index 0000000..32c72de Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cceac9d0a0be179a51549d84fc330c3c differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/cceb43d2675742c165222776b8a27f95 b/Unity/Better Tracking/Library/Artifacts/cc/cceb43d2675742c165222776b8a27f95 new file mode 100644 index 0000000..b29b8c7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/cceb43d2675742c165222776b8a27f95 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cc/ccf42de5a558c91b64b29ab80ad5b680 b/Unity/Better Tracking/Library/Artifacts/cc/ccf42de5a558c91b64b29ab80ad5b680 new file mode 100644 index 0000000..3df3bca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cc/ccf42de5a558c91b64b29ab80ad5b680 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 b/Unity/Better Tracking/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 new file mode 100644 index 0000000..dba23cb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cd/cd09abf6fedca002279dd92b45c97508 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cd/cd2b4d6c7e3c374a549d154bcb49027f b/Unity/Better Tracking/Library/Artifacts/cd/cd2b4d6c7e3c374a549d154bcb49027f new file mode 100644 index 0000000..f74cc69 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cd/cd2b4d6c7e3c374a549d154bcb49027f differ diff --git a/Unity/Better Tracking/Library/Artifacts/cd/cd5b5ca7aeaf14f36ced8027f75cbdf4 b/Unity/Better Tracking/Library/Artifacts/cd/cd5b5ca7aeaf14f36ced8027f75cbdf4 new file mode 100644 index 0000000..e822ad7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cd/cd5b5ca7aeaf14f36ced8027f75cbdf4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cd/cd63a7ecd32b122ade60fef14e45f412 b/Unity/Better Tracking/Library/Artifacts/cd/cd63a7ecd32b122ade60fef14e45f412 new file mode 100644 index 0000000..fef5e56 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cd/cd63a7ecd32b122ade60fef14e45f412 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cd/cd7f72ffde95d9e648c06f1bbf58f89b b/Unity/Better Tracking/Library/Artifacts/cd/cd7f72ffde95d9e648c06f1bbf58f89b new file mode 100644 index 0000000..06bfe75 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cd/cd7f72ffde95d9e648c06f1bbf58f89b differ diff --git a/Unity/Better Tracking/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 b/Unity/Better Tracking/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 new file mode 100644 index 0000000..d8731b7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cd/cdd06ca54553a0cbe49f4fb2f15a25d3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cd/cdd0b8307b204a86c96bba3c669c6819 b/Unity/Better Tracking/Library/Artifacts/cd/cdd0b8307b204a86c96bba3c669c6819 new file mode 100644 index 0000000..af560c7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cd/cdd0b8307b204a86c96bba3c669c6819 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ce/ce52ebe8863e0665ede80b316d8fbc89 b/Unity/Better Tracking/Library/Artifacts/ce/ce52ebe8863e0665ede80b316d8fbc89 new file mode 100644 index 0000000..b9c1d5a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ce/ce52ebe8863e0665ede80b316d8fbc89 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ce/ce6b43a400888659d975000b99da4243 b/Unity/Better Tracking/Library/Artifacts/ce/ce6b43a400888659d975000b99da4243 new file mode 100644 index 0000000..e5f2b74 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ce/ce6b43a400888659d975000b99da4243 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ce/ce741291f1713c2712e1e8bc034b3589 b/Unity/Better Tracking/Library/Artifacts/ce/ce741291f1713c2712e1e8bc034b3589 new file mode 100644 index 0000000..6c153e0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ce/ce741291f1713c2712e1e8bc034b3589 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ce/ce9a2eea2ddcd085dc922bdc4e9581b7 b/Unity/Better Tracking/Library/Artifacts/ce/ce9a2eea2ddcd085dc922bdc4e9581b7 new file mode 100644 index 0000000..df60479 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ce/ce9a2eea2ddcd085dc922bdc4e9581b7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ce/cec59c6190dddd6c69320e51eb68002b b/Unity/Better Tracking/Library/Artifacts/ce/cec59c6190dddd6c69320e51eb68002b new file mode 100644 index 0000000..e184476 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ce/cec59c6190dddd6c69320e51eb68002b differ diff --git a/Unity/Better Tracking/Library/Artifacts/ce/ced7889ca34ffec1bdd2063cf9fe7752 b/Unity/Better Tracking/Library/Artifacts/ce/ced7889ca34ffec1bdd2063cf9fe7752 new file mode 100644 index 0000000..c84d8d4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ce/ced7889ca34ffec1bdd2063cf9fe7752 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cf0b595516c4814e10b229a1779d4802 b/Unity/Better Tracking/Library/Artifacts/cf/cf0b595516c4814e10b229a1779d4802 new file mode 100644 index 0000000..fd3a6dc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cf0b595516c4814e10b229a1779d4802 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cf0e1803bdd0ba3af04cf774bb2116e5 b/Unity/Better Tracking/Library/Artifacts/cf/cf0e1803bdd0ba3af04cf774bb2116e5 new file mode 100644 index 0000000..6caa687 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cf0e1803bdd0ba3af04cf774bb2116e5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cf7bcca4d8ddfb13f8592f84463c462e b/Unity/Better Tracking/Library/Artifacts/cf/cf7bcca4d8ddfb13f8592f84463c462e new file mode 100644 index 0000000..c9820e1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cf7bcca4d8ddfb13f8592f84463c462e differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cfa3b2efce460743ae272791c456049a b/Unity/Better Tracking/Library/Artifacts/cf/cfa3b2efce460743ae272791c456049a new file mode 100644 index 0000000..2470d1c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cfa3b2efce460743ae272791c456049a differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cfbf03a11eeefcd7f07fe2bcbb43a914 b/Unity/Better Tracking/Library/Artifacts/cf/cfbf03a11eeefcd7f07fe2bcbb43a914 new file mode 100644 index 0000000..68afacd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cfbf03a11eeefcd7f07fe2bcbb43a914 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cfd5afa2f61aa9edb501f422797891f1 b/Unity/Better Tracking/Library/Artifacts/cf/cfd5afa2f61aa9edb501f422797891f1 new file mode 100644 index 0000000..676053d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cfd5afa2f61aa9edb501f422797891f1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cfd8968f8526c24376ff2de1ad753a2b b/Unity/Better Tracking/Library/Artifacts/cf/cfd8968f8526c24376ff2de1ad753a2b new file mode 100644 index 0000000..aa9e056 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cfd8968f8526c24376ff2de1ad753a2b differ diff --git a/Unity/Better Tracking/Library/Artifacts/cf/cfe18e27edc6ff63d3481108e3b7c4c3 b/Unity/Better Tracking/Library/Artifacts/cf/cfe18e27edc6ff63d3481108e3b7c4c3 new file mode 100644 index 0000000..d231995 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/cf/cfe18e27edc6ff63d3481108e3b7c4c3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d0/d054d2936b2a2dba5c3254a001a79e8f b/Unity/Better Tracking/Library/Artifacts/d0/d054d2936b2a2dba5c3254a001a79e8f new file mode 100644 index 0000000..b8c63c7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d0/d054d2936b2a2dba5c3254a001a79e8f differ diff --git a/Unity/Better Tracking/Library/Artifacts/d0/d0897a2a78184961276b35d0c03a69ef b/Unity/Better Tracking/Library/Artifacts/d0/d0897a2a78184961276b35d0c03a69ef new file mode 100644 index 0000000..3834e92 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d0/d0897a2a78184961276b35d0c03a69ef differ diff --git a/Unity/Better Tracking/Library/Artifacts/d0/d09aa70abf672d4cac6b832c7820526d b/Unity/Better Tracking/Library/Artifacts/d0/d09aa70abf672d4cac6b832c7820526d new file mode 100644 index 0000000..9964c95 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d0/d09aa70abf672d4cac6b832c7820526d differ diff --git a/Unity/Better Tracking/Library/Artifacts/d0/d0e17428c11d68b3ecf9cdb6019705bc b/Unity/Better Tracking/Library/Artifacts/d0/d0e17428c11d68b3ecf9cdb6019705bc new file mode 100644 index 0000000..e7b8e02 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d0/d0e17428c11d68b3ecf9cdb6019705bc differ diff --git a/Unity/Better Tracking/Library/Artifacts/d1/d1062e9f0509a2eaad1d32c7e221ad33 b/Unity/Better Tracking/Library/Artifacts/d1/d1062e9f0509a2eaad1d32c7e221ad33 new file mode 100644 index 0000000..75ed577 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d1/d1062e9f0509a2eaad1d32c7e221ad33 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d1/d124375c0ab9dae1432d84ed635fcbce b/Unity/Better Tracking/Library/Artifacts/d1/d124375c0ab9dae1432d84ed635fcbce new file mode 100644 index 0000000..caaaf4d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d1/d124375c0ab9dae1432d84ed635fcbce differ diff --git a/Unity/Better Tracking/Library/Artifacts/d1/d130161af8f947b3f9cb0b8da463c27f b/Unity/Better Tracking/Library/Artifacts/d1/d130161af8f947b3f9cb0b8da463c27f new file mode 100644 index 0000000..d675fe7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d1/d130161af8f947b3f9cb0b8da463c27f differ diff --git a/Unity/Better Tracking/Library/Artifacts/d1/d135938d65300dbb82c52bd0a76e3d16 b/Unity/Better Tracking/Library/Artifacts/d1/d135938d65300dbb82c52bd0a76e3d16 new file mode 100644 index 0000000..361e46b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d1/d135938d65300dbb82c52bd0a76e3d16 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d1/d171e793c306a19f5f3e6c1415422f2b b/Unity/Better Tracking/Library/Artifacts/d1/d171e793c306a19f5f3e6c1415422f2b new file mode 100644 index 0000000..74db5b8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d1/d171e793c306a19f5f3e6c1415422f2b differ diff --git a/Unity/Better Tracking/Library/Artifacts/d1/d1995d64383907b1fccf3232a7fe6794 b/Unity/Better Tracking/Library/Artifacts/d1/d1995d64383907b1fccf3232a7fe6794 new file mode 100644 index 0000000..d88dca2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d1/d1995d64383907b1fccf3232a7fe6794 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d2/d2254cbfb12079955aa96afb3a30dc44 b/Unity/Better Tracking/Library/Artifacts/d2/d2254cbfb12079955aa96afb3a30dc44 new file mode 100644 index 0000000..fe3049b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d2/d2254cbfb12079955aa96afb3a30dc44 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d2/d2486061c882a4fd9a52f55d7c4ce88b b/Unity/Better Tracking/Library/Artifacts/d2/d2486061c882a4fd9a52f55d7c4ce88b new file mode 100644 index 0000000..fad0fba Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d2/d2486061c882a4fd9a52f55d7c4ce88b differ diff --git a/Unity/Better Tracking/Library/Artifacts/d2/d251a6ca4da57352c6ec0a9aaeab3e9a b/Unity/Better Tracking/Library/Artifacts/d2/d251a6ca4da57352c6ec0a9aaeab3e9a new file mode 100644 index 0000000..1ad8ac7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d2/d251a6ca4da57352c6ec0a9aaeab3e9a differ diff --git a/Unity/Better Tracking/Library/Artifacts/d2/d26e83d88961b848c5b813507a6713aa b/Unity/Better Tracking/Library/Artifacts/d2/d26e83d88961b848c5b813507a6713aa new file mode 100644 index 0000000..275a786 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d2/d26e83d88961b848c5b813507a6713aa differ diff --git a/Unity/Better Tracking/Library/Artifacts/d2/d2c98081071a5459c9d0b2ebce11b3d4 b/Unity/Better Tracking/Library/Artifacts/d2/d2c98081071a5459c9d0b2ebce11b3d4 new file mode 100644 index 0000000..fec981d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d2/d2c98081071a5459c9d0b2ebce11b3d4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d33894b1e5a7e4410cd1c6a2e0bd30b2 b/Unity/Better Tracking/Library/Artifacts/d3/d33894b1e5a7e4410cd1c6a2e0bd30b2 new file mode 100644 index 0000000..474bc51 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d33894b1e5a7e4410cd1c6a2e0bd30b2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d33bd92874b20a6dc8a4a635466763d8 b/Unity/Better Tracking/Library/Artifacts/d3/d33bd92874b20a6dc8a4a635466763d8 new file mode 100644 index 0000000..ba09f99 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d33bd92874b20a6dc8a4a635466763d8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d369fc94f7c0105bd3a7b1212c73fc18 b/Unity/Better Tracking/Library/Artifacts/d3/d369fc94f7c0105bd3a7b1212c73fc18 new file mode 100644 index 0000000..725dcf2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d369fc94f7c0105bd3a7b1212c73fc18 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d3ab5b480c171c0cc31dee8dd76fd52b b/Unity/Better Tracking/Library/Artifacts/d3/d3ab5b480c171c0cc31dee8dd76fd52b new file mode 100644 index 0000000..647cee2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d3ab5b480c171c0cc31dee8dd76fd52b differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d3bf091b1b9a5627c90968a5c56c250c b/Unity/Better Tracking/Library/Artifacts/d3/d3bf091b1b9a5627c90968a5c56c250c new file mode 100644 index 0000000..a316ca4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d3bf091b1b9a5627c90968a5c56c250c differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d3c1076c56fdc7bd738a7f020bdabbe8 b/Unity/Better Tracking/Library/Artifacts/d3/d3c1076c56fdc7bd738a7f020bdabbe8 new file mode 100644 index 0000000..aefab0d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d3c1076c56fdc7bd738a7f020bdabbe8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d3d0dac6400fc7df26a8aeadc3d3fc01 b/Unity/Better Tracking/Library/Artifacts/d3/d3d0dac6400fc7df26a8aeadc3d3fc01 new file mode 100644 index 0000000..815e8ee Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d3d0dac6400fc7df26a8aeadc3d3fc01 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d3/d3e07c7d71883bef00dc702df9574f74 b/Unity/Better Tracking/Library/Artifacts/d3/d3e07c7d71883bef00dc702df9574f74 new file mode 100644 index 0000000..215bdf7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d3/d3e07c7d71883bef00dc702df9574f74 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 b/Unity/Better Tracking/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 new file mode 100644 index 0000000..75ec283 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d4/d40f57679420e867dc83ca5f60a59466 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d4/d43e176a499dc23aac22b014c0cb6741 b/Unity/Better Tracking/Library/Artifacts/d4/d43e176a499dc23aac22b014c0cb6741 new file mode 100644 index 0000000..a0fefd8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d4/d43e176a499dc23aac22b014c0cb6741 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d4/d4684e9448f51d71eba929ea14765749 b/Unity/Better Tracking/Library/Artifacts/d4/d4684e9448f51d71eba929ea14765749 new file mode 100644 index 0000000..749df47 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d4/d4684e9448f51d71eba929ea14765749 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d4/d4a33c52bef8b0b894f06782c2d2fab2 b/Unity/Better Tracking/Library/Artifacts/d4/d4a33c52bef8b0b894f06782c2d2fab2 new file mode 100644 index 0000000..d735b3f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d4/d4a33c52bef8b0b894f06782c2d2fab2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d4/d4def2ea7ad826b17863378f8b073c1b b/Unity/Better Tracking/Library/Artifacts/d4/d4def2ea7ad826b17863378f8b073c1b new file mode 100644 index 0000000..288b37c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d4/d4def2ea7ad826b17863378f8b073c1b differ diff --git a/Unity/Better Tracking/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 b/Unity/Better Tracking/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 new file mode 100644 index 0000000..ac1391f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d4/d4e2547b82b32d8396f1c6ccab964ae8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d5/d52036719df1be3442d53a4843021bfa b/Unity/Better Tracking/Library/Artifacts/d5/d52036719df1be3442d53a4843021bfa new file mode 100644 index 0000000..ea8e091 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d5/d52036719df1be3442d53a4843021bfa differ diff --git a/Unity/Better Tracking/Library/Artifacts/d5/d52a46d6d5b25ed82e054943e929b883 b/Unity/Better Tracking/Library/Artifacts/d5/d52a46d6d5b25ed82e054943e929b883 new file mode 100644 index 0000000..9b533fe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d5/d52a46d6d5b25ed82e054943e929b883 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d5/d5c15717f6f6ab24374090bffcaf6fb7 b/Unity/Better Tracking/Library/Artifacts/d5/d5c15717f6f6ab24374090bffcaf6fb7 new file mode 100644 index 0000000..ac76f42 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d5/d5c15717f6f6ab24374090bffcaf6fb7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d6/d63f0e24664a213b4d70ecc1045c951b b/Unity/Better Tracking/Library/Artifacts/d6/d63f0e24664a213b4d70ecc1045c951b new file mode 100644 index 0000000..2f959bb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d6/d63f0e24664a213b4d70ecc1045c951b differ diff --git a/Unity/Better Tracking/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f b/Unity/Better Tracking/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f new file mode 100644 index 0000000..76b8775 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d6/d682b7596cbda0b38927733530bc4c6f differ diff --git a/Unity/Better Tracking/Library/Artifacts/d6/d6c60f663b2da121f15747564393ca8f b/Unity/Better Tracking/Library/Artifacts/d6/d6c60f663b2da121f15747564393ca8f new file mode 100644 index 0000000..2813b83 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d6/d6c60f663b2da121f15747564393ca8f differ diff --git a/Unity/Better Tracking/Library/Artifacts/d6/d6d37ab85e0948801cfd3547996946a4 b/Unity/Better Tracking/Library/Artifacts/d6/d6d37ab85e0948801cfd3547996946a4 new file mode 100644 index 0000000..1ae01ea Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d6/d6d37ab85e0948801cfd3547996946a4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d6/d6edde37f863e95974a6679862ab3ff3 b/Unity/Better Tracking/Library/Artifacts/d6/d6edde37f863e95974a6679862ab3ff3 new file mode 100644 index 0000000..57c9796 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d6/d6edde37f863e95974a6679862ab3ff3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d7/d72c39d7cb7e1698298fb1433d2174e7 b/Unity/Better Tracking/Library/Artifacts/d7/d72c39d7cb7e1698298fb1433d2174e7 new file mode 100644 index 0000000..b3f79d9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d7/d72c39d7cb7e1698298fb1433d2174e7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d7/d7d86c2eb80b8f654cd76a545a729e2b b/Unity/Better Tracking/Library/Artifacts/d7/d7d86c2eb80b8f654cd76a545a729e2b new file mode 100644 index 0000000..31dc9a7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d7/d7d86c2eb80b8f654cd76a545a729e2b differ diff --git a/Unity/Better Tracking/Library/Artifacts/d8/d81a22e6b4417bc61a8d67e87c65f00d b/Unity/Better Tracking/Library/Artifacts/d8/d81a22e6b4417bc61a8d67e87c65f00d new file mode 100644 index 0000000..603edad Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d8/d81a22e6b4417bc61a8d67e87c65f00d differ diff --git a/Unity/Better Tracking/Library/Artifacts/d8/d8317c562c80d6d50359f673f991edd1 b/Unity/Better Tracking/Library/Artifacts/d8/d8317c562c80d6d50359f673f991edd1 new file mode 100644 index 0000000..5df998d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d8/d8317c562c80d6d50359f673f991edd1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d8/d86ec6b3ddaa44a233f56a10d12128f2 b/Unity/Better Tracking/Library/Artifacts/d8/d86ec6b3ddaa44a233f56a10d12128f2 new file mode 100644 index 0000000..29f8204 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d8/d86ec6b3ddaa44a233f56a10d12128f2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d8/d88609f2d8ac3aeb4ad8e78f591d5cac b/Unity/Better Tracking/Library/Artifacts/d8/d88609f2d8ac3aeb4ad8e78f591d5cac new file mode 100644 index 0000000..34442ef Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d8/d88609f2d8ac3aeb4ad8e78f591d5cac differ diff --git a/Unity/Better Tracking/Library/Artifacts/d8/d89bd093c66d2e46a3eba6b252793049 b/Unity/Better Tracking/Library/Artifacts/d8/d89bd093c66d2e46a3eba6b252793049 new file mode 100644 index 0000000..197131b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d8/d89bd093c66d2e46a3eba6b252793049 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d8/d8ecbc01c728c410ceccb7a667cc5330 b/Unity/Better Tracking/Library/Artifacts/d8/d8ecbc01c728c410ceccb7a667cc5330 new file mode 100644 index 0000000..7cba61e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d8/d8ecbc01c728c410ceccb7a667cc5330 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d8/d8f621f97d4ee1a39484b0a124440f2f b/Unity/Better Tracking/Library/Artifacts/d8/d8f621f97d4ee1a39484b0a124440f2f new file mode 100644 index 0000000..76d0c23 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d8/d8f621f97d4ee1a39484b0a124440f2f differ diff --git a/Unity/Better Tracking/Library/Artifacts/d9/d926433ab8cb760b6015836bb7f2a6f5 b/Unity/Better Tracking/Library/Artifacts/d9/d926433ab8cb760b6015836bb7f2a6f5 new file mode 100644 index 0000000..97985e3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d9/d926433ab8cb760b6015836bb7f2a6f5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d9/d9356240f61e3d3973737b55952b1ecb b/Unity/Better Tracking/Library/Artifacts/d9/d9356240f61e3d3973737b55952b1ecb new file mode 100644 index 0000000..9c9565d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d9/d9356240f61e3d3973737b55952b1ecb differ diff --git a/Unity/Better Tracking/Library/Artifacts/d9/d95ea8fdc3f6087b1af7bd1fa763ffb6 b/Unity/Better Tracking/Library/Artifacts/d9/d95ea8fdc3f6087b1af7bd1fa763ffb6 new file mode 100644 index 0000000..538230d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d9/d95ea8fdc3f6087b1af7bd1fa763ffb6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d9/d9bba813ccf5e3adecdd2d5c2d1c9433 b/Unity/Better Tracking/Library/Artifacts/d9/d9bba813ccf5e3adecdd2d5c2d1c9433 new file mode 100644 index 0000000..dc61dbf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d9/d9bba813ccf5e3adecdd2d5c2d1c9433 differ diff --git a/Unity/Better Tracking/Library/Artifacts/d9/d9c9a5c542c9415d66ec9610e243ef26 b/Unity/Better Tracking/Library/Artifacts/d9/d9c9a5c542c9415d66ec9610e243ef26 new file mode 100644 index 0000000..a200de2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/d9/d9c9a5c542c9415d66ec9610e243ef26 differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/da53150e3bd3a705d79bdc153f90e4b9 b/Unity/Better Tracking/Library/Artifacts/da/da53150e3bd3a705d79bdc153f90e4b9 new file mode 100644 index 0000000..99905b3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/da53150e3bd3a705d79bdc153f90e4b9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/da65eb7b3027324ad052070d3b7949e0 b/Unity/Better Tracking/Library/Artifacts/da/da65eb7b3027324ad052070d3b7949e0 new file mode 100644 index 0000000..c3405e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/da65eb7b3027324ad052070d3b7949e0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/da8ec7b5a6ff083f78cfb9a87c7f6160 b/Unity/Better Tracking/Library/Artifacts/da/da8ec7b5a6ff083f78cfb9a87c7f6160 new file mode 100644 index 0000000..56efc43 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/da8ec7b5a6ff083f78cfb9a87c7f6160 differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/da9b822b2cfbf80a26235ed14c8e8b15 b/Unity/Better Tracking/Library/Artifacts/da/da9b822b2cfbf80a26235ed14c8e8b15 new file mode 100644 index 0000000..62e5e9f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/da9b822b2cfbf80a26235ed14c8e8b15 differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/da9d5941831f8606fa6e6193bc382ce6 b/Unity/Better Tracking/Library/Artifacts/da/da9d5941831f8606fa6e6193bc382ce6 new file mode 100644 index 0000000..009566a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/da9d5941831f8606fa6e6193bc382ce6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/daa5d31767f053356628f6603f1be6fd b/Unity/Better Tracking/Library/Artifacts/da/daa5d31767f053356628f6603f1be6fd new file mode 100644 index 0000000..b60322b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/daa5d31767f053356628f6603f1be6fd differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/dab253396cc6ea3c89ec2c62291f8c10 b/Unity/Better Tracking/Library/Artifacts/da/dab253396cc6ea3c89ec2c62291f8c10 new file mode 100644 index 0000000..34116fe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/dab253396cc6ea3c89ec2c62291f8c10 differ diff --git a/Unity/Better Tracking/Library/Artifacts/da/daf8c8167e532b13dcabc1bc6469815d b/Unity/Better Tracking/Library/Artifacts/da/daf8c8167e532b13dcabc1bc6469815d new file mode 100644 index 0000000..5647d27 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/da/daf8c8167e532b13dcabc1bc6469815d differ diff --git a/Unity/Better Tracking/Library/Artifacts/db/db00805455fbcfeb2829094e2a4ebc54 b/Unity/Better Tracking/Library/Artifacts/db/db00805455fbcfeb2829094e2a4ebc54 new file mode 100644 index 0000000..b60526d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/db/db00805455fbcfeb2829094e2a4ebc54 differ diff --git a/Unity/Better Tracking/Library/Artifacts/db/db5cb36c7b36eda443137c89aa025077 b/Unity/Better Tracking/Library/Artifacts/db/db5cb36c7b36eda443137c89aa025077 new file mode 100644 index 0000000..67139d5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/db/db5cb36c7b36eda443137c89aa025077 differ diff --git a/Unity/Better Tracking/Library/Artifacts/db/dba1824d0ef2c8ca197804dedeb4f1f3 b/Unity/Better Tracking/Library/Artifacts/db/dba1824d0ef2c8ca197804dedeb4f1f3 new file mode 100644 index 0000000..a6132fe Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/db/dba1824d0ef2c8ca197804dedeb4f1f3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/db/dbad8638a35eb3d926f29de4705d8295 b/Unity/Better Tracking/Library/Artifacts/db/dbad8638a35eb3d926f29de4705d8295 new file mode 100644 index 0000000..bdb2bdd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/db/dbad8638a35eb3d926f29de4705d8295 differ diff --git a/Unity/Better Tracking/Library/Artifacts/db/dbb65b40f4d28585b91a09d7bc77f788 b/Unity/Better Tracking/Library/Artifacts/db/dbb65b40f4d28585b91a09d7bc77f788 new file mode 100644 index 0000000..2d0d1a8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/db/dbb65b40f4d28585b91a09d7bc77f788 differ diff --git a/Unity/Better Tracking/Library/Artifacts/db/dbceff07ed2ddc506d15803613502735 b/Unity/Better Tracking/Library/Artifacts/db/dbceff07ed2ddc506d15803613502735 new file mode 100644 index 0000000..d906290 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/db/dbceff07ed2ddc506d15803613502735 differ diff --git a/Unity/Better Tracking/Library/Artifacts/db/dbd6dae77b9e6aef3a0e15a69ee484db b/Unity/Better Tracking/Library/Artifacts/db/dbd6dae77b9e6aef3a0e15a69ee484db new file mode 100644 index 0000000..887bae6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/db/dbd6dae77b9e6aef3a0e15a69ee484db differ diff --git a/Unity/Better Tracking/Library/Artifacts/dc/dc19f65f38eb11a599d221eae0963220 b/Unity/Better Tracking/Library/Artifacts/dc/dc19f65f38eb11a599d221eae0963220 new file mode 100644 index 0000000..0fbff6e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dc/dc19f65f38eb11a599d221eae0963220 differ diff --git a/Unity/Better Tracking/Library/Artifacts/dc/dc1f6f07528359153852fb25fbf148b2 b/Unity/Better Tracking/Library/Artifacts/dc/dc1f6f07528359153852fb25fbf148b2 new file mode 100644 index 0000000..ee8e61c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dc/dc1f6f07528359153852fb25fbf148b2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/dc/dc6b5cbe403315bffe480359131e4a2c b/Unity/Better Tracking/Library/Artifacts/dc/dc6b5cbe403315bffe480359131e4a2c new file mode 100644 index 0000000..d9567b1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dc/dc6b5cbe403315bffe480359131e4a2c differ diff --git a/Unity/Better Tracking/Library/Artifacts/dc/dca3215bfa600dd56963c5061cafae46 b/Unity/Better Tracking/Library/Artifacts/dc/dca3215bfa600dd56963c5061cafae46 new file mode 100644 index 0000000..dfdfdf2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dc/dca3215bfa600dd56963c5061cafae46 differ diff --git a/Unity/Better Tracking/Library/Artifacts/dc/dcf3472a413a6f5227dd3bfd25c15dcd b/Unity/Better Tracking/Library/Artifacts/dc/dcf3472a413a6f5227dd3bfd25c15dcd new file mode 100644 index 0000000..798f738 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dc/dcf3472a413a6f5227dd3bfd25c15dcd differ diff --git a/Unity/Better Tracking/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b b/Unity/Better Tracking/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b new file mode 100644 index 0000000..965c0bd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dd/dd59c653ae4a6e02fb471b96238ec97b differ diff --git a/Unity/Better Tracking/Library/Artifacts/dd/dd93fc53fd33934274a60fcf391d8532 b/Unity/Better Tracking/Library/Artifacts/dd/dd93fc53fd33934274a60fcf391d8532 new file mode 100644 index 0000000..7afed7a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dd/dd93fc53fd33934274a60fcf391d8532 differ diff --git a/Unity/Better Tracking/Library/Artifacts/dd/ddafdc9e5ad17c65218d582c5d5a317d b/Unity/Better Tracking/Library/Artifacts/dd/ddafdc9e5ad17c65218d582c5d5a317d new file mode 100644 index 0000000..ed25f74 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dd/ddafdc9e5ad17c65218d582c5d5a317d differ diff --git a/Unity/Better Tracking/Library/Artifacts/dd/ddb01ae27a0a67f42f5de62ee278793a b/Unity/Better Tracking/Library/Artifacts/dd/ddb01ae27a0a67f42f5de62ee278793a new file mode 100644 index 0000000..8be9c31 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/dd/ddb01ae27a0a67f42f5de62ee278793a differ diff --git a/Unity/Better Tracking/Library/Artifacts/de/deecfb212fd719ccbfbe11aa3caf0b4e b/Unity/Better Tracking/Library/Artifacts/de/deecfb212fd719ccbfbe11aa3caf0b4e new file mode 100644 index 0000000..72b56f4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/de/deecfb212fd719ccbfbe11aa3caf0b4e differ diff --git a/Unity/Better Tracking/Library/Artifacts/df/df1cc8c790205efe045bb60ee6d78e7c b/Unity/Better Tracking/Library/Artifacts/df/df1cc8c790205efe045bb60ee6d78e7c new file mode 100644 index 0000000..b4002ac Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/df/df1cc8c790205efe045bb60ee6d78e7c differ diff --git a/Unity/Better Tracking/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 b/Unity/Better Tracking/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 new file mode 100644 index 0000000..2676356 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/df/df497d53d15903a90aa122624bf56019 differ diff --git a/Unity/Better Tracking/Library/Artifacts/df/df5e1317c222d85ea810f2b76e1502d3 b/Unity/Better Tracking/Library/Artifacts/df/df5e1317c222d85ea810f2b76e1502d3 new file mode 100644 index 0000000..44cddec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/df/df5e1317c222d85ea810f2b76e1502d3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/df/dfbe6441a214347ef605471ff6256cc6 b/Unity/Better Tracking/Library/Artifacts/df/dfbe6441a214347ef605471ff6256cc6 new file mode 100644 index 0000000..6fa4687 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/df/dfbe6441a214347ef605471ff6256cc6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/df/dfc8832881e9a714cd6e1e4168e5c7a8 b/Unity/Better Tracking/Library/Artifacts/df/dfc8832881e9a714cd6e1e4168e5c7a8 new file mode 100644 index 0000000..32b16f8 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/df/dfc8832881e9a714cd6e1e4168e5c7a8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 b/Unity/Better Tracking/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 new file mode 100644 index 0000000..6ef61be Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/df/dff19d3e9cf019f71a5b1677cea4d278 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e0/e04f47d77cb0623edbe508d5a10d2dd5 b/Unity/Better Tracking/Library/Artifacts/e0/e04f47d77cb0623edbe508d5a10d2dd5 new file mode 100644 index 0000000..4989c51 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e0/e04f47d77cb0623edbe508d5a10d2dd5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e0/e08b8606da83ceb89871e62b1ba32629 b/Unity/Better Tracking/Library/Artifacts/e0/e08b8606da83ceb89871e62b1ba32629 new file mode 100644 index 0000000..4e798c5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e0/e08b8606da83ceb89871e62b1ba32629 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e0/e0b57376164050b33d84e5fac404b79d b/Unity/Better Tracking/Library/Artifacts/e0/e0b57376164050b33d84e5fac404b79d new file mode 100644 index 0000000..2fb7a48 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e0/e0b57376164050b33d84e5fac404b79d differ diff --git a/Unity/Better Tracking/Library/Artifacts/e0/e0f81426fb13acb249961b01e0ebfc20 b/Unity/Better Tracking/Library/Artifacts/e0/e0f81426fb13acb249961b01e0ebfc20 new file mode 100644 index 0000000..37cc8e5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e0/e0f81426fb13acb249961b01e0ebfc20 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e1/e10e7f69becf1a71b1939a0bacbc6edb b/Unity/Better Tracking/Library/Artifacts/e1/e10e7f69becf1a71b1939a0bacbc6edb new file mode 100644 index 0000000..990bfe3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e1/e10e7f69becf1a71b1939a0bacbc6edb differ diff --git a/Unity/Better Tracking/Library/Artifacts/e1/e1547045dd3322ad8e5f6460ac16acb8 b/Unity/Better Tracking/Library/Artifacts/e1/e1547045dd3322ad8e5f6460ac16acb8 new file mode 100644 index 0000000..338788e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e1/e1547045dd3322ad8e5f6460ac16acb8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f b/Unity/Better Tracking/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f new file mode 100644 index 0000000..5b687ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e1/e16bb4d98688b3d502a100f105aa402f differ diff --git a/Unity/Better Tracking/Library/Artifacts/e1/e17e86440c2b7e62078bf450094fe082 b/Unity/Better Tracking/Library/Artifacts/e1/e17e86440c2b7e62078bf450094fe082 new file mode 100644 index 0000000..ec95c24 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e1/e17e86440c2b7e62078bf450094fe082 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e1/e1991507f9de1ada09cc1b33ee3086c6 b/Unity/Better Tracking/Library/Artifacts/e1/e1991507f9de1ada09cc1b33ee3086c6 new file mode 100644 index 0000000..e83f3f5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e1/e1991507f9de1ada09cc1b33ee3086c6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e2/e206306c504d7174a4228e110a6f7bd0 b/Unity/Better Tracking/Library/Artifacts/e2/e206306c504d7174a4228e110a6f7bd0 new file mode 100644 index 0000000..df65e8c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e2/e206306c504d7174a4228e110a6f7bd0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e2/e28c870589ab8ce9afe83b70a4065afc b/Unity/Better Tracking/Library/Artifacts/e2/e28c870589ab8ce9afe83b70a4065afc new file mode 100644 index 0000000..f387924 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e2/e28c870589ab8ce9afe83b70a4065afc differ diff --git a/Unity/Better Tracking/Library/Artifacts/e2/e29cc9f7b4f85686451296fc03112ae2 b/Unity/Better Tracking/Library/Artifacts/e2/e29cc9f7b4f85686451296fc03112ae2 new file mode 100644 index 0000000..51760e6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e2/e29cc9f7b4f85686451296fc03112ae2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e2/e2e5aa431a978d433597121106a67d4f b/Unity/Better Tracking/Library/Artifacts/e2/e2e5aa431a978d433597121106a67d4f new file mode 100644 index 0000000..611b670 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e2/e2e5aa431a978d433597121106a67d4f differ diff --git a/Unity/Better Tracking/Library/Artifacts/e2/e2e9397675dfec2ecfe9cdffad34e12b b/Unity/Better Tracking/Library/Artifacts/e2/e2e9397675dfec2ecfe9cdffad34e12b new file mode 100644 index 0000000..3c415ff Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e2/e2e9397675dfec2ecfe9cdffad34e12b differ diff --git a/Unity/Better Tracking/Library/Artifacts/e2/e2eb87ed9047336872a5bb1a71901539 b/Unity/Better Tracking/Library/Artifacts/e2/e2eb87ed9047336872a5bb1a71901539 new file mode 100644 index 0000000..ee11773 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e2/e2eb87ed9047336872a5bb1a71901539 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e3/e311bd71ac377178354c420b488b47c6 b/Unity/Better Tracking/Library/Artifacts/e3/e311bd71ac377178354c420b488b47c6 new file mode 100644 index 0000000..3481da5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e3/e311bd71ac377178354c420b488b47c6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e3/e33ec76c8142698587d14d2cb788b809 b/Unity/Better Tracking/Library/Artifacts/e3/e33ec76c8142698587d14d2cb788b809 new file mode 100644 index 0000000..41ade3c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e3/e33ec76c8142698587d14d2cb788b809 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e3/e3b9d408e3b3d5bd56273f690db9ca26 b/Unity/Better Tracking/Library/Artifacts/e3/e3b9d408e3b3d5bd56273f690db9ca26 new file mode 100644 index 0000000..f082dac Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e3/e3b9d408e3b3d5bd56273f690db9ca26 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e3/e3c53c74f476e716a02106c73bee7e5f b/Unity/Better Tracking/Library/Artifacts/e3/e3c53c74f476e716a02106c73bee7e5f new file mode 100644 index 0000000..ea693f5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e3/e3c53c74f476e716a02106c73bee7e5f differ diff --git a/Unity/Better Tracking/Library/Artifacts/e3/e3ec512097b0cf0434c93c2ff569c4d6 b/Unity/Better Tracking/Library/Artifacts/e3/e3ec512097b0cf0434c93c2ff569c4d6 new file mode 100644 index 0000000..86849d3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e3/e3ec512097b0cf0434c93c2ff569c4d6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e3/e3fff825680cbc363624740396b606b7 b/Unity/Better Tracking/Library/Artifacts/e3/e3fff825680cbc363624740396b606b7 new file mode 100644 index 0000000..d7e0f71 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e3/e3fff825680cbc363624740396b606b7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e4/e43f3a1b246ad02c4f890ca0e01d32af b/Unity/Better Tracking/Library/Artifacts/e4/e43f3a1b246ad02c4f890ca0e01d32af new file mode 100644 index 0000000..0e126c3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e4/e43f3a1b246ad02c4f890ca0e01d32af differ diff --git a/Unity/Better Tracking/Library/Artifacts/e4/e447156bcee58ced4c3a0e3e104c178a b/Unity/Better Tracking/Library/Artifacts/e4/e447156bcee58ced4c3a0e3e104c178a new file mode 100644 index 0000000..a491e68 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e4/e447156bcee58ced4c3a0e3e104c178a differ diff --git a/Unity/Better Tracking/Library/Artifacts/e4/e453b700723a929f121e6628f6216f2c b/Unity/Better Tracking/Library/Artifacts/e4/e453b700723a929f121e6628f6216f2c new file mode 100644 index 0000000..a4f54fd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e4/e453b700723a929f121e6628f6216f2c differ diff --git a/Unity/Better Tracking/Library/Artifacts/e4/e4ce90de2c581004ccee8989e2ec30df b/Unity/Better Tracking/Library/Artifacts/e4/e4ce90de2c581004ccee8989e2ec30df new file mode 100644 index 0000000..8a4fd1a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e4/e4ce90de2c581004ccee8989e2ec30df differ diff --git a/Unity/Better Tracking/Library/Artifacts/e4/e4d497e591217b023bb02bf8fc013293 b/Unity/Better Tracking/Library/Artifacts/e4/e4d497e591217b023bb02bf8fc013293 new file mode 100644 index 0000000..bf0386f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e4/e4d497e591217b023bb02bf8fc013293 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e4/e4d6b82a439245d5a475e503cd13618f b/Unity/Better Tracking/Library/Artifacts/e4/e4d6b82a439245d5a475e503cd13618f new file mode 100644 index 0000000..969c2a3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e4/e4d6b82a439245d5a475e503cd13618f differ diff --git a/Unity/Better Tracking/Library/Artifacts/e4/e4eface3f9c78accc746c3c9a15da9f7 b/Unity/Better Tracking/Library/Artifacts/e4/e4eface3f9c78accc746c3c9a15da9f7 new file mode 100644 index 0000000..bed30b3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e4/e4eface3f9c78accc746c3c9a15da9f7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e502b8fe94f516d25604b54ed9ae2d86 b/Unity/Better Tracking/Library/Artifacts/e5/e502b8fe94f516d25604b54ed9ae2d86 new file mode 100644 index 0000000..6bc282d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e502b8fe94f516d25604b54ed9ae2d86 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e517f604dcc7bcc7b57c53dc777d676c b/Unity/Better Tracking/Library/Artifacts/e5/e517f604dcc7bcc7b57c53dc777d676c new file mode 100644 index 0000000..058e73d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e517f604dcc7bcc7b57c53dc777d676c differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e53e959c18113506881c5d2466e23873 b/Unity/Better Tracking/Library/Artifacts/e5/e53e959c18113506881c5d2466e23873 new file mode 100644 index 0000000..aae308b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e53e959c18113506881c5d2466e23873 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e54447d691f9a45e1f6173b61488f872 b/Unity/Better Tracking/Library/Artifacts/e5/e54447d691f9a45e1f6173b61488f872 new file mode 100644 index 0000000..318f3a4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e54447d691f9a45e1f6173b61488f872 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e546bb299d95b62b8ff5b7bc5a73f264 b/Unity/Better Tracking/Library/Artifacts/e5/e546bb299d95b62b8ff5b7bc5a73f264 new file mode 100644 index 0000000..9cefe03 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e546bb299d95b62b8ff5b7bc5a73f264 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e57d46bc0d0395949c8a3f6de1145565 b/Unity/Better Tracking/Library/Artifacts/e5/e57d46bc0d0395949c8a3f6de1145565 new file mode 100644 index 0000000..22ac996 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e57d46bc0d0395949c8a3f6de1145565 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e587646260c0d455002b908b54f9314e b/Unity/Better Tracking/Library/Artifacts/e5/e587646260c0d455002b908b54f9314e new file mode 100644 index 0000000..220335f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e587646260c0d455002b908b54f9314e differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e58f46e5ad587e69c1f6ebf29ce40557 b/Unity/Better Tracking/Library/Artifacts/e5/e58f46e5ad587e69c1f6ebf29ce40557 new file mode 100644 index 0000000..f2953dd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e58f46e5ad587e69c1f6ebf29ce40557 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e5/e598f72436a2f502dfd9b8ee57588a48 b/Unity/Better Tracking/Library/Artifacts/e5/e598f72436a2f502dfd9b8ee57588a48 new file mode 100644 index 0000000..4e7c36b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e5/e598f72436a2f502dfd9b8ee57588a48 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e6/e6046e23c4ba862133295fd0df2993f9 b/Unity/Better Tracking/Library/Artifacts/e6/e6046e23c4ba862133295fd0df2993f9 new file mode 100644 index 0000000..f147c29 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e6/e6046e23c4ba862133295fd0df2993f9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e6/e623d4428fdf0c5efe76c5bde7360441 b/Unity/Better Tracking/Library/Artifacts/e6/e623d4428fdf0c5efe76c5bde7360441 new file mode 100644 index 0000000..3f04f41 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e6/e623d4428fdf0c5efe76c5bde7360441 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e6/e668a3c6797658faaad4726c01305e55 b/Unity/Better Tracking/Library/Artifacts/e6/e668a3c6797658faaad4726c01305e55 new file mode 100644 index 0000000..033ac52 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e6/e668a3c6797658faaad4726c01305e55 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e6/e66facc721b7524f8027ef29cd7a9409 b/Unity/Better Tracking/Library/Artifacts/e6/e66facc721b7524f8027ef29cd7a9409 new file mode 100644 index 0000000..58f561c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e6/e66facc721b7524f8027ef29cd7a9409 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e6/e6a6fba160a23cfdd9ec15f73e72295b b/Unity/Better Tracking/Library/Artifacts/e6/e6a6fba160a23cfdd9ec15f73e72295b new file mode 100644 index 0000000..6850ad4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e6/e6a6fba160a23cfdd9ec15f73e72295b differ diff --git a/Unity/Better Tracking/Library/Artifacts/e7/e703b62e747fc8f88ef95af940326cc9 b/Unity/Better Tracking/Library/Artifacts/e7/e703b62e747fc8f88ef95af940326cc9 new file mode 100644 index 0000000..b508901 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e7/e703b62e747fc8f88ef95af940326cc9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e7/e79297742c517c7c1f43004e845323ca b/Unity/Better Tracking/Library/Artifacts/e7/e79297742c517c7c1f43004e845323ca new file mode 100644 index 0000000..8a6fef9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e7/e79297742c517c7c1f43004e845323ca differ diff --git a/Unity/Better Tracking/Library/Artifacts/e7/e7d53f58885447018465f89c4887b24b b/Unity/Better Tracking/Library/Artifacts/e7/e7d53f58885447018465f89c4887b24b new file mode 100644 index 0000000..b9740d9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e7/e7d53f58885447018465f89c4887b24b differ diff --git a/Unity/Better Tracking/Library/Artifacts/e8/e8086e3fb0c262c4a0be21b8aa011dbf b/Unity/Better Tracking/Library/Artifacts/e8/e8086e3fb0c262c4a0be21b8aa011dbf new file mode 100644 index 0000000..e539bf1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e8/e8086e3fb0c262c4a0be21b8aa011dbf differ diff --git a/Unity/Better Tracking/Library/Artifacts/e8/e80c8ec74a9903d12797fe707669b037 b/Unity/Better Tracking/Library/Artifacts/e8/e80c8ec74a9903d12797fe707669b037 new file mode 100644 index 0000000..ae53333 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e8/e80c8ec74a9903d12797fe707669b037 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 b/Unity/Better Tracking/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 new file mode 100644 index 0000000..aabd9df Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e8/e8194503f58f07da5a97290070b0df24 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e8/e83a121586a455aac8746b3d8f52bd9f b/Unity/Better Tracking/Library/Artifacts/e8/e83a121586a455aac8746b3d8f52bd9f new file mode 100644 index 0000000..e58e1b0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e8/e83a121586a455aac8746b3d8f52bd9f differ diff --git a/Unity/Better Tracking/Library/Artifacts/e8/e8662ddd7f1a7f3e0baa07c025b41f02 b/Unity/Better Tracking/Library/Artifacts/e8/e8662ddd7f1a7f3e0baa07c025b41f02 new file mode 100644 index 0000000..38973e4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e8/e8662ddd7f1a7f3e0baa07c025b41f02 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e8/e8b307c680c71a2a8a48856d2b32d73c b/Unity/Better Tracking/Library/Artifacts/e8/e8b307c680c71a2a8a48856d2b32d73c new file mode 100644 index 0000000..9dbcfa4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e8/e8b307c680c71a2a8a48856d2b32d73c differ diff --git a/Unity/Better Tracking/Library/Artifacts/e8/e8ccae5b8dca18d2b8fda5b01827f1a7 b/Unity/Better Tracking/Library/Artifacts/e8/e8ccae5b8dca18d2b8fda5b01827f1a7 new file mode 100644 index 0000000..0e5ff65 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e8/e8ccae5b8dca18d2b8fda5b01827f1a7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e9/e9588b68b0a2ade1d456dee2c83441c9 b/Unity/Better Tracking/Library/Artifacts/e9/e9588b68b0a2ade1d456dee2c83441c9 new file mode 100644 index 0000000..52e2e1c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e9/e9588b68b0a2ade1d456dee2c83441c9 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e9/e9bc6f73771c01d5ac35a9e8de859640 b/Unity/Better Tracking/Library/Artifacts/e9/e9bc6f73771c01d5ac35a9e8de859640 new file mode 100644 index 0000000..0a986a7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e9/e9bc6f73771c01d5ac35a9e8de859640 differ diff --git a/Unity/Better Tracking/Library/Artifacts/e9/e9d2a6bb9298b6b0cbefbba12ba6bc9e b/Unity/Better Tracking/Library/Artifacts/e9/e9d2a6bb9298b6b0cbefbba12ba6bc9e new file mode 100644 index 0000000..0f71990 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/e9/e9d2a6bb9298b6b0cbefbba12ba6bc9e differ diff --git a/Unity/Better Tracking/Library/Artifacts/ea/ea07cc9b7684f9083679f25415ebb72c b/Unity/Better Tracking/Library/Artifacts/ea/ea07cc9b7684f9083679f25415ebb72c new file mode 100644 index 0000000..172f34c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ea/ea07cc9b7684f9083679f25415ebb72c differ diff --git a/Unity/Better Tracking/Library/Artifacts/ea/ea2f274513b7e25f0e5537554cf0024e b/Unity/Better Tracking/Library/Artifacts/ea/ea2f274513b7e25f0e5537554cf0024e new file mode 100644 index 0000000..7b4ae47 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ea/ea2f274513b7e25f0e5537554cf0024e differ diff --git a/Unity/Better Tracking/Library/Artifacts/ea/ea4fae6c50107d531ec5f1224f282651 b/Unity/Better Tracking/Library/Artifacts/ea/ea4fae6c50107d531ec5f1224f282651 new file mode 100644 index 0000000..3a9aa1b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ea/ea4fae6c50107d531ec5f1224f282651 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ea/ea621454deaf262025e1f609ab9cf96f b/Unity/Better Tracking/Library/Artifacts/ea/ea621454deaf262025e1f609ab9cf96f new file mode 100644 index 0000000..429f2f9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ea/ea621454deaf262025e1f609ab9cf96f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ea/ea9c6394d545e9f7f52eb9dd3df060c0 b/Unity/Better Tracking/Library/Artifacts/ea/ea9c6394d545e9f7f52eb9dd3df060c0 new file mode 100644 index 0000000..4a4c062 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ea/ea9c6394d545e9f7f52eb9dd3df060c0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb03b573e26fae3a5bd14e831efda7dc b/Unity/Better Tracking/Library/Artifacts/eb/eb03b573e26fae3a5bd14e831efda7dc new file mode 100644 index 0000000..8eafb02 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb03b573e26fae3a5bd14e831efda7dc differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb0fa2fd7fc4ba64a6d5599237d535e1 b/Unity/Better Tracking/Library/Artifacts/eb/eb0fa2fd7fc4ba64a6d5599237d535e1 new file mode 100644 index 0000000..fbd8502 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb0fa2fd7fc4ba64a6d5599237d535e1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb1dca619b82a5f6676dcb733ad264b3 b/Unity/Better Tracking/Library/Artifacts/eb/eb1dca619b82a5f6676dcb733ad264b3 new file mode 100644 index 0000000..3dae916 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb1dca619b82a5f6676dcb733ad264b3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb239ebc38cde4459ac21d8a60f9cb63 b/Unity/Better Tracking/Library/Artifacts/eb/eb239ebc38cde4459ac21d8a60f9cb63 new file mode 100644 index 0000000..16a8d4b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb239ebc38cde4459ac21d8a60f9cb63 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 b/Unity/Better Tracking/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 new file mode 100644 index 0000000..a93caf9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb2ef1ef7ccecc64b09ce4b0f4e94ed5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb35ed824bd543d77fda9f092a072d98 b/Unity/Better Tracking/Library/Artifacts/eb/eb35ed824bd543d77fda9f092a072d98 new file mode 100644 index 0000000..31197b3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb35ed824bd543d77fda9f092a072d98 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb7d8ba642c48c361263e0442168b680 b/Unity/Better Tracking/Library/Artifacts/eb/eb7d8ba642c48c361263e0442168b680 new file mode 100644 index 0000000..8bbf037 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb7d8ba642c48c361263e0442168b680 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/eb8fadef572e6eb4cb0b64327b841eb4 b/Unity/Better Tracking/Library/Artifacts/eb/eb8fadef572e6eb4cb0b64327b841eb4 new file mode 100644 index 0000000..ec05be0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/eb8fadef572e6eb4cb0b64327b841eb4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/eb/ebd6012f08feb7f7e1e53ef2b83db66e b/Unity/Better Tracking/Library/Artifacts/eb/ebd6012f08feb7f7e1e53ef2b83db66e new file mode 100644 index 0000000..3562fd6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/eb/ebd6012f08feb7f7e1e53ef2b83db66e differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ec0142d367c7b3d1d3cd5e5ab8dd329f b/Unity/Better Tracking/Library/Artifacts/ec/ec0142d367c7b3d1d3cd5e5ab8dd329f new file mode 100644 index 0000000..51f589c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ec0142d367c7b3d1d3cd5e5ab8dd329f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ec1ac6d51510d8ded79fef092bd79e67 b/Unity/Better Tracking/Library/Artifacts/ec/ec1ac6d51510d8ded79fef092bd79e67 new file mode 100644 index 0000000..703d73d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ec1ac6d51510d8ded79fef092bd79e67 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 b/Unity/Better Tracking/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 new file mode 100644 index 0000000..c95b175 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ec324142b98f1b50a85515e23eea79b5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ec3d548c270167faafc22d126d598f1c b/Unity/Better Tracking/Library/Artifacts/ec/ec3d548c270167faafc22d126d598f1c new file mode 100644 index 0000000..c476907 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ec3d548c270167faafc22d126d598f1c differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ec49184d9d5b04380c38a78866909c91 b/Unity/Better Tracking/Library/Artifacts/ec/ec49184d9d5b04380c38a78866909c91 new file mode 100644 index 0000000..5272a5d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ec49184d9d5b04380c38a78866909c91 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ec633cb5cf571f1f28194a3e050465d2 b/Unity/Better Tracking/Library/Artifacts/ec/ec633cb5cf571f1f28194a3e050465d2 new file mode 100644 index 0000000..0b009df Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ec633cb5cf571f1f28194a3e050465d2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ecb6d0d043fae5598df158edad1a426a b/Unity/Better Tracking/Library/Artifacts/ec/ecb6d0d043fae5598df158edad1a426a new file mode 100644 index 0000000..95afd81 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ecb6d0d043fae5598df158edad1a426a differ diff --git a/Unity/Better Tracking/Library/Artifacts/ec/ece94de5fbd66dd7192f933b1655c2c4 b/Unity/Better Tracking/Library/Artifacts/ec/ece94de5fbd66dd7192f933b1655c2c4 new file mode 100644 index 0000000..b362432 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ec/ece94de5fbd66dd7192f933b1655c2c4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ed/edd1893b5d59d70c48e552c93e59e93b b/Unity/Better Tracking/Library/Artifacts/ed/edd1893b5d59d70c48e552c93e59e93b new file mode 100644 index 0000000..89cf6af Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ed/edd1893b5d59d70c48e552c93e59e93b differ diff --git a/Unity/Better Tracking/Library/Artifacts/ed/ede3d2380552070446df579a0ee9683f b/Unity/Better Tracking/Library/Artifacts/ed/ede3d2380552070446df579a0ee9683f new file mode 100644 index 0000000..bbda227 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ed/ede3d2380552070446df579a0ee9683f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/ee040c5e01edc3d1b7f94266101875bf b/Unity/Better Tracking/Library/Artifacts/ee/ee040c5e01edc3d1b7f94266101875bf new file mode 100644 index 0000000..5f9cf93 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/ee040c5e01edc3d1b7f94266101875bf differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/ee21c2f835b041ef6b3619659608a85d b/Unity/Better Tracking/Library/Artifacts/ee/ee21c2f835b041ef6b3619659608a85d new file mode 100644 index 0000000..0436205 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/ee21c2f835b041ef6b3619659608a85d differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/ee24e68348260a420c20fc87d49266c2 b/Unity/Better Tracking/Library/Artifacts/ee/ee24e68348260a420c20fc87d49266c2 new file mode 100644 index 0000000..27d111b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/ee24e68348260a420c20fc87d49266c2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/ee52129f89fe7c16c38023a19e3a212e b/Unity/Better Tracking/Library/Artifacts/ee/ee52129f89fe7c16c38023a19e3a212e new file mode 100644 index 0000000..ea29c07 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/ee52129f89fe7c16c38023a19e3a212e differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/ee5e81513e316afd37bde49b85bd7881 b/Unity/Better Tracking/Library/Artifacts/ee/ee5e81513e316afd37bde49b85bd7881 new file mode 100644 index 0000000..31f924e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/ee5e81513e316afd37bde49b85bd7881 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/ee9d0a6882f5985dde2fc2b1b89aacbd b/Unity/Better Tracking/Library/Artifacts/ee/ee9d0a6882f5985dde2fc2b1b89aacbd new file mode 100644 index 0000000..bde8de9 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/ee9d0a6882f5985dde2fc2b1b89aacbd differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/eea0453ba0c583ef3a40d52f68531c4d b/Unity/Better Tracking/Library/Artifacts/ee/eea0453ba0c583ef3a40d52f68531c4d new file mode 100644 index 0000000..fe4c265 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/eea0453ba0c583ef3a40d52f68531c4d differ diff --git a/Unity/Better Tracking/Library/Artifacts/ee/eedc78684d9baaee476147c2c8ee158f b/Unity/Better Tracking/Library/Artifacts/ee/eedc78684d9baaee476147c2c8ee158f new file mode 100644 index 0000000..4361cac Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ee/eedc78684d9baaee476147c2c8ee158f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/ef1297d80e2dcf257844b18b3ce8241d b/Unity/Better Tracking/Library/Artifacts/ef/ef1297d80e2dcf257844b18b3ce8241d new file mode 100644 index 0000000..c404a94 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/ef1297d80e2dcf257844b18b3ce8241d differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/ef2e26c54947a0cf81677abe41633a1e b/Unity/Better Tracking/Library/Artifacts/ef/ef2e26c54947a0cf81677abe41633a1e new file mode 100644 index 0000000..0e16adf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/ef2e26c54947a0cf81677abe41633a1e differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/ef2e867754c7aee412730c3c540399e5 b/Unity/Better Tracking/Library/Artifacts/ef/ef2e867754c7aee412730c3c540399e5 new file mode 100644 index 0000000..a76d591 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/ef2e867754c7aee412730c3c540399e5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/ef60242e0aac828e88ddfd5c6563987f b/Unity/Better Tracking/Library/Artifacts/ef/ef60242e0aac828e88ddfd5c6563987f new file mode 100644 index 0000000..746895d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/ef60242e0aac828e88ddfd5c6563987f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/ef6931f5d7d0a1d634490ca094226fb2 b/Unity/Better Tracking/Library/Artifacts/ef/ef6931f5d7d0a1d634490ca094226fb2 new file mode 100644 index 0000000..f8e5c14 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/ef6931f5d7d0a1d634490ca094226fb2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/ef7535d90bdc937bbf0e9c02ed0f1ae1 b/Unity/Better Tracking/Library/Artifacts/ef/ef7535d90bdc937bbf0e9c02ed0f1ae1 new file mode 100644 index 0000000..ed834ae Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/ef7535d90bdc937bbf0e9c02ed0f1ae1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/ef906175eb7b39b689923008169ebea1 b/Unity/Better Tracking/Library/Artifacts/ef/ef906175eb7b39b689923008169ebea1 new file mode 100644 index 0000000..30c8332 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/ef906175eb7b39b689923008169ebea1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/efaa30609ee0583f4660660cf30d4967 b/Unity/Better Tracking/Library/Artifacts/ef/efaa30609ee0583f4660660cf30d4967 new file mode 100644 index 0000000..d7294ef Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/efaa30609ee0583f4660660cf30d4967 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/efcfc140c9aac46ba4cbec0ec51b8eeb b/Unity/Better Tracking/Library/Artifacts/ef/efcfc140c9aac46ba4cbec0ec51b8eeb new file mode 100644 index 0000000..7646311 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/efcfc140c9aac46ba4cbec0ec51b8eeb differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/efd79fe6b7aed67b2fe2c1e444ebc723 b/Unity/Better Tracking/Library/Artifacts/ef/efd79fe6b7aed67b2fe2c1e444ebc723 new file mode 100644 index 0000000..57d72b3 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/efd79fe6b7aed67b2fe2c1e444ebc723 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ef/effcf4f6168dded145e904b367829e8b b/Unity/Better Tracking/Library/Artifacts/ef/effcf4f6168dded145e904b367829e8b new file mode 100644 index 0000000..e4c4d59 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ef/effcf4f6168dded145e904b367829e8b differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 b/Unity/Better Tracking/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 new file mode 100644 index 0000000..6230050 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f0388ce27d963c7fabdf4b1d6f12f3e5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f046f2a39812c01e9d4823a050f435c0 b/Unity/Better Tracking/Library/Artifacts/f0/f046f2a39812c01e9d4823a050f435c0 new file mode 100644 index 0000000..06ee297 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f046f2a39812c01e9d4823a050f435c0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f04846f4adb1bfe29790304a523e2b29 b/Unity/Better Tracking/Library/Artifacts/f0/f04846f4adb1bfe29790304a523e2b29 new file mode 100644 index 0000000..f746796 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f04846f4adb1bfe29790304a523e2b29 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f0501ca705c88b85534d2ff30ae14131 b/Unity/Better Tracking/Library/Artifacts/f0/f0501ca705c88b85534d2ff30ae14131 new file mode 100644 index 0000000..26cbcc6 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f0501ca705c88b85534d2ff30ae14131 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f09208b04d5d9827da32aa7cefa6be53 b/Unity/Better Tracking/Library/Artifacts/f0/f09208b04d5d9827da32aa7cefa6be53 new file mode 100644 index 0000000..7f04be1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f09208b04d5d9827da32aa7cefa6be53 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f0ab33018a63eefbbd2f2d6f2fca8d3e b/Unity/Better Tracking/Library/Artifacts/f0/f0ab33018a63eefbbd2f2d6f2fca8d3e new file mode 100644 index 0000000..771fa4e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f0ab33018a63eefbbd2f2d6f2fca8d3e differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f0be7daf7c2600c964dbf5d384fedfee b/Unity/Better Tracking/Library/Artifacts/f0/f0be7daf7c2600c964dbf5d384fedfee new file mode 100644 index 0000000..d5ba79f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f0be7daf7c2600c964dbf5d384fedfee differ diff --git a/Unity/Better Tracking/Library/Artifacts/f0/f0e2286adc71ee5885f189600528ca81 b/Unity/Better Tracking/Library/Artifacts/f0/f0e2286adc71ee5885f189600528ca81 new file mode 100644 index 0000000..72be13e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f0/f0e2286adc71ee5885f189600528ca81 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f1/f1234545b1bc941c9ec1d89d50b451a0 b/Unity/Better Tracking/Library/Artifacts/f1/f1234545b1bc941c9ec1d89d50b451a0 new file mode 100644 index 0000000..3dd7189 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f1/f1234545b1bc941c9ec1d89d50b451a0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f1/f134e99ce6bb2b54e33bbeed4ac8f3af b/Unity/Better Tracking/Library/Artifacts/f1/f134e99ce6bb2b54e33bbeed4ac8f3af new file mode 100644 index 0000000..b2ab7c1 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f1/f134e99ce6bb2b54e33bbeed4ac8f3af differ diff --git a/Unity/Better Tracking/Library/Artifacts/f1/f19e0c5fce44f76b181c54fe1d75fbfa b/Unity/Better Tracking/Library/Artifacts/f1/f19e0c5fce44f76b181c54fe1d75fbfa new file mode 100644 index 0000000..bfcc036 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f1/f19e0c5fce44f76b181c54fe1d75fbfa differ diff --git a/Unity/Better Tracking/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 b/Unity/Better Tracking/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 new file mode 100644 index 0000000..bd13f39 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f1/f1ac08e48411f7b06fe4af16fb4d9db5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f2/f254f7139be1d14faec434b6e1e9d33c b/Unity/Better Tracking/Library/Artifacts/f2/f254f7139be1d14faec434b6e1e9d33c new file mode 100644 index 0000000..e871887 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f2/f254f7139be1d14faec434b6e1e9d33c differ diff --git a/Unity/Better Tracking/Library/Artifacts/f2/f26351275da2fd4f104f093d157a89f5 b/Unity/Better Tracking/Library/Artifacts/f2/f26351275da2fd4f104f093d157a89f5 new file mode 100644 index 0000000..991efcb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f2/f26351275da2fd4f104f093d157a89f5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f2/f27c5193acf4bfddb24c9ca8e4b9a4f3 b/Unity/Better Tracking/Library/Artifacts/f2/f27c5193acf4bfddb24c9ca8e4b9a4f3 new file mode 100644 index 0000000..199baf2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f2/f27c5193acf4bfddb24c9ca8e4b9a4f3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f2/f2cd1109f88c6c0c3c8b7f56e99ad15d b/Unity/Better Tracking/Library/Artifacts/f2/f2cd1109f88c6c0c3c8b7f56e99ad15d new file mode 100644 index 0000000..201354b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f2/f2cd1109f88c6c0c3c8b7f56e99ad15d differ diff --git a/Unity/Better Tracking/Library/Artifacts/f2/f2fa8d1138d623b3cec854908e68df7c b/Unity/Better Tracking/Library/Artifacts/f2/f2fa8d1138d623b3cec854908e68df7c new file mode 100644 index 0000000..5efb6a5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f2/f2fa8d1138d623b3cec854908e68df7c differ diff --git a/Unity/Better Tracking/Library/Artifacts/f3/f32e9703e9e3b9033eb9e26468c739c5 b/Unity/Better Tracking/Library/Artifacts/f3/f32e9703e9e3b9033eb9e26468c739c5 new file mode 100644 index 0000000..aa8f69d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f3/f32e9703e9e3b9033eb9e26468c739c5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f3/f3508d7d58217497e82c93d2cea047d5 b/Unity/Better Tracking/Library/Artifacts/f3/f3508d7d58217497e82c93d2cea047d5 new file mode 100644 index 0000000..2fef401 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f3/f3508d7d58217497e82c93d2cea047d5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f3/f3f65adc8c4c4ce145b72785a3b292f0 b/Unity/Better Tracking/Library/Artifacts/f3/f3f65adc8c4c4ce145b72785a3b292f0 new file mode 100644 index 0000000..59e7b3d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f3/f3f65adc8c4c4ce145b72785a3b292f0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f3/f3f75013cacde3f6860faea55030d79c b/Unity/Better Tracking/Library/Artifacts/f3/f3f75013cacde3f6860faea55030d79c new file mode 100644 index 0000000..996b701 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f3/f3f75013cacde3f6860faea55030d79c differ diff --git a/Unity/Better Tracking/Library/Artifacts/f4/f402163b5105cd05bf34c70b60e150e4 b/Unity/Better Tracking/Library/Artifacts/f4/f402163b5105cd05bf34c70b60e150e4 new file mode 100644 index 0000000..1c58b6e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f4/f402163b5105cd05bf34c70b60e150e4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f4/f40ac553402b74572d7d51ef58c30340 b/Unity/Better Tracking/Library/Artifacts/f4/f40ac553402b74572d7d51ef58c30340 new file mode 100644 index 0000000..0bcacce Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f4/f40ac553402b74572d7d51ef58c30340 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f4/f40d4889251229dcbf65c36735787e50 b/Unity/Better Tracking/Library/Artifacts/f4/f40d4889251229dcbf65c36735787e50 new file mode 100644 index 0000000..3da56ec Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f4/f40d4889251229dcbf65c36735787e50 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f4/f41054cd0d04559967bc4802ffc33444 b/Unity/Better Tracking/Library/Artifacts/f4/f41054cd0d04559967bc4802ffc33444 new file mode 100644 index 0000000..c9bb455 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f4/f41054cd0d04559967bc4802ffc33444 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f4/f4760f5e552809100a0954522c35a42b b/Unity/Better Tracking/Library/Artifacts/f4/f4760f5e552809100a0954522c35a42b new file mode 100644 index 0000000..a041b07 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f4/f4760f5e552809100a0954522c35a42b differ diff --git a/Unity/Better Tracking/Library/Artifacts/f4/f4bfb745815d96c544861a45059d8c00 b/Unity/Better Tracking/Library/Artifacts/f4/f4bfb745815d96c544861a45059d8c00 new file mode 100644 index 0000000..00e83ca Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f4/f4bfb745815d96c544861a45059d8c00 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f4/f4e3280b5ac7c433e2fd01e15191b3cc b/Unity/Better Tracking/Library/Artifacts/f4/f4e3280b5ac7c433e2fd01e15191b3cc new file mode 100644 index 0000000..68b5258 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f4/f4e3280b5ac7c433e2fd01e15191b3cc differ diff --git a/Unity/Better Tracking/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 b/Unity/Better Tracking/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 new file mode 100644 index 0000000..b49e708 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f5/f57c8e76981f6f46d9bbc48ee7f56814 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f5/f57f5f912c605ad8750c397a82e3f9a3 b/Unity/Better Tracking/Library/Artifacts/f5/f57f5f912c605ad8750c397a82e3f9a3 new file mode 100644 index 0000000..300f80a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f5/f57f5f912c605ad8750c397a82e3f9a3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe b/Unity/Better Tracking/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe new file mode 100644 index 0000000..3b1c9ef Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f5/f5c4fa80c70126fba5f8dc08d9cddcfe differ diff --git a/Unity/Better Tracking/Library/Artifacts/f5/f5eaf06a51b00cb78f75afa18eaf5e92 b/Unity/Better Tracking/Library/Artifacts/f5/f5eaf06a51b00cb78f75afa18eaf5e92 new file mode 100644 index 0000000..50b929f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f5/f5eaf06a51b00cb78f75afa18eaf5e92 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f5/f5f3aefb127259e580e004918c454a80 b/Unity/Better Tracking/Library/Artifacts/f5/f5f3aefb127259e580e004918c454a80 new file mode 100644 index 0000000..8bc97e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f5/f5f3aefb127259e580e004918c454a80 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f6/f621b67778e2c214f9e18489db0c37e3 b/Unity/Better Tracking/Library/Artifacts/f6/f621b67778e2c214f9e18489db0c37e3 new file mode 100644 index 0000000..4d4530f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f6/f621b67778e2c214f9e18489db0c37e3 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f6/f637a0298383c68998e778cd58f0051e b/Unity/Better Tracking/Library/Artifacts/f6/f637a0298383c68998e778cd58f0051e new file mode 100644 index 0000000..a55b914 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f6/f637a0298383c68998e778cd58f0051e differ diff --git a/Unity/Better Tracking/Library/Artifacts/f6/f63c21564ff59ffb6eb13ddb658ca032 b/Unity/Better Tracking/Library/Artifacts/f6/f63c21564ff59ffb6eb13ddb658ca032 new file mode 100644 index 0000000..7ecf49b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f6/f63c21564ff59ffb6eb13ddb658ca032 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f6/f6d99403a7800a98163fbdfe8f93ee9f b/Unity/Better Tracking/Library/Artifacts/f6/f6d99403a7800a98163fbdfe8f93ee9f new file mode 100644 index 0000000..6f1a5eb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f6/f6d99403a7800a98163fbdfe8f93ee9f differ diff --git a/Unity/Better Tracking/Library/Artifacts/f6/f6ef47333813ee35b52f318f50808887 b/Unity/Better Tracking/Library/Artifacts/f6/f6ef47333813ee35b52f318f50808887 new file mode 100644 index 0000000..81e85cb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f6/f6ef47333813ee35b52f318f50808887 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 b/Unity/Better Tracking/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 new file mode 100644 index 0000000..4e07cce Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f7274cf6ca8b359c12d58e6e7e7408f4 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f75601c95019d789fd1d46bbcbdd609d b/Unity/Better Tracking/Library/Artifacts/f7/f75601c95019d789fd1d46bbcbdd609d new file mode 100644 index 0000000..bf7044a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f75601c95019d789fd1d46bbcbdd609d differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f79d822f2b2f741fe91e2a432e32313a b/Unity/Better Tracking/Library/Artifacts/f7/f79d822f2b2f741fe91e2a432e32313a new file mode 100644 index 0000000..7bb829d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f79d822f2b2f741fe91e2a432e32313a differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f7bf925ccb46f2caaf6e2ba8524b278e b/Unity/Better Tracking/Library/Artifacts/f7/f7bf925ccb46f2caaf6e2ba8524b278e new file mode 100644 index 0000000..fcf6ebd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f7bf925ccb46f2caaf6e2ba8524b278e differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f7d43313e6e5e593b802e2e994e2e47f b/Unity/Better Tracking/Library/Artifacts/f7/f7d43313e6e5e593b802e2e994e2e47f new file mode 100644 index 0000000..4f524a7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f7d43313e6e5e593b802e2e994e2e47f differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f7da2161179b66c19ef40a594c556170 b/Unity/Better Tracking/Library/Artifacts/f7/f7da2161179b66c19ef40a594c556170 new file mode 100644 index 0000000..1125ac4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f7da2161179b66c19ef40a594c556170 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f7eb3a814115b694b43ea43611404150 b/Unity/Better Tracking/Library/Artifacts/f7/f7eb3a814115b694b43ea43611404150 new file mode 100644 index 0000000..2a79b2c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f7eb3a814115b694b43ea43611404150 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f7eeec9228fef9208b80cbe61e31cf06 b/Unity/Better Tracking/Library/Artifacts/f7/f7eeec9228fef9208b80cbe61e31cf06 new file mode 100644 index 0000000..0e8a224 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f7eeec9228fef9208b80cbe61e31cf06 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f7/f7f69a2f47e9471efa0304df3b3a56a2 b/Unity/Better Tracking/Library/Artifacts/f7/f7f69a2f47e9471efa0304df3b3a56a2 new file mode 100644 index 0000000..39376b0 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f7/f7f69a2f47e9471efa0304df3b3a56a2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f8/f8664c7399a1f6ef6afdbb23ea6d30b1 b/Unity/Better Tracking/Library/Artifacts/f8/f8664c7399a1f6ef6afdbb23ea6d30b1 new file mode 100644 index 0000000..e4fe511 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f8/f8664c7399a1f6ef6afdbb23ea6d30b1 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f8/f88f3a038aae26ac304840394c58b509 b/Unity/Better Tracking/Library/Artifacts/f8/f88f3a038aae26ac304840394c58b509 new file mode 100644 index 0000000..022bda4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f8/f88f3a038aae26ac304840394c58b509 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 b/Unity/Better Tracking/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 new file mode 100644 index 0000000..d6c09bb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f8/f8c2dba26200c96ea7bd86f6fcaa24f8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 b/Unity/Better Tracking/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 new file mode 100644 index 0000000..0b0c07a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f9075ce0f07b40dfddb2790f6e1c2eb5 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 b/Unity/Better Tracking/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 new file mode 100644 index 0000000..b5c6836 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f934ad3ec259e442045763fa27043bf7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f939dc1d755050a7661e064498368d5d b/Unity/Better Tracking/Library/Artifacts/f9/f939dc1d755050a7661e064498368d5d new file mode 100644 index 0000000..3bcfce5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f939dc1d755050a7661e064498368d5d differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f952c847ab8387d21a4636c48715ce27 b/Unity/Better Tracking/Library/Artifacts/f9/f952c847ab8387d21a4636c48715ce27 new file mode 100644 index 0000000..219d374 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f952c847ab8387d21a4636c48715ce27 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f964f1841ef3a103227cf3b2a809d275 b/Unity/Better Tracking/Library/Artifacts/f9/f964f1841ef3a103227cf3b2a809d275 new file mode 100644 index 0000000..d6769fa Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f964f1841ef3a103227cf3b2a809d275 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f96a09e805faad7fe761596015d6eb2f b/Unity/Better Tracking/Library/Artifacts/f9/f96a09e805faad7fe761596015d6eb2f new file mode 100644 index 0000000..d835681 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f96a09e805faad7fe761596015d6eb2f differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f973fd3d4da6e5481c11836404b15b34 b/Unity/Better Tracking/Library/Artifacts/f9/f973fd3d4da6e5481c11836404b15b34 new file mode 100644 index 0000000..1e92a76 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f973fd3d4da6e5481c11836404b15b34 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f98834368fca0a8fcb9386c4ff65c197 b/Unity/Better Tracking/Library/Artifacts/f9/f98834368fca0a8fcb9386c4ff65c197 new file mode 100644 index 0000000..5706ba5 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f98834368fca0a8fcb9386c4ff65c197 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f9c79b833a13cc106ff6f77ac8d29743 b/Unity/Better Tracking/Library/Artifacts/f9/f9c79b833a13cc106ff6f77ac8d29743 new file mode 100644 index 0000000..c111142 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f9c79b833a13cc106ff6f77ac8d29743 differ diff --git a/Unity/Better Tracking/Library/Artifacts/f9/f9d90293d4a04cef184c4a9465210101 b/Unity/Better Tracking/Library/Artifacts/f9/f9d90293d4a04cef184c4a9465210101 new file mode 100644 index 0000000..466b831 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/f9/f9d90293d4a04cef184c4a9465210101 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fa/fa79265c29abb172cbc441a3689ef5ab b/Unity/Better Tracking/Library/Artifacts/fa/fa79265c29abb172cbc441a3689ef5ab new file mode 100644 index 0000000..2ea2059 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fa/fa79265c29abb172cbc441a3689ef5ab differ diff --git a/Unity/Better Tracking/Library/Artifacts/fa/fa91678291923924ab594d6aa7296741 b/Unity/Better Tracking/Library/Artifacts/fa/fa91678291923924ab594d6aa7296741 new file mode 100644 index 0000000..5583efb Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fa/fa91678291923924ab594d6aa7296741 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fa/fa9d74fbaba51a31f2b14769a1cdc423 b/Unity/Better Tracking/Library/Artifacts/fa/fa9d74fbaba51a31f2b14769a1cdc423 new file mode 100644 index 0000000..c389a43 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fa/fa9d74fbaba51a31f2b14769a1cdc423 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 b/Unity/Better Tracking/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 new file mode 100644 index 0000000..f9dff94 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fa/faafb2fc3be02fec46cfa5c129fd57b6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 b/Unity/Better Tracking/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 new file mode 100644 index 0000000..b4ef869 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fa/fad4d0eaeae112d867393eecf09817e7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fa/faecdcd4b4e470632b91e989f1863100 b/Unity/Better Tracking/Library/Artifacts/fa/faecdcd4b4e470632b91e989f1863100 new file mode 100644 index 0000000..d1c0de2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fa/faecdcd4b4e470632b91e989f1863100 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fb/fb41bd83b43693fb1ca81f93e18e831d b/Unity/Better Tracking/Library/Artifacts/fb/fb41bd83b43693fb1ca81f93e18e831d new file mode 100644 index 0000000..807f0bc Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fb/fb41bd83b43693fb1ca81f93e18e831d differ diff --git a/Unity/Better Tracking/Library/Artifacts/fb/fb4c4a8236870b90a4814f3df83e620d b/Unity/Better Tracking/Library/Artifacts/fb/fb4c4a8236870b90a4814f3df83e620d new file mode 100644 index 0000000..a258455 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fb/fb4c4a8236870b90a4814f3df83e620d differ diff --git a/Unity/Better Tracking/Library/Artifacts/fb/fb7ed34e6f32e736389882d633b97dbb b/Unity/Better Tracking/Library/Artifacts/fb/fb7ed34e6f32e736389882d633b97dbb new file mode 100644 index 0000000..4898989 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fb/fb7ed34e6f32e736389882d633b97dbb differ diff --git a/Unity/Better Tracking/Library/Artifacts/fb/fb92e65cc54640de944e5e5cdcf6e507 b/Unity/Better Tracking/Library/Artifacts/fb/fb92e65cc54640de944e5e5cdcf6e507 new file mode 100644 index 0000000..8781edf Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fb/fb92e65cc54640de944e5e5cdcf6e507 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fb/fbc72152212523a0b08a9bf29bbd7015 b/Unity/Better Tracking/Library/Artifacts/fb/fbc72152212523a0b08a9bf29bbd7015 new file mode 100644 index 0000000..0984b7c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fb/fbc72152212523a0b08a9bf29bbd7015 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fb/fbe4ccaf70fd8b83300b51129ce56670 b/Unity/Better Tracking/Library/Artifacts/fb/fbe4ccaf70fd8b83300b51129ce56670 new file mode 100644 index 0000000..f2bc30c Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fb/fbe4ccaf70fd8b83300b51129ce56670 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc3bd7b9973d1e99bf693be8f6cc0553 b/Unity/Better Tracking/Library/Artifacts/fc/fc3bd7b9973d1e99bf693be8f6cc0553 new file mode 100644 index 0000000..58f3e95 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc3bd7b9973d1e99bf693be8f6cc0553 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc4229b0d666351d2830413c783423b6 b/Unity/Better Tracking/Library/Artifacts/fc/fc4229b0d666351d2830413c783423b6 new file mode 100644 index 0000000..9ddedb7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc4229b0d666351d2830413c783423b6 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc4feafc4250dc6e3958098f37c5d947 b/Unity/Better Tracking/Library/Artifacts/fc/fc4feafc4250dc6e3958098f37c5d947 new file mode 100644 index 0000000..d1ba4ea Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc4feafc4250dc6e3958098f37c5d947 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc57b705a407b2d9852869c8e055ae1a b/Unity/Better Tracking/Library/Artifacts/fc/fc57b705a407b2d9852869c8e055ae1a new file mode 100644 index 0000000..8f04b86 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc57b705a407b2d9852869c8e055ae1a differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc68d0bca7d696ab1891c64fea662189 b/Unity/Better Tracking/Library/Artifacts/fc/fc68d0bca7d696ab1891c64fea662189 new file mode 100644 index 0000000..118b036 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc68d0bca7d696ab1891c64fea662189 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 b/Unity/Better Tracking/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 new file mode 100644 index 0000000..966aac2 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc6feb7626df851817e1612c43a23680 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc96e9b6261d29ef0f427b1c06e76576 b/Unity/Better Tracking/Library/Artifacts/fc/fc96e9b6261d29ef0f427b1c06e76576 new file mode 100644 index 0000000..c05c801 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc96e9b6261d29ef0f427b1c06e76576 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fc996418a19bca9315497576cd679a7f b/Unity/Better Tracking/Library/Artifacts/fc/fc996418a19bca9315497576cd679a7f new file mode 100644 index 0000000..198db39 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fc996418a19bca9315497576cd679a7f differ diff --git a/Unity/Better Tracking/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 b/Unity/Better Tracking/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 new file mode 100644 index 0000000..5da373d Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fc/fcefe457280e1b20bf2912badccf6bf8 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fd/fd20c805893cef3a9165121e9ce61de0 b/Unity/Better Tracking/Library/Artifacts/fd/fd20c805893cef3a9165121e9ce61de0 new file mode 100644 index 0000000..1aae138 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fd/fd20c805893cef3a9165121e9ce61de0 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fd/fd2250a43e5b780960a37dcf3e6e252f b/Unity/Better Tracking/Library/Artifacts/fd/fd2250a43e5b780960a37dcf3e6e252f new file mode 100644 index 0000000..560ea4f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fd/fd2250a43e5b780960a37dcf3e6e252f differ diff --git a/Unity/Better Tracking/Library/Artifacts/fd/fda506868d6bf8a53188290708bf67ce b/Unity/Better Tracking/Library/Artifacts/fd/fda506868d6bf8a53188290708bf67ce new file mode 100644 index 0000000..a104c61 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fd/fda506868d6bf8a53188290708bf67ce differ diff --git a/Unity/Better Tracking/Library/Artifacts/fd/fdec7c3c9d136e07c6ed8f7d30dcf2f2 b/Unity/Better Tracking/Library/Artifacts/fd/fdec7c3c9d136e07c6ed8f7d30dcf2f2 new file mode 100644 index 0000000..b47f150 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fd/fdec7c3c9d136e07c6ed8f7d30dcf2f2 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fd/fdfd46cc479f127dfa5bc7edb930bf92 b/Unity/Better Tracking/Library/Artifacts/fd/fdfd46cc479f127dfa5bc7edb930bf92 new file mode 100644 index 0000000..979efe4 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fd/fdfd46cc479f127dfa5bc7edb930bf92 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe023fec6208b6f7e193b18df84f8334 b/Unity/Better Tracking/Library/Artifacts/fe/fe023fec6208b6f7e193b18df84f8334 new file mode 100644 index 0000000..2512a61 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe023fec6208b6f7e193b18df84f8334 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe12b9d93e8fa9ff7bf0908a7f0aa966 b/Unity/Better Tracking/Library/Artifacts/fe/fe12b9d93e8fa9ff7bf0908a7f0aa966 new file mode 100644 index 0000000..402c53e Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe12b9d93e8fa9ff7bf0908a7f0aa966 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe475d93c30d68f706afc372c7782cad b/Unity/Better Tracking/Library/Artifacts/fe/fe475d93c30d68f706afc372c7782cad new file mode 100644 index 0000000..a367dcd Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe475d93c30d68f706afc372c7782cad differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe67d11e8fbb701a10c1be7170f03c59 b/Unity/Better Tracking/Library/Artifacts/fe/fe67d11e8fbb701a10c1be7170f03c59 new file mode 100644 index 0000000..69a236a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe67d11e8fbb701a10c1be7170f03c59 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe6990175bd6e091b3b3616cd6e298ff b/Unity/Better Tracking/Library/Artifacts/fe/fe6990175bd6e091b3b3616cd6e298ff new file mode 100644 index 0000000..f9705e7 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe6990175bd6e091b3b3616cd6e298ff differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe8d66333e2a124ea88926610a8b6a79 b/Unity/Better Tracking/Library/Artifacts/fe/fe8d66333e2a124ea88926610a8b6a79 new file mode 100644 index 0000000..01faa5b Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe8d66333e2a124ea88926610a8b6a79 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe9a19d29117cdba26de72a40f70ee20 b/Unity/Better Tracking/Library/Artifacts/fe/fe9a19d29117cdba26de72a40f70ee20 new file mode 100644 index 0000000..687f044 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe9a19d29117cdba26de72a40f70ee20 differ diff --git a/Unity/Better Tracking/Library/Artifacts/fe/fe9abe18279114c84435d2df8cd47171 b/Unity/Better Tracking/Library/Artifacts/fe/fe9abe18279114c84435d2df8cd47171 new file mode 100644 index 0000000..2daad11 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/fe/fe9abe18279114c84435d2df8cd47171 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ff090ffc8217d40459cd3d00fb0cedf7 b/Unity/Better Tracking/Library/Artifacts/ff/ff090ffc8217d40459cd3d00fb0cedf7 new file mode 100644 index 0000000..2ad935f Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ff090ffc8217d40459cd3d00fb0cedf7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ff19d10183d92bdfd29b9b3a30b716e7 b/Unity/Better Tracking/Library/Artifacts/ff/ff19d10183d92bdfd29b9b3a30b716e7 new file mode 100644 index 0000000..3227034 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ff19d10183d92bdfd29b9b3a30b716e7 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ff2a7e0ede18faff3ebafa36d9c86ddc b/Unity/Better Tracking/Library/Artifacts/ff/ff2a7e0ede18faff3ebafa36d9c86ddc new file mode 100644 index 0000000..f6df25a Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ff2a7e0ede18faff3ebafa36d9c86ddc differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 b/Unity/Better Tracking/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 new file mode 100644 index 0000000..5e3c113 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ff47b1b2f93218bee583c92542510735 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ff5466bfc68ce4205b5cdc398a4e107f b/Unity/Better Tracking/Library/Artifacts/ff/ff5466bfc68ce4205b5cdc398a4e107f new file mode 100644 index 0000000..5551d53 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ff5466bfc68ce4205b5cdc398a4e107f differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ff73026ab710f7d268c1e78bfb55a188 b/Unity/Better Tracking/Library/Artifacts/ff/ff73026ab710f7d268c1e78bfb55a188 new file mode 100644 index 0000000..d64e516 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ff73026ab710f7d268c1e78bfb55a188 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ffa1632bccb3968d7d2baff40be59e84 b/Unity/Better Tracking/Library/Artifacts/ff/ffa1632bccb3968d7d2baff40be59e84 new file mode 100644 index 0000000..91c9296 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ffa1632bccb3968d7d2baff40be59e84 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ffa3d290bf1086e5ab483f9b56f94936 b/Unity/Better Tracking/Library/Artifacts/ff/ffa3d290bf1086e5ab483f9b56f94936 new file mode 100644 index 0000000..03a2e67 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ffa3d290bf1086e5ab483f9b56f94936 differ diff --git a/Unity/Better Tracking/Library/Artifacts/ff/ffd0ff554e771ddc5333817f35aea63b b/Unity/Better Tracking/Library/Artifacts/ff/ffd0ff554e771ddc5333817f35aea63b new file mode 100644 index 0000000..0732534 Binary files /dev/null and b/Unity/Better Tracking/Library/Artifacts/ff/ffd0ff554e771ddc5333817f35aea63b differ diff --git a/Unity/Better Tracking/Library/AtlasCache/c7/c70504a8bf85930f9bb1bddc35095de5 b/Unity/Better Tracking/Library/AtlasCache/c7/c70504a8bf85930f9bb1bddc35095de5 new file mode 100644 index 0000000..1e35efa Binary files /dev/null and b/Unity/Better Tracking/Library/AtlasCache/c7/c70504a8bf85930f9bb1bddc35095de5 differ diff --git a/Unity/Better Tracking/Library/CurrentLayout-default.dwlt b/Unity/Better Tracking/Library/CurrentLayout-default.dwlt new file mode 100644 index 0000000..cd438aa --- /dev/null +++ b/Unity/Better Tracking/Library/CurrentLayout-default.dwlt @@ -0,0 +1,1587 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12004, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_PixelRect: + serializedVersion: 2 + x: 703 + y: 294 + width: 2796 + height: 1603 + m_ShowMode: 4 + m_Title: + m_RootView: {fileID: 8} + m_MinSize: {x: 875, y: 542} + m_MaxSize: {x: 10000, y: 10000} + m_Maximized: 0 +--- !u!114 &2 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: LightingExplorerWindow + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 957 + y: 0 + width: 1088 + height: 448 + m_MinSize: {x: 502, y: 271} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 14} + m_Panes: + - {fileID: 21} + - {fileID: 20} + - {fileID: 19} + - {fileID: 18} + - {fileID: 16} + - {fileID: 14} + m_Selected: 5 + m_LastSelected: 0 +--- !u!114 &3 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 7} + - {fileID: 2} + m_Position: + serializedVersion: 2 + x: 0 + y: 1105 + width: 2045 + height: 448 + m_MinSize: {x: 733, y: 271} + m_MaxSize: {x: 14003, y: 10021} + vertical: 0 + controlID: 300 +--- !u!114 &4 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 11} + - {fileID: 5} + m_Position: + serializedVersion: 2 + x: 0 + y: 30 + width: 2796 + height: 1553 + m_MinSize: {x: 1009, y: 492} + m_MaxSize: {x: 18004, y: 14042} + vertical: 0 + controlID: 108 +--- !u!114 &5 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 2045 + y: 0 + width: 751 + height: 1553 + m_MinSize: {x: 276, y: 71} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 25} + m_Panes: + - {fileID: 25} + - {fileID: 22} + - {fileID: 17} + - {fileID: 15} + m_Selected: 0 + m_LastSelected: 1 +--- !u!114 &6 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 608 + height: 1105 + m_MinSize: {x: 201, y: 221} + m_MaxSize: {x: 4001, y: 4021} + m_ActualView: {fileID: 26} + m_Panes: + - {fileID: 26} + - {fileID: 28} + m_Selected: 0 + m_LastSelected: 1 +--- !u!114 &7 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: ProjectBrowser + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 957 + height: 448 + m_MinSize: {x: 231, y: 271} + m_MaxSize: {x: 10001, y: 10021} + m_ActualView: {fileID: 24} + m_Panes: + - {fileID: 24} + - {fileID: 29} + m_Selected: 0 + m_LastSelected: 1 +--- !u!114 &8 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12008, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 9} + - {fileID: 4} + - {fileID: 10} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 2796 + height: 1603 + m_MinSize: {x: 875, y: 542} + m_MaxSize: {x: 10000, y: 10000} +--- !u!114 &9 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12011, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 2796 + height: 30 + m_MinSize: {x: 0, y: 0} + m_MaxSize: {x: 0, y: 0} + m_LastLoadedLayoutName: +--- !u!114 &10 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12042, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 0 + y: 1583 + width: 2796 + height: 20 + m_MinSize: {x: 0, y: 0} + m_MaxSize: {x: 0, y: 0} +--- !u!114 &11 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 12} + - {fileID: 3} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 2045 + height: 1553 + m_MinSize: {x: 733, y: 492} + m_MaxSize: {x: 14003, y: 14042} + vertical: 1 + controlID: 109 +--- !u!114 &12 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12010, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: + - {fileID: 6} + - {fileID: 13} + m_Position: + serializedVersion: 2 + x: 0 + y: 0 + width: 2045 + height: 1105 + m_MinSize: {x: 403, y: 221} + m_MaxSize: {x: 8003, y: 4021} + vertical: 0 + controlID: 110 +--- !u!114 &13 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12006, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_Children: [] + m_Position: + serializedVersion: 2 + x: 608 + y: 0 + width: 1437 + height: 1105 + m_MinSize: {x: 202, y: 221} + m_MaxSize: {x: 4002, y: 4021} + m_ActualView: {fileID: 27} + m_Panes: + - {fileID: 27} + - {fileID: 23} + m_Selected: 0 + m_LastSelected: 1 +--- !u!114 &14 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12097, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 500, y: 250} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Light Explorer + m_Image: {fileID: -1347227620855488341, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1660 + y: 1429 + width: 1086 + height: 427 + m_ViewDataDictionary: {fileID: 0} +--- !u!114 &15 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12141, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 300, y: 360} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Navigation + m_Image: {fileID: 1087843850482249999, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 2701 + y: 186 + width: 1053 + height: 1585 + m_ViewDataDictionary: {fileID: 0} +--- !u!114 &16 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 13202, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 400, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Frame Debug + m_Image: {fileID: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1313 + y: 1451 + width: 1240 + height: 463 + m_ViewDataDictionary: {fileID: 0} + m_ListWidth: 300 + m_PreviewDir: {x: 120, y: -20} + m_TreeViewState: + scrollPos: {x: 0, y: 4003} + m_SelectedIDs: 00000000 + m_LastClickedID: 0 + m_ExpandedIDs: deffffffdfffffffe0ffffffe1ffffffe2ffffffe3ffffffe4ffffffe5ffffffe6ffffffe7ffffffe8ffffffe9ffffffeaffffffebffffffecffffffedffffffeeffffffeffffffff0fffffff1fffffff2fffffff3fffffff4fffffff5fffffff6fffffff7fffffff8fffffff9fffffffafffffffbfffffffcfffffffdfffffffeffffff00000000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: +--- !u!114 &17 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12070, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 880, y: 216} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Profiler + m_Image: {fileID: -1089619856830078684, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 2703 + y: 185 + width: 890 + height: 1585 + m_ViewDataDictionary: {fileID: 0} + m_VertSplit: + ID: 3579 + splitterInitialOffset: 0 + currentActiveSplitter: -1 + realSizes: 1003000011030000 + relativeSizes: + - 0.5 + - 0.5 + minSizes: 6400000064000000 + maxSizes: 0000000000000000 + lastTotalSize: 1569 + splitSize: 6 + xOffset: 0 + m_Recording: 1 + m_ActiveNativePlatformSupportModule: + m_CurrentArea: 0 + m_ProfilerModules: + - id: 0 + - id: 1 + - id: 2 + - id: 3 + - id: 4 + - id: 5 + - id: 6 + - id: 7 + - id: 8 + - id: 9 + - id: 10 + - id: 11 + - id: 12 + m_ClearOnPlay: 0 + references: + version: 1 + 00000000: + type: {class: CPUProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + m_ViewType: 1 + m_UpdateViewLive: 0 + m_ProfilerViewFilteringOptions: 1 + m_FrameDataHierarchyView: + m_Serialized: 0 + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_MultiColumnHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_ThreadIndex: 0 + m_DetailedViewType: 0 + m_DetailedViewSpliterState: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: 0 + realSizes: + relativeSizes: [] + minSizes: + maxSizes: + lastTotalSize: 0 + splitSize: 0 + xOffset: 0 + m_DetailedObjectsView: + m_SelectedID: 0 + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_MultiColumnHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_VertSplit: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: 0 + realSizes: + relativeSizes: [] + minSizes: + maxSizes: + lastTotalSize: 0 + splitSize: 0 + xOffset: 0 + m_DetailedCallsView: + m_SelectedID: 0 + m_VertSplit: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: 0 + realSizes: + relativeSizes: [] + minSizes: + maxSizes: + lastTotalSize: 0 + splitSize: 0 + xOffset: 0 + m_CalleesTreeView: + m_ViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_ViewHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_CallersTreeView: + m_ViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_ViewHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_ThreadName: Main Thread + 00000001: + type: {class: GPUProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + m_ViewType: 0 + m_UpdateViewLive: 0 + m_ProfilerViewFilteringOptions: 1 + m_FrameDataHierarchyView: + m_Serialized: 0 + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_MultiColumnHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_ThreadIndex: 0 + m_DetailedViewType: 0 + m_DetailedViewSpliterState: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: 0 + realSizes: + relativeSizes: [] + minSizes: + maxSizes: + lastTotalSize: 0 + splitSize: 0 + xOffset: 0 + m_DetailedObjectsView: + m_SelectedID: 0 + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_MultiColumnHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_VertSplit: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: 0 + realSizes: + relativeSizes: [] + minSizes: + maxSizes: + lastTotalSize: 0 + splitSize: 0 + xOffset: 0 + m_DetailedCallsView: + m_SelectedID: 0 + m_VertSplit: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: 0 + realSizes: + relativeSizes: [] + minSizes: + maxSizes: + lastTotalSize: 0 + splitSize: 0 + xOffset: 0 + m_CalleesTreeView: + m_ViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_ViewHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_CallersTreeView: + m_ViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_ViewHeaderState: + m_Columns: [] + m_VisibleColumns: + m_SortedColumns: + m_ThreadName: Main Thread + 00000002: + type: {class: RenderingProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + 00000003: + type: {class: MemoryProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + m_ViewSplit: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: -1 + realSizes: 0000000000000000 + relativeSizes: + - 0.7 + - 0.3 + minSizes: c201000032000000 + maxSizes: 0000000000000000 + lastTotalSize: 0 + splitSize: 6 + xOffset: 0 + 00000004: + type: {class: AudioProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + m_ShowInactiveDSPChains: 0 + m_HighlightAudibleDSPChains: 1 + m_DSPGraphZoomFactor: 1 + 00000005: + type: {class: VideoProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + 00000006: + type: {class: PhysicsProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + 00000007: + type: {class: Physics2DProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + 00000008: + type: {class: NetworkingMessagesProfilerModule, ns: UnityEditorInternal.Profiling, + asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + 00000009: + type: {class: NetworkingOperationsProfilerModule, ns: UnityEditorInternal.Profiling, + asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + m_NetworkSplit: + ID: 0 + splitterInitialOffset: 0 + currentActiveSplitter: -1 + realSizes: 0000000000000000 + relativeSizes: + - 0.2 + - 0.8 + minSizes: 6400000064000000 + maxSizes: 0000000000000000 + lastTotalSize: 0 + splitSize: 6 + xOffset: 0 + msgNames: + - UserMessage + - ObjectDestroy + - ClientRpc + - ObjectSpawn + - Owner + - Command + - LocalPlayerTransform + - SyncEvent + - SyncVars + - SyncList + - ObjectSpawnScene + - NetworkInfo + - SpawnFinished + - ObjectHide + - CRC + - ClientAuthority + 0000000A: + type: {class: UIProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + 0000000B: + type: {class: UIDetailsProfilerModule, ns: UnityEditorInternal.Profiling, asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} + 0000000C: + type: {class: GlobalIlluminationProfilerModule, ns: UnityEditorInternal.Profiling, + asm: UnityEditor} + data: + m_PaneScroll: {x: 0, y: 0} +--- !u!114 &18 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12061, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Hierarchy + m_Image: {fileID: 7966133145522015247, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1584 + y: 1383 + width: 1031 + height: 395 + m_ViewDataDictionary: {fileID: 0} + m_SceneHierarchy: + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: 6afbffff + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 2} + m_SearchString: + m_ExpandedScenes: [] + m_CurrenRootInstanceID: 0 + m_LockTracker: + m_IsLocked: 0 + m_CurrentSortingName: TransformSorting + m_WindowGUID: 8ddc868532c36f64b99a0327a86d0385 +--- !u!114 &19 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 13854, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 300, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Project Settings + m_Image: {fileID: -5712115415447495865, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1469 + y: 1488 + width: 1270 + height: 459 + m_ViewDataDictionary: {fileID: 0} + m_PosLeft: {x: 0, y: 0} + m_PosRight: {x: 0, y: 414} + m_Scope: 1 + m_SplitterFlex: 0.2 +--- !u!114 &20 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12914, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Animator + m_Image: {fileID: -1673928668082335149, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1313 + y: 1451 + width: 1240 + height: 463 + m_ViewDataDictionary: {fileID: 0} + m_ViewTransforms: + m_KeySerializationHelper: + - {fileID: 1107599827245350322, guid: cefba5618c6976a4993e169bcf805245, type: 2} + m_ValueSerializationHelper: + - e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_PreviewAnimator: {fileID: 0} + m_AnimatorController: {fileID: 9100000, guid: cefba5618c6976a4993e169bcf805245, + type: 2} + m_BreadCrumbs: + - m_Target: {fileID: 1107599827245350322, guid: cefba5618c6976a4993e169bcf805245, + type: 2} + m_ScrollPosition: {x: 0, y: 0} + stateMachineGraph: {fileID: 0} + stateMachineGraphGUI: {fileID: 0} + blendTreeGraph: {fileID: 0} + blendTreeGraphGUI: {fileID: 0} + m_AutoLiveLink: 1 + m_MiniTool: 0 + m_LockTracker: + m_IsLocked: 0 + m_CurrentEditor: 1 + m_LayerEditor: + m_SelectedLayerIndex: 0 +--- !u!114 &21 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 13953, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 700, y: 250} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Packages + m_Image: {fileID: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1217 + y: 1540 + width: 1086 + height: 429 + m_ViewDataDictionary: {fileID: 0} + m_SplitPaneLeftWidth: 0 +--- !u!114 &22 +MonoBehaviour: + m_ObjectHideFlags: 52 + 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: 12079, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 390, y: 390} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Lighting + m_Image: {fileID: -1347227620855488341, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 2430 + y: 259 + width: 749 + height: 1534 + m_ViewDataDictionary: {fileID: 0} +--- !u!114 &23 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12111, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 400, y: 100} + m_MaxSize: {x: 2048, y: 2048} + m_TitleContent: + m_Text: Asset Store + m_Image: {fileID: -8693916549880196297, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1148 + y: 445 + width: 1415 + height: 1086 + m_ViewDataDictionary: {fileID: 0} +--- !u!114 &24 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12014, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 230, y: 250} + m_MaxSize: {x: 10000, y: 10000} + m_TitleContent: + m_Text: Project + m_Image: {fileID: -5467254957812901981, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 703 + y: 1429 + width: 956 + height: 427 + m_ViewDataDictionary: {fileID: 0} + m_SearchFilter: + m_NameFilter: + m_ClassNames: [] + m_AssetLabels: [] + m_AssetBundleNames: [] + m_VersionControlStates: [] + m_SoftLockControlStates: [] + m_ReferencingInstanceIDs: + m_SceneHandles: + m_ShowAllHits: 0 + m_SkipHidden: 0 + m_SearchArea: 1 + m_Folders: + - Assets/Prefabs + m_ViewMode: 1 + m_StartGridSize: 16 + m_LastFolders: + - Assets/Prefabs + m_LastFoldersGridSize: 16 + m_LastProjectPath: C:\Users\david\Documents\KSP Dev\Projects\BetterTracking\Unity\Better + Tracking + m_LockTracker: + m_IsLocked: 0 + m_FolderTreeState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: 003a0000 + m_LastClickedID: 14848 + m_ExpandedIDs: 00000000d2390000d4390000d6390000d839000000ca9a3bffffff7f + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 7} + m_SearchString: + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_AssetTreeState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: + m_LastClickedID: 0 + m_ExpandedIDs: 00000000d2390000d4390000d6390000d8390000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 0} + m_SearchString: + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_ListAreaState: + m_SelectedInstanceIDs: + m_LastClickedInstanceID: 0 + m_HadKeyboardFocusLastEvent: 1 + m_ExpandedInstanceIDs: c6230000e23800000c5fffff884200007a460000c23700007a4100007e580000284100007e4b0000b44a00007e540000403f0000964e0000124f000020410000245d000058a100007242000012560000e0e900005eea0000e48c0000da8c0000e24000002ce80000de2600007a5800007458000082290000b62c0000f02a0000043c000000000000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 1 + m_ClientGUIView: {fileID: 7} + m_CreateAssetUtility: + m_EndAction: {fileID: 0} + m_InstanceID: 0 + m_Path: + m_Icon: {fileID: 0} + m_ResourceFile: + m_NewAssetIndexInList: -1 + m_ScrollPosition: {x: 0, y: 0} + m_GridSize: 16 + m_SkipHiddenPackages: 0 + m_DirectoriesAreaWidth: 289 +--- !u!114 &25 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12019, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 275, y: 50} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Inspector + m_Image: {fileID: -2667387946076563598, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 2748 + y: 324 + width: 750 + height: 1532 + m_ViewDataDictionary: {fileID: 0} + m_OpenAddComponentMenu: 0 + m_ObjectsLockedBeforeSerialization: [] + m_InstanceIDsLockedBeforeSerialization: + m_LockTracker: + m_IsLocked: 0 + m_PreviewResizer: + m_CachedPref: 397 + m_ControlHash: -371814159 + m_PrefName: Preview_InspectorPreview + m_PreviewWindow: {fileID: 0} + m_LastInspectedObjectInstanceID: -1 + m_LastVerticalScrollValue: 0 +--- !u!114 &26 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12061, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Hierarchy + m_Image: {fileID: 7966133145522015247, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 703 + y: 324 + width: 607 + height: 1084 + m_ViewDataDictionary: {fileID: 0} + m_SceneHierarchy: + m_TreeViewState: + scrollPos: {x: 0, y: 0} + m_SelectedIDs: e0350000 + m_LastClickedID: 0 + m_ExpandedIDs: 6afbffff7c350000 + m_RenameOverlay: + m_UserAcceptedRename: 0 + m_Name: + m_OriginalName: + m_EditFieldRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 0 + height: 0 + m_UserData: 0 + m_IsWaitingForDelay: 0 + m_IsRenaming: 0 + m_OriginalEventType: 11 + m_IsRenamingFilename: 0 + m_ClientGUIView: {fileID: 6} + m_SearchString: + m_ExpandedScenes: [] + m_CurrenRootInstanceID: 0 + m_LockTracker: + m_IsLocked: 0 + m_CurrentSortingName: TransformSorting + m_WindowGUID: 626f051ae32b9fb4ebde24d40cfb4ec7 +--- !u!114 &27 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12013, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Scene + m_Image: {fileID: 2593428753322112591, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 1311 + y: 324 + width: 1435 + height: 1084 + m_ViewDataDictionary: {fileID: 0} + m_ShowContextualTools: 0 + m_WindowGUID: c066f9c520253944293f675c5f21f565 + m_Gizmos: 1 + m_SceneIsLit: 0 + m_SceneLighting: 1 + m_2DMode: 1 + m_isRotationLocked: 0 + m_PlayAudio: 0 + m_AudioPlay: 0 + m_Position: + m_Target: {x: 129.70059, y: 487.37686, z: -513.943} + speed: 2 + m_Value: {x: 197.12158, y: 704.8559, z: -7.1126013} + m_RenderMode: 0 + m_CameraMode: + drawMode: 0 + name: Shaded + section: Shading Mode + m_ValidateTrueMetals: 0 + m_DoValidateTrueMetals: 0 + m_ExposureSliderValue: 0 + m_ExposureSliderMax: 10 + m_SceneViewState: + showFog: 1 + showMaterialUpdate: 1 + showSkybox: 0 + showFlares: 1 + showImageEffects: 1 + showParticleSystems: 1 + m_Grid: + xGrid: + m_Fade: + m_Target: 0 + speed: 2 + m_Value: 0 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 0, y: 0} + yGrid: + m_Fade: + m_Target: 0 + speed: 2 + m_Value: 1 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 1, y: 1} + zGrid: + m_Fade: + m_Target: 1 + speed: 2 + m_Value: 1 + m_Color: {r: 0.5, g: 0.5, b: 0.5, a: 0.4} + m_Pivot: {x: 0, y: 0, z: 0} + m_Size: {x: 1, y: 1} + m_ShowGrid: 1 + m_GridAxis: 1 + m_gridOpacity: 0.5 + m_Rotation: + m_Target: {x: 0, y: 0, z: 0, w: 1} + speed: 2 + m_Value: {x: 0, y: 0, z: 0, w: 1} + m_Size: + m_Target: 369.6161 + speed: 2 + m_Value: 200.36069 + m_Ortho: + m_Target: 1 + speed: 2 + m_Value: 1 + m_CameraSettings: + m_Speed: 1 + m_SpeedNormalized: 0.49748743 + m_SpeedMin: 0.01 + m_SpeedMax: 2 + m_EasingEnabled: 1 + m_EasingDuration: 0.4 + m_AccelerationEnabled: 1 + m_FieldOfViewHorizontalOrVertical: 60 + m_NearClip: 0.03 + m_FarClip: 10000 + m_DynamicClip: 1 + m_OcclusionCulling: 0 + m_LastSceneViewRotation: {x: -0.08717229, y: 0.89959055, z: -0.21045254, w: -0.3726226} + m_LastSceneViewOrtho: 0 + m_ReplacementShader: {fileID: 0} + m_ReplacementString: + m_SceneVisActive: 1 + m_LastLockedObject: {fileID: 0} + m_ViewIsLockedToObject: 0 +--- !u!114 &28 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12015, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 200, y: 200} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Game + m_Image: {fileID: -6423792434712278376, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 976 + y: 335 + width: 574 + height: 998 + m_ViewDataDictionary: {fileID: 0} + m_SerializedViewNames: [] + m_SerializedViewValues: [] + m_SerializedCustomFieldsNames: [] + m_SerializedCustomFieldsValues: [] + m_PlayModeViewName: GameView + m_ShowGizmos: 0 + m_TargetDisplay: 0 + m_ClearColor: {r: 0, g: 0, b: 0, a: 0} + m_TargetSize: {x: 1024, y: 768} + m_TextureFilterMode: 0 + m_TextureHideFlags: 61 + m_RenderIMGUI: 0 + m_MaximizeOnPlay: 0 + m_UseMipMap: 0 + m_VSyncEnabled: 0 + m_Gizmos: 0 + m_Stats: 0 + m_SelectedSizes: 06000000000000000000000000000000000000000000000000000000000000000000000000000000 + m_ZoomArea: + m_HRangeLocked: 0 + m_VRangeLocked: 0 + hZoomLockedByDefault: 0 + vZoomLockedByDefault: 0 + m_HBaseRangeMin: -512 + m_HBaseRangeMax: 512 + m_VBaseRangeMin: -384 + m_VBaseRangeMax: 384 + m_HAllowExceedBaseRangeMin: 1 + m_HAllowExceedBaseRangeMax: 1 + m_VAllowExceedBaseRangeMin: 1 + m_VAllowExceedBaseRangeMax: 1 + m_ScaleWithWindow: 0 + m_HSlider: 0 + m_VSlider: 0 + m_IgnoreScrollWheelUntilClicked: 0 + m_EnableMouseInput: 1 + m_EnableSliderZoomHorizontal: 0 + m_EnableSliderZoomVertical: 0 + m_UniformScale: 1 + m_UpDirection: 1 + m_DrawArea: + serializedVersion: 2 + x: 0 + y: 0 + width: 574 + height: 998 + m_Scale: {x: 0.5605469, y: 0.5605469} + m_Translation: {x: 287, y: 499} + m_MarginLeft: 0 + m_MarginRight: 0 + m_MarginTop: 0 + m_MarginBottom: 0 + m_LastShownAreaInsideMargins: + serializedVersion: 2 + x: -512 + y: -890.2021 + width: 1024 + height: 1780.4042 + m_MinimalGUI: 1 + m_defaultScale: 0.5605469 + m_LastWindowPixelSize: {x: 574, y: 998} + m_ClearInEditMode: 1 + m_NoCameraWarning: 1 + m_LowResolutionForAspectRatios: 01000001000000000000 + m_XRRenderMode: 0 + m_RenderTexture: {fileID: 0} +--- !u!114 &29 +MonoBehaviour: + m_ObjectHideFlags: 52 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 1 + m_Script: {fileID: 12003, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_MinSize: {x: 100, y: 100} + m_MaxSize: {x: 4000, y: 4000} + m_TitleContent: + m_Text: Console + m_Image: {fileID: -4327648978806127646, guid: 0000000000000000d000000000000000, + type: 0} + m_Tooltip: + m_Pos: + serializedVersion: 2 + x: 98 + y: 1441 + width: 956 + height: 427 + m_ViewDataDictionary: {fileID: 0} diff --git a/Unity/Better Tracking/Library/EditorOnlyScriptingSettings.json b/Unity/Better Tracking/Library/EditorOnlyScriptingSettings.json new file mode 100644 index 0000000..8e1824c --- /dev/null +++ b/Unity/Better Tracking/Library/EditorOnlyScriptingSettings.json @@ -0,0 +1 @@ +{"m_DefineSymbols":[],"m_AllowUnsafeCode":false} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/EditorSnapSettings.asset b/Unity/Better Tracking/Library/EditorSnapSettings.asset new file mode 100644 index 0000000..7a90624 --- /dev/null +++ b/Unity/Better Tracking/Library/EditorSnapSettings.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &1 +MonoBehaviour: + m_ObjectHideFlags: 61 + 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: 13954, guid: 0000000000000000e000000000000000, type: 0} + m_Name: + m_EditorClassIdentifier: + m_SnapEnabled: 0 + m_SnapSettings: + m_SnapValue: {x: 0.25, y: 0.25, z: 0.25} + m_SnapMultiplier: {x: 2048, y: 2048, z: 2048} + m_Rotation: 15 + m_Scale: 1 diff --git a/Unity/Better Tracking/Library/LastBuild.buildreport b/Unity/Better Tracking/Library/LastBuild.buildreport index 9efce20..4147d34 100644 Binary files a/Unity/Better Tracking/Library/LastBuild.buildreport and b/Unity/Better Tracking/Library/LastBuild.buildreport differ diff --git a/Unity/Better Tracking/Library/LastSceneManagerSetup.txt b/Unity/Better Tracking/Library/LastSceneManagerSetup.txt index ab61620..2483e69 100644 --- a/Unity/Better Tracking/Library/LastSceneManagerSetup.txt +++ b/Unity/Better Tracking/Library/LastSceneManagerSetup.txt @@ -2,3 +2,4 @@ sceneSetups: - path: Assets/UI.unity isLoaded: 1 isActive: 1 + isSubScene: 0 diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore new file mode 100644 index 0000000..1586aea --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/.npmignore @@ -0,0 +1,6 @@ + +automation/** +utr_output/** +.Editor/** +.yamato/** +*.zip* \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md new file mode 100644 index 0000000..3c6c85d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md @@ -0,0 +1,31 @@ +# Changelog +All notable changes to this package will be documented in this file. + +The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). + +## [1.2.16] - 2019-02-11 +Update stylesheet to pass USS validation + +## [1.2.15] - 2018-11-16 +Added support for non-experimental UIElements. + +## [1.2.11] - 2018-09-04 +Made some performance improvements to reduce impact on ReloadAssemblies. + +## [1.2.9] - 2018-08-13 +Test issues for the Collab History Window are now fixed. + +## [1.2.7] - 2018-08-07 +Toolbar drop-down will no longer show up when package is uninstalled. + +## [1.2.6] - 2018-06-15 +Fixed an issue where Collab's History window wouldn't load properly. + +## [1.2.5] - 2018-05-21 +This is the first release of *Unity Package CollabProxy*. + +### Added +- Collab history and toolbar windows +- Collab view and presenter classes +- Collab Editor tests for view and presenter diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta new file mode 100644 index 0000000..38274a6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 782c49e6e68074dc7ba12c95537825ce +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md new file mode 100644 index 0000000..57808d5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md @@ -0,0 +1,9 @@ + + + + Unity.CollabProxy.Dependencies + 1.1.0-experimental + Rohit Garg + Dependencies for the CollabProxy package + + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta new file mode 100644 index 0000000..24e45c2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/DEPENDENCIES.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 470530e667ad4475786b28fa3187ce95 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md new file mode 100644 index 0000000..c1800d6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Documentation~/collab-proxy.md @@ -0,0 +1,5 @@ +# About Unity Collaborate + +Collaborate is a simple way for teams to save, share, and sync their Unity project. + +Please refer to the online documentation [here.](https://docs.unity3d.com/Manual/UnityCollaborate.html) \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta new file mode 100644 index 0000000..b54ca87 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d31e5d760880a4e52a3a75322481d0d2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs new file mode 100644 index 0000000..d7266b6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs @@ -0,0 +1,4 @@ +using System.Runtime.CompilerServices; +using UnityEngine; + +[assembly: InternalsVisibleTo("Unity.CollabProxy.EditorTests")] diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta new file mode 100644 index 0000000..e384b31 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d4ef26aa386b44923b61c9c4b505a67c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta new file mode 100644 index 0000000..694fc4e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c18cb9388313e4287ad5895ee735c47d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs new file mode 100644 index 0000000..029ce1c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs @@ -0,0 +1,24 @@ +using UnityEditor; +using UnityEditor.Collaboration; +using UnityEngine; + +namespace CollabProxy.UI +{ + [InitializeOnLoad] + public class Bootstrap + { + private const float kCollabToolbarButtonWidth = 78.0f; + + static Bootstrap() + { + Collab.ShowHistoryWindow = CollabHistoryWindow.ShowHistoryWindow; + Collab.ShowToolbarAtPosition = CollabToolbarWindow.ShowCenteredAtPosition; + Collab.IsToolbarVisible = CollabToolbarWindow.IsVisible; + Collab.CloseToolbar = CollabToolbarWindow.CloseToolbar; + Toolbar.AddSubToolbar(new CollabToolbarButton + { + Width = kCollabToolbarButtonWidth + }); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta new file mode 100644 index 0000000..641d54b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Bootstrap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8aa8171e088f94069bbd1978a053f7dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs new file mode 100644 index 0000000..c7f90aa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs @@ -0,0 +1,21 @@ +using System; + +namespace UnityEditor.Collaboration +{ + internal static class CollabAnalytics + { + [Serializable] + private struct CollabUserActionAnalyticsEvent + { + public string category; + public string action; + } + + public static void SendUserAction(string category, string action) + { + EditorAnalytics.SendCollabUserAction(new CollabUserActionAnalyticsEvent() { category = category, action = action }); + } + + public static readonly string historyCategoryString = "History"; + }; +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta new file mode 100644 index 0000000..2f46e9b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabAnalytics.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f944311c8fff2479fa3ba741f6039fc8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs new file mode 100644 index 0000000..b855bce --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs @@ -0,0 +1,330 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using UnityEditor.Collaboration; + +#if UNITY_2019_1_OR_NEWER +using UnityEditor.UIElements; +using UnityEngine.UIElements; +#else +using UnityEditor.Experimental.UIElements; +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +using UnityEngine; +using UnityEditor.Connect; + +namespace UnityEditor +{ + internal class CollabHistoryWindow : EditorWindow, ICollabHistoryWindow + { +#if UNITY_2019_1_OR_NEWER + private const string ResourcesPath = "Packages/com.unity.collab-proxy/Editor/Resources/Styles/"; +#else + private const string ResourcesPath = "StyleSheets/"; +#endif + + + const string kWindowTitle = "Collab History"; + const string kServiceUrl = "developer.cloud.unity3d.com"; + + [MenuItem("Window/Asset Management/Collab History", false, 1)] + public static void ShowHistoryWindow() + { + EditorWindow.GetWindow(kWindowTitle); + } + + [MenuItem("Window/Asset Management/Collab History", true)] + public static bool ValidateShowHistoryWindow() + { + return Collab.instance.IsCollabEnabledForCurrentProject(); + } + + CollabHistoryPresenter m_Presenter; + Dictionary m_Views; + List m_HistoryItems = new List(); + HistoryState m_State; + VisualElement m_Container; + PagedListView m_Pager; + ScrollView m_HistoryView; + int m_ItemsPerPage = 5; + string m_InProgressRev; + bool m_RevisionActionsEnabled; + + public CollabHistoryWindow() + { + minSize = new Vector2(275, 50); + } + + public void OnEnable() + { + SetupGUI(); + name = "CollabHistory"; + + if (m_Presenter == null) + { + m_Presenter = new CollabHistoryPresenter(this, new CollabHistoryItemFactory(), new RevisionsService(Collab.instance, UnityConnect.instance)); + } + m_Presenter.OnWindowEnabled(); + } + + public void OnDisable() + { + m_Presenter.OnWindowDisabled(); + } + + public bool revisionActionsEnabled + { + get { return m_RevisionActionsEnabled; } + set + { + if (m_RevisionActionsEnabled == value) + return; + + m_RevisionActionsEnabled = value; + foreach (var historyItem in m_HistoryItems) + { + historyItem.RevisionActionsEnabled = value; + } + } + } + + private void AddStyleSheetPath(VisualElement root, string path) + { +#if UNITY_2019_1_OR_NEWER + root.styleSheets.Add(EditorGUIUtility.Load(path) as StyleSheet); +#else + root.AddStyleSheetPath(path); +#endif + } + + + public void SetupGUI() + { +#if UNITY_2019_1_OR_NEWER + var root = this.rootVisualElement; +#else + var root = this.GetRootVisualContainer(); +#endif + AddStyleSheetPath(root, ResourcesPath + "CollabHistoryCommon.uss"); + if (EditorGUIUtility.isProSkin) + { + AddStyleSheetPath(root, ResourcesPath + "CollabHistoryDark.uss"); + } + else + { + AddStyleSheetPath(root, ResourcesPath + "CollabHistoryLight.uss"); + } + + m_Container = new VisualElement(); + m_Container.StretchToParentSize(); + root.Add(m_Container); + + m_Pager = new PagedListView() + { + name = "PagedElement", + pageSize = m_ItemsPerPage + }; + + var errorView = new StatusView() + { + message = "An Error Occurred", + icon = EditorGUIUtility.LoadIconRequired("Collab.Warning") as Texture, + }; + + var noInternetView = new StatusView() + { + message = "No Internet Connection", + icon = EditorGUIUtility.LoadIconRequired("Collab.NoInternet") as Texture, + }; + + var maintenanceView = new StatusView() + { + message = "Maintenance", + }; + + var loginView = new StatusView() + { + message = "Sign in to access Collaborate", + buttonText = "Sign in...", + callback = SignInClick, + }; + + var noSeatView = new StatusView() + { + message = "Ask your project owner for access to Unity Teams", + buttonText = "Learn More", + callback = NoSeatClick, + }; + + var waitingView = new StatusView() + { + message = "Updating...", + }; + + m_HistoryView = new ScrollView() { name = "HistoryContainer", showHorizontal = false}; + m_HistoryView.contentContainer.StretchToParentWidth(); + m_HistoryView.Add(m_Pager); + + m_Views = new Dictionary() + { + {HistoryState.Error, errorView}, + {HistoryState.Offline, noInternetView}, + {HistoryState.Maintenance, maintenanceView}, + {HistoryState.LoggedOut, loginView}, + {HistoryState.NoSeat, noSeatView}, + {HistoryState.Waiting, waitingView}, + {HistoryState.Ready, m_HistoryView} + }; + } + + public void UpdateState(HistoryState state, bool force) + { + if (state == m_State && !force) + return; + + m_State = state; + switch (state) + { + case HistoryState.Ready: + UpdateHistoryView(m_Pager); + break; + case HistoryState.Disabled: + Close(); + return; + } + + m_Container.Clear(); + m_Container.Add(m_Views[m_State]); + } + + public void UpdateRevisions(IEnumerable datas, string tip, int totalRevisions, int currentPage) + { + var elements = new List(); + var isFullDateObtained = false; // Has everything from this date been obtained? + m_HistoryItems.Clear(); + + if (datas != null) + { + DateTime currentDate = DateTime.MinValue; + foreach (var data in datas) + { + if (data.timeStamp.Date != currentDate.Date) + { + elements.Add(new CollabHistoryRevisionLine(data.timeStamp, isFullDateObtained)); + currentDate = data.timeStamp; + } + + var item = new CollabHistoryItem(data); + m_HistoryItems.Add(item); + + var container = new VisualElement(); + container.style.flexDirection = FlexDirection.Row; + if (data.current) + { + isFullDateObtained = true; + container.AddToClassList("currentRevision"); + container.AddToClassList("obtainedRevision"); + } + else if (data.obtained) + { + container.AddToClassList("obtainedRevision"); + } + else + { + container.AddToClassList("absentRevision"); + } + // If we use the index as-is, the latest commit will become #1, but we want it to be last + container.Add(new CollabHistoryRevisionLine(data.index)); + container.Add(item); + elements.Add(container); + } + } + + m_HistoryView.scrollOffset = new Vector2(0, 0); + m_Pager.totalItems = totalRevisions; + m_Pager.curPage = currentPage; + m_Pager.items = elements; + } + + public string inProgressRevision + { + get { return m_InProgressRev; } + set + { + m_InProgressRev = value; + foreach (var historyItem in m_HistoryItems) + { + historyItem.SetInProgressStatus(value); + } + } + } + + public int itemsPerPage + { + set + { + if (m_ItemsPerPage == value) + return; + m_Pager.pageSize = m_ItemsPerPage; + } + } + + public PageChangeAction OnPageChangeAction + { + set { m_Pager.OnPageChanged = value; } + } + + public RevisionAction OnGoBackAction + { + set { CollabHistoryItem.s_OnGoBack = value; } + } + + public RevisionAction OnUpdateAction + { + set { CollabHistoryItem.s_OnUpdate = value; } + } + + public RevisionAction OnRestoreAction + { + set { CollabHistoryItem.s_OnRestore = value; } + } + + public ShowBuildAction OnShowBuildAction + { + set { CollabHistoryItem.s_OnShowBuild = value; } + } + + public Action OnShowServicesAction + { + set { CollabHistoryItem.s_OnShowServices = value; } + } + + void UpdateHistoryView(VisualElement history) + { + } + + void NoSeatClick() + { + var connection = UnityConnect.instance; + var env = connection.GetEnvironment(); + // Map environment to url - prod is special + if (env == "production") + env = ""; + else + env += "-"; + + var url = "https://" + env + kServiceUrl + + "/orgs/" + connection.GetOrganizationId() + + "/projects/" + connection.GetProjectName() + + "/unity-teams/"; + Application.OpenURL(url); + } + + void SignInClick() + { + UnityConnect.instance.ShowLogin(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta new file mode 100644 index 0000000..74358d4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabHistoryWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fed9dda667cab45d398d06402bba03f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs new file mode 100644 index 0000000..eebe4ac --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs @@ -0,0 +1,297 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Collaboration; +using UnityEditor.Connect; +using UnityEditor.Web; +using UnityEngine; + +namespace UnityEditor +{ + internal class CollabToolbarButton : SubToolbar, IDisposable + { + // Must match s_CollabIcon array + enum CollabToolbarState + { + NeedToEnableCollab, + UpToDate, + Conflict, + OperationError, + ServerHasChanges, + FilesToPush, + InProgress, + Disabled, + Offline + } + + private class CollabToolbarContent + { + readonly string m_iconName; + readonly string m_toolTip; + readonly CollabToolbarState m_state; + + static Dictionary m_CollabIcons; + + public CollabToolbarState RegisteredForState + { + get { return m_state; } + } + + public GUIContent GuiContent + { + get + { + if (m_CollabIcons == null) + { + m_CollabIcons = new Dictionary(); + } + + if (!m_CollabIcons.ContainsKey(this)) + { + m_CollabIcons.Add(this, EditorGUIUtility.TrTextContentWithIcon("Collab", m_toolTip, m_iconName)); + } + + return m_CollabIcons[this]; + } + } + + public CollabToolbarContent(CollabToolbarState state, string iconName, string toolTip) + { + m_state = state; + m_iconName = iconName; + m_toolTip = toolTip; + } + } + + CollabToolbarContent[] m_toolbarContents; + CollabToolbarState m_CollabToolbarState = CollabToolbarState.UpToDate; + const float kCollabButtonWidth = 78.0f; + ButtonWithAnimatedIconRotation m_CollabButton; + string m_DynamicTooltip; + static bool m_ShowCollabTooltip = false; + + private GUIContent currentCollabContent + { + get + { + CollabToolbarContent toolbarContent = + m_toolbarContents.FirstOrDefault(c => c.RegisteredForState.Equals(m_CollabToolbarState)); + GUIContent content = new GUIContent(toolbarContent == null? m_toolbarContents.First().GuiContent : toolbarContent.GuiContent); + if (!m_ShowCollabTooltip) + { + content.tooltip = null; + } + else if (m_DynamicTooltip != "") + { + content.tooltip = m_DynamicTooltip; + } + + if (Collab.instance.AreTestsRunning()) + { + content.text = "CTF"; + } + + return content; + } + } + + public CollabToolbarButton() + { + m_toolbarContents = new[] + { + new CollabToolbarContent(CollabToolbarState.NeedToEnableCollab, "CollabNew", " You need to enable collab."), + new CollabToolbarContent(CollabToolbarState.UpToDate, "Collab", " You are up to date."), + new CollabToolbarContent(CollabToolbarState.Conflict, "CollabConflict", " Please fix your conflicts prior to publishing."), + new CollabToolbarContent(CollabToolbarState.OperationError, "CollabError", " Last operation failed. Please retry later."), + new CollabToolbarContent(CollabToolbarState.ServerHasChanges, "CollabPull", " Please update, there are server changes."), + new CollabToolbarContent(CollabToolbarState.FilesToPush, "CollabPush", " You have files to publish."), + new CollabToolbarContent(CollabToolbarState.InProgress, "CollabProgress", " Operation in progress."), + new CollabToolbarContent(CollabToolbarState.Disabled, "CollabNew", " Collab is disabled."), + new CollabToolbarContent(CollabToolbarState.Offline, "CollabNew", " Please check your network connection.") + }; + + Collab.instance.StateChanged += OnCollabStateChanged; + UnityConnect.instance.StateChanged += OnUnityConnectStateChanged; + UnityConnect.instance.UserStateChanged += OnUnityConnectUserStateChanged; + } + + void OnUnityConnectUserStateChanged(UserInfo state) + { + UpdateCollabToolbarState(); + } + + void OnUnityConnectStateChanged(ConnectInfo state) + { + UpdateCollabToolbarState(); + } + + public override void OnGUI(Rect rect) + { + DoCollabDropDown(rect); + } + + Rect GUIToScreenRect(Rect guiRect) + { + Vector2 screenPoint = GUIUtility.GUIToScreenPoint(new Vector2(guiRect.x, guiRect.y)); + guiRect.x = screenPoint.x; + guiRect.y = screenPoint.y; + return guiRect; + } + + void ShowPopup(Rect rect) + { + // window should be centered on the button + ReserveRight(kCollabButtonWidth / 2, ref rect); + ReserveBottom(5, ref rect); + // calculate screen rect before saving assets since it might open the AssetSaveDialog window + var screenRect = GUIToScreenRect(rect); + // save all the assets + AssetDatabase.SaveAssets(); + if (Collab.ShowToolbarAtPosition != null && Collab.ShowToolbarAtPosition(screenRect)) + { + GUIUtility.ExitGUI(); + } + } + + void DoCollabDropDown(Rect rect) + { + UpdateCollabToolbarState(); + GUIStyle collabButtonStyle = "OffsetDropDown"; + bool showPopup = Toolbar.requestShowCollabToolbar; + Toolbar.requestShowCollabToolbar = false; + + bool enable = !EditorApplication.isPlaying; + + using (new EditorGUI.DisabledScope(!enable)) + { + bool animate = m_CollabToolbarState == CollabToolbarState.InProgress; + + EditorGUIUtility.SetIconSize(new Vector2(12, 12)); + if (GetCollabButton().OnGUI(rect, currentCollabContent, animate, collabButtonStyle)) + { + showPopup = true; + } + EditorGUIUtility.SetIconSize(Vector2.zero); + } + + if (m_CollabToolbarState == CollabToolbarState.Disabled) + return; + + if (showPopup) + { + ShowPopup(rect); + } + } + + public void OnCollabStateChanged(CollabInfo info) + { + UpdateCollabToolbarState(); + } + + public void UpdateCollabToolbarState() + { + var currentCollabState = CollabToolbarState.UpToDate; + bool networkAvailable = UnityConnect.instance.connectInfo.online && UnityConnect.instance.connectInfo.loggedIn; + m_DynamicTooltip = ""; + + if (UnityConnect.instance.isDisableCollabWindow) + { + currentCollabState = CollabToolbarState.Disabled; + } + else if (networkAvailable) + { + Collab collab = Collab.instance; + CollabInfo currentInfo = collab.collabInfo; + UnityErrorInfo errInfo; + bool error = false; + if (collab.GetError((UnityConnect.UnityErrorFilter.ByContext | UnityConnect.UnityErrorFilter.ByChild), out errInfo)) + { + error = (errInfo.priority <= (int)UnityConnect.UnityErrorPriority.Error); + m_DynamicTooltip = errInfo.shortMsg; + } + + if (!currentInfo.ready) + { + currentCollabState = CollabToolbarState.InProgress; + } + else if (error) + { + currentCollabState = CollabToolbarState.OperationError; + } + else if (currentInfo.inProgress) + { + currentCollabState = CollabToolbarState.InProgress; + } + else + { + bool collabEnable = Collab.instance.IsCollabEnabledForCurrentProject(); + + if (UnityConnect.instance.projectInfo.projectBound == false || !collabEnable) + { + currentCollabState = CollabToolbarState.NeedToEnableCollab; + } + else if (currentInfo.update) + { + currentCollabState = CollabToolbarState.ServerHasChanges; + } + else if (currentInfo.conflict) + { + currentCollabState = CollabToolbarState.Conflict; + } + else if (currentInfo.publish) + { + currentCollabState = CollabToolbarState.FilesToPush; + } + } + } + else + { + currentCollabState = CollabToolbarState.Offline; + } + + if (Collab.IsToolbarVisible != null) + { + if (currentCollabState != m_CollabToolbarState || + Collab.IsToolbarVisible() == m_ShowCollabTooltip) + { + m_CollabToolbarState = currentCollabState; + m_ShowCollabTooltip = !Collab.IsToolbarVisible(); + Toolbar.RepaintToolbar(); + } + } + } + + void ReserveRight(float width, ref Rect pos) + { + pos.x += width; + } + + void ReserveBottom(float height, ref Rect pos) + { + pos.y += height; + } + + ButtonWithAnimatedIconRotation GetCollabButton() + { + if (m_CollabButton == null) + { + const int repaintsPerSecond = 20; + const float animSpeed = 500f; + const bool mouseDownButton = true; + m_CollabButton = new ButtonWithAnimatedIconRotation(() => (float)EditorApplication.timeSinceStartup * animSpeed, Toolbar.RepaintToolbar, repaintsPerSecond, mouseDownButton); + } + + return m_CollabButton; + } + + public void Dispose() + { + Collab.instance.StateChanged -= OnCollabStateChanged; + UnityConnect.instance.StateChanged -= OnUnityConnectStateChanged; + UnityConnect.instance.UserStateChanged -= OnUnityConnectUserStateChanged; + + if (m_CollabButton != null) + m_CollabButton.Clear(); + } + } +} // namespace \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta new file mode 100644 index 0000000..949d8db --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 882f1a4147a284f028899b9c018e63eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs new file mode 100644 index 0000000..2793875 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs @@ -0,0 +1,137 @@ +using UnityEngine; +using UnityEditor.Collaboration; +using UnityEditor.Web; +using UnityEditor.Connect; + +namespace UnityEditor +{ + [InitializeOnLoad] + internal class WebViewStatic : ScriptableSingleton + { + [SerializeField] + WebView m_WebView; + + static public WebView GetWebView() + { + return instance.m_WebView; + } + + static public void SetWebView(WebView webView) + { + instance.m_WebView = webView; + } + } + + [InitializeOnLoad] + internal class CollabToolbarWindow : WebViewEditorStaticWindow, IHasCustomMenu + { + internal override WebView webView + { + get {return WebViewStatic.GetWebView(); } + set {WebViewStatic.SetWebView(value); } + } + + private const string kWindowName = "Unity Collab Toolbar"; + + private static long s_LastClosedTime; + private static CollabToolbarWindow s_CollabToolbarWindow; + + public static bool s_ToolbarIsVisible = false; + + const int kWindowWidth = 320; + const int kWindowHeight = 350; + + public static void CloseToolbar() + { + foreach (CollabToolbarWindow window in Resources.FindObjectsOfTypeAll()) + window.Close(); + } + + [MenuItem("Window/Asset Management/Collab Toolbar", false /*IsValidateFunction*/, 2, true /* IsInternalMenu */)] + public static CollabToolbarWindow ShowToolbarWindow() + { + //Create a new window if it does not exist + if (s_CollabToolbarWindow == null) + { + s_CollabToolbarWindow = GetWindow(false, kWindowName) as CollabToolbarWindow; + } + + return s_CollabToolbarWindow; + } + + [MenuItem("Window/Asset Management/Collab Toolbar", true /*IsValidateFunction*/)] + public static bool ValidateShowToolbarWindow() + { + return true; + } + + public static bool IsVisible() + { + return s_ToolbarIsVisible; + } + + public static bool ShowCenteredAtPosition(Rect buttonRect) + { + buttonRect.x -= kWindowWidth / 2; + // We could not use realtimeSinceStartUp since it is set to 0 when entering/exitting playmode, we assume an increasing time when comparing time. + long nowMilliSeconds = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond; + bool justClosed = nowMilliSeconds < s_LastClosedTime + 50; + if (!justClosed) + { + // Method may have been triggered programmatically, without a user event to consume. + if (Event.current.type != EventType.Layout) + { + Event.current.Use(); + } + if (s_CollabToolbarWindow == null) + s_CollabToolbarWindow = CreateInstance() as CollabToolbarWindow; + var windowSize = new Vector2(kWindowWidth, kWindowHeight); + s_CollabToolbarWindow.initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html"; + s_CollabToolbarWindow.Init(); + s_CollabToolbarWindow.ShowAsDropDown(buttonRect, windowSize); + s_CollabToolbarWindow.OnFocus(); + return true; + } + return false; + } + + // Receives HTML title + public void OnReceiveTitle(string title) + { + titleContent.text = title; + } + + public new void OnInitScripting() + { + base.OnInitScripting(); + } + + public override void OnEnable() + { + minSize = new Vector2(kWindowWidth, kWindowHeight); + maxSize = new Vector2(kWindowWidth, kWindowHeight); + initialOpenUrl = "file:///" + EditorApplication.userJavascriptPackagesPath + "unityeditor-collab-toolbar/dist/index.html"; + base.OnEnable(); + s_ToolbarIsVisible = true; + } + + internal new void OnDisable() + { + s_LastClosedTime = System.DateTime.Now.Ticks / System.TimeSpan.TicksPerMillisecond; + if (s_CollabToolbarWindow) + { + s_ToolbarIsVisible = false; + NotifyVisibility(s_ToolbarIsVisible); + } + s_CollabToolbarWindow = null; + + base.OnDisable(); + } + + public new void OnDestroy() + { + OnLostFocus(); + base.OnDestroy(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta new file mode 100644 index 0000000..b08bf2a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/CollabToolbarWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6f516f1ec21a54a59a92bf99db2d9535 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta new file mode 100644 index 0000000..9133153 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d437fe60bb34f45728664a5d930c1635 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs new file mode 100644 index 0000000..91d500b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs @@ -0,0 +1,228 @@ +using System.Collections.Generic; +using UnityEditor.Connect; +using UnityEditor.Web; + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryPresenter + { + public const int ItemsPerPage = 5; + ICollabHistoryWindow m_Window; + ICollabHistoryItemFactory m_Factory; + IRevisionsService m_Service; + ConnectInfo m_ConnectState; + CollabInfo m_CollabState; + bool m_IsCollabError; + int m_TotalRevisions; + int m_CurrentPage; + int m_RequestedPage; + bool m_FetchInProgress; + + BuildAccess m_BuildAccess; + string m_ProgressRevision; + public bool BuildServiceEnabled {get; set; } + + public CollabHistoryPresenter(ICollabHistoryWindow window, ICollabHistoryItemFactory factory, IRevisionsService service) + { + m_Window = window; + m_Factory = factory; + m_Service = service; + m_CurrentPage = 0; + m_BuildAccess = new BuildAccess(); + m_Service.FetchRevisionsCallback += OnFetchRevisions; + } + + public void OnWindowEnabled() + { + UnityConnect.instance.StateChanged += OnConnectStateChanged; + Collab.instance.StateChanged += OnCollabStateChanged; + Collab.instance.RevisionUpdated += OnCollabRevisionUpdated; + Collab.instance.JobsCompleted += OnCollabJobsCompleted; + Collab.instance.ErrorOccurred += OnCollabError; + Collab.instance.ErrorCleared += OnCollabErrorCleared; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + m_ConnectState = UnityConnect.instance.GetConnectInfo(); + m_CollabState = Collab.instance.GetCollabInfo(); + + m_Window.revisionActionsEnabled = !EditorApplication.isPlayingOrWillChangePlaymode; + + // Setup window callbacks + m_Window.OnPageChangeAction = OnUpdatePage; + m_Window.OnUpdateAction = OnUpdate; + m_Window.OnRestoreAction = OnRestore; + m_Window.OnGoBackAction = OnGoBack; + m_Window.OnShowBuildAction = ShowBuildForCommit; + m_Window.OnShowServicesAction = ShowServicePage; + m_Window.itemsPerPage = ItemsPerPage; + + // Initialize data + UpdateBuildServiceStatus(); + var state = RecalculateState(); + // Only try to load the page if we're ready + if (state == HistoryState.Ready) + OnUpdatePage(m_CurrentPage); + m_Window.UpdateState(state, true); + } + + public void OnWindowDisabled() + { + UnityConnect.instance.StateChanged -= OnConnectStateChanged; + Collab.instance.StateChanged -= OnCollabStateChanged; + Collab.instance.RevisionUpdated -= OnCollabRevisionUpdated; + Collab.instance.JobsCompleted -= OnCollabJobsCompleted; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + + private void OnConnectStateChanged(ConnectInfo state) + { + m_ConnectState = state; + + m_Window.UpdateState(RecalculateState(), false); + } + + private void OnCollabStateChanged(CollabInfo state) + { + // Sometimes a collab state change will trigger even though everything is the same + if (m_CollabState.Equals(state)) + return; + + if (m_CollabState.tip != state.tip) + OnUpdatePage(m_CurrentPage); + + m_CollabState = state; + m_Window.UpdateState(RecalculateState(), false); + if (state.inProgress) + { + m_Window.inProgressRevision = m_ProgressRevision; + } + else + { + m_Window.inProgressRevision = null; + } + } + + private void OnCollabRevisionUpdated(CollabInfo state) + { + OnUpdatePage(m_CurrentPage); + } + + private void OnCollabJobsCompleted(CollabInfo state) + { + m_ProgressRevision = null; + } + + private void OnCollabError() + { + m_IsCollabError = true; + m_Window.UpdateState(RecalculateState(), false); + } + + private void OnCollabErrorCleared() + { + m_IsCollabError = false; + m_FetchInProgress = true; + m_Service.GetRevisions(m_CurrentPage * ItemsPerPage, ItemsPerPage); + m_Window.UpdateState(RecalculateState(), false); + } + + private void OnPlayModeStateChanged(PlayModeStateChange stateChange) + { + // If entering play mode, disable + if (stateChange == PlayModeStateChange.ExitingEditMode || + stateChange == PlayModeStateChange.EnteredPlayMode) + { + m_Window.revisionActionsEnabled = false; + } + // If exiting play mode, enable! + else if (stateChange == PlayModeStateChange.EnteredEditMode || + stateChange == PlayModeStateChange.ExitingPlayMode) + { + m_Window.revisionActionsEnabled = true; + } + } + + private HistoryState RecalculateState() + { + if (!m_ConnectState.online) + return HistoryState.Offline; + if (m_ConnectState.maintenance || m_CollabState.maintenance) + return HistoryState.Maintenance; + if (!m_ConnectState.loggedIn) + return HistoryState.LoggedOut; + if (!m_CollabState.seat) + return HistoryState.NoSeat; + if (!Collab.instance.IsCollabEnabledForCurrentProject()) + return HistoryState.Disabled; + if (!Collab.instance.IsConnected() || !m_CollabState.ready || m_FetchInProgress) + return HistoryState.Waiting; + if (m_ConnectState.error || m_IsCollabError) + return HistoryState.Error; + + return HistoryState.Ready; + } + + // TODO: Eventually this can be a listener on the build service status + public void UpdateBuildServiceStatus() + { + foreach (var service in UnityConnectServiceCollection.instance.GetAllServiceInfos()) + { + if (service.name.Equals("Build")) + { + BuildServiceEnabled = service.enabled; + } + } + } + + public void ShowBuildForCommit(string revisionID) + { + m_BuildAccess.ShowBuildForCommit(revisionID); + } + + public void ShowServicePage() + { + m_BuildAccess.ShowServicePage(); + } + + public void OnUpdatePage(int page) + { + m_FetchInProgress = true; + m_Service.GetRevisions(page * ItemsPerPage, ItemsPerPage); + m_Window.UpdateState(RecalculateState(), false); + m_RequestedPage = page; + } + + private void OnFetchRevisions(RevisionsResult data) + { + m_FetchInProgress = false; + IEnumerable items = null; + if (data != null) + { + m_CurrentPage = m_RequestedPage; + m_TotalRevisions = data.RevisionsInRepo; + items = m_Factory.GenerateElements(data.Revisions, m_TotalRevisions, m_CurrentPage * ItemsPerPage, m_Service.tipRevision, m_Window.inProgressRevision, m_Window.revisionActionsEnabled, BuildServiceEnabled, m_Service.currentUser); + } + + // State must be recalculated prior to inserting items + m_Window.UpdateState(RecalculateState(), false); + m_Window.UpdateRevisions(items, m_Service.tipRevision, m_TotalRevisions, m_CurrentPage); + } + + private void OnRestore(string revisionId, bool updatetorevision) + { + m_ProgressRevision = revisionId; + Collab.instance.ResyncToRevision(revisionId); + } + + private void OnGoBack(string revisionId, bool updatetorevision) + { + m_ProgressRevision = revisionId; + Collab.instance.GoBackToRevision(revisionId, false); + } + + private void OnUpdate(string revisionId, bool updatetorevision) + { + m_ProgressRevision = revisionId; + Collab.instance.Update(revisionId, updatetorevision); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta new file mode 100644 index 0000000..9c37ecd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Presenters/CollabHistoryPresenter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7c91a123806d41a0873fcdcb629b1c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta new file mode 100644 index 0000000..f62ac6b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fd0a39b4d296d4d509b4f1dbd08d0630 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs new file mode 100644 index 0000000..ac3754d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs @@ -0,0 +1,53 @@ +using System; +using UnityEditor; +using UnityEditor.Collaboration; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal class BuildStatusButton : Button + { + private readonly string iconPrefix = "Icons/Collab.Build"; + private readonly string iconSuffix = ".png"; + Label labelElement = new Label(); + Image iconElement = new Image() {name = "BuildIcon"}; + + public BuildStatusButton(Action clickEvent) : base(clickEvent) + { + iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture; + labelElement.text = "Build Now"; + Add(iconElement); + Add(labelElement); + } + + public BuildStatusButton(Action clickEvent, BuildState state, int failures) : base(clickEvent) + { + switch (state) + { + case BuildState.InProgress: + iconElement.image = EditorGUIUtility.Load(iconPrefix + iconSuffix) as Texture; + labelElement.text = "In progress"; + break; + + case BuildState.Failed: + iconElement.image = EditorGUIUtility.Load(iconPrefix + "Failed" + iconSuffix) as Texture; + labelElement.text = failures + ((failures == 1) ? " failure" : " failures"); + break; + + case BuildState.Success: + iconElement.image = EditorGUIUtility.Load(iconPrefix + "Succeeded" + iconSuffix) as Texture; + labelElement.text = "success"; + break; + } + + Add(iconElement); + Add(labelElement); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta new file mode 100644 index 0000000..d74a58a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/BuildStatusButton.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0217a80286f79419daa202f69409f19b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs new file mode 100644 index 0000000..e3bb05a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs @@ -0,0 +1,78 @@ +using UnityEngine; +using System.Collections.Generic; +using UnityEditor.Connect; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryDropDown : VisualElement + { + private readonly VisualElement m_FilesContainer; + private readonly Label m_ToggleLabel; + private int m_ChangesTotal; + private string m_RevisionId; + + public CollabHistoryDropDown(ICollection changes, int changesTotal, bool changesTruncated, string revisionId) + { + m_FilesContainer = new VisualElement(); + m_ChangesTotal = changesTotal; + m_RevisionId = revisionId; + + m_ToggleLabel = new Label(ToggleText(false)); + m_ToggleLabel.AddManipulator(new Clickable(ToggleDropdown)); + Add(m_ToggleLabel); + + foreach (ChangeData change in changes) + { + m_FilesContainer.Add(new CollabHistoryDropDownItem(change.path, change.action)); + } + + if (changesTruncated) + { + m_FilesContainer.Add(new Button(ShowAllClick) + { + text = "Show all on dashboard" + }); + } + } + + private void ToggleDropdown() + { + if (Contains(m_FilesContainer)) + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseAssets"); + Remove(m_FilesContainer); + m_ToggleLabel.text = ToggleText(false); + } + else + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandAssets"); + Add(m_FilesContainer); + m_ToggleLabel.text = ToggleText(true); + } + } + + private string ToggleText(bool open) + { + var icon = open ? "\u25bc" : "\u25b6"; + var change = m_ChangesTotal == 1 ? "Change" : "Changes"; + return string.Format("{0} {1} Asset {2}", icon, m_ChangesTotal, change); + } + + private void ShowAllClick() + { + var host = UnityConnect.instance.GetConfigurationURL(CloudConfigUrl.CloudServicesDashboard); + var org = UnityConnect.instance.GetOrganizationId(); + var proj = UnityConnect.instance.GetProjectGUID(); + var url = string.Format("{0}/collab/orgs/{1}/projects/{2}/commits?commit={3}", host, org, proj, m_RevisionId); + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowAllOnDashboard"); + Application.OpenURL(url); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta new file mode 100644 index 0000000..513b66b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDown.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a483595b0257945278dc75c5ff7d82ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs new file mode 100644 index 0000000..3ad43f2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs @@ -0,0 +1,53 @@ +using System; +using System.IO; +using System.Linq; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryDropDownItem : VisualElement + { + public CollabHistoryDropDownItem(string path, string action) + { + var fileName = Path.GetFileName(path); + var isFolder = Path.GetFileNameWithoutExtension(path).Equals(fileName); + var fileIcon = GetIconElement(action, fileName, isFolder); + var metaContainer = new VisualElement(); + var fileNameLabel = new Label + { + name = "FileName", + text = fileName + }; + var filePathLabel = new Label + { + name = "FilePath", + text = path + }; + metaContainer.Add(fileNameLabel); + metaContainer.Add(filePathLabel); + Add(fileIcon); + Add(metaContainer); + } + + private Image GetIconElement(string action, string fileName, bool isFolder) + { + var prefix = isFolder ? "Folder" : "File"; + var actionName = action.First().ToString().ToUpper() + action.Substring(1); + // Use the same icon for renamed and moved files + actionName = actionName.Equals("Renamed") ? "Moved" : actionName; + var iconElement = new Image + { + name = "FileIcon", + image = EditorGUIUtility.LoadIcon("Icons/Collab." + prefix + actionName + ".png") + }; + return iconElement; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta new file mode 100644 index 0000000..10bf40e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryDropDownItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d912d4873af534bd4a9d44bf1b52f14e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs new file mode 100644 index 0000000..24e5d1d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs @@ -0,0 +1,229 @@ +using System; +using System.Linq; +using System.Security.Cryptography; +using UnityEditor.Connect; +using UnityEditor.Web; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryItem : VisualElement + { + public static RevisionAction s_OnRestore; + public static RevisionAction s_OnGoBack; + public static RevisionAction s_OnUpdate; + public static ShowBuildAction s_OnShowBuild; + public static Action s_OnShowServices; + + private readonly string m_RevisionId; + private readonly string m_FullDescription; + private readonly DateTime m_TimeStamp; + private readonly Button m_Button; + private readonly HistoryProgressSpinner m_ProgressSpinner; + private VisualElement m_ActionsTray; + private VisualElement m_Details; + private Label m_Description; + private Label m_TimeAgo; + private readonly Button m_ExpandCollapseButton; + private bool m_Expanded; + + private const int kMaxDescriptionChars = 500; + + public bool RevisionActionsEnabled + { + set + { + m_Button.SetEnabled(value); + } + } + + public DateTime timeStamp + { + get { return m_TimeStamp; } + } + + public CollabHistoryItem(RevisionData data) + { + m_RevisionId = data.id; + m_TimeStamp = data.timeStamp; + name = "HistoryItem"; + m_ActionsTray = new VisualElement {name = "HistoryItemActionsTray"}; + m_ProgressSpinner = new HistoryProgressSpinner(); + m_Details = new VisualElement {name = "HistoryDetail"}; + var author = new Label(data.authorName) {name = "Author"}; + m_TimeAgo = new Label(TimeAgo.GetString(m_TimeStamp)); + m_FullDescription = data.comment; + var shouldTruncate = ShouldTruncateDescription(m_FullDescription); + if (shouldTruncate) + { + m_Description = new Label(GetTruncatedDescription(m_FullDescription)); + } + else + { + m_Description = new Label(m_FullDescription); + } + m_Description.name = "RevisionDescription"; + var dropdown = new CollabHistoryDropDown(data.changes, data.changesTotal, data.changesTruncated, data.id); + if (data.current) + { + m_Button = new Button(Restore) {name = "ActionButton", text = "Restore"}; + } + else if (data.obtained) + { + m_Button = new Button(GoBackTo) {name = "ActionButton", text = "Go back to..."}; + } + else + { + m_Button = new Button(UpdateTo) {name = "ActionButton", text = "Update"}; + } + m_Button.SetEnabled(data.enabled); + m_ProgressSpinner.ProgressEnabled = data.inProgress; + + m_ActionsTray.Add(m_ProgressSpinner); + m_ActionsTray.Add(m_Button); + + m_Details.Add(author); + m_Details.Add(m_TimeAgo); + m_Details.Add(m_Description); + + if (shouldTruncate) + { + m_ExpandCollapseButton = new Button(ToggleDescription) { name = "ToggleDescription", text = "Show More" }; + m_Details.Add(m_ExpandCollapseButton); + } + + if (data.buildState != BuildState.None) + { + BuildStatusButton buildButton; + if (data.buildState == BuildState.Configure) + buildButton = new BuildStatusButton(ShowServicePage); + else + buildButton = new BuildStatusButton(ShowBuildForCommit, data.buildState, data.buildFailures); + + m_Details.Add(buildButton); + } + + m_Details.Add(m_ActionsTray); + m_Details.Add(dropdown); + + Add(m_Details); + + this.schedule.Execute(UpdateTimeAgo).Every(1000 * 20); + } + + public static void SetUpCallbacks(RevisionAction Restore, RevisionAction GoBack, RevisionAction Update) + { + s_OnRestore = Restore; + s_OnGoBack = GoBack; + s_OnUpdate = Update; + } + + public void SetInProgressStatus(string revisionIdInProgress) + { + if (String.IsNullOrEmpty(revisionIdInProgress)) + { + m_Button.SetEnabled(true); + m_ProgressSpinner.ProgressEnabled = false; + } + else + { + m_Button.SetEnabled(false); + if (m_RevisionId.Equals(revisionIdInProgress)) + { + m_ProgressSpinner.ProgressEnabled = true; + } + } + } + + void ShowBuildForCommit() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowBuild"); + if (s_OnShowBuild != null) + { + s_OnShowBuild(m_RevisionId); + } + } + + void ShowServicePage() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ShowServices"); + if (s_OnShowServices != null) + { + s_OnShowServices(); + } + } + + void Restore() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Restore"); + if (s_OnRestore != null) + { + s_OnRestore(m_RevisionId, false); + } + } + + void GoBackTo() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "GoBackTo"); + if (s_OnGoBack != null) + { + s_OnGoBack(m_RevisionId, false); + } + } + + void UpdateTo() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "Update"); + if (s_OnUpdate != null) + { + s_OnUpdate(m_RevisionId, true); + } + } + + void UpdateTimeAgo() + { + m_TimeAgo.text = TimeAgo.GetString(m_TimeStamp); + } + + bool ShouldTruncateDescription(string description) + { + return description.Contains(Environment.NewLine) || description.Length > kMaxDescriptionChars; + } + + string GetTruncatedDescription(string description) + { + string result = description.Contains(Environment.NewLine) ? + description.Substring(0, description.IndexOf(Environment.NewLine)) : description; + if (result.Length > kMaxDescriptionChars) + { + result = result.Substring(0, kMaxDescriptionChars) + "..."; + } + return result; + } + + void ToggleDescription() + { + if (m_Expanded) + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "CollapseDescription"); + m_Expanded = false; + m_ExpandCollapseButton.text = "Show More"; + m_Description.text = GetTruncatedDescription(m_FullDescription); + } + else + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "ExpandDescription"); + m_Expanded = true; + m_ExpandCollapseButton.text = "Show Less"; + m_Description.text = m_FullDescription; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta new file mode 100644 index 0000000..290bd28 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4c1445ee948a4124bfa9fb818a17e36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs new file mode 100644 index 0000000..e7d7aa6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs @@ -0,0 +1,121 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Collaboration; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryItemFactory : ICollabHistoryItemFactory + { + const int k_MaxChangesPerRevision = 10; + + public IEnumerable GenerateElements(IEnumerable revisions, int totalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser) + { + int index = startIndex; + + foreach (var rev in revisions) + { + index++; + var current = rev.revisionID == tipRev; + + // Calculate build status + BuildState buildState = BuildState.None; + int buildFailures = 0; + if (rev.buildStatuses != null && rev.buildStatuses.Length > 0) + { + bool inProgress = false; + foreach (CloudBuildStatus buildStatus in rev.buildStatuses) + { + if (buildStatus.complete) + { + if (!buildStatus.success) + { + buildFailures++; + } + } + else + { + inProgress = true; + break; + } + } + + if (inProgress) + { + buildState = BuildState.InProgress; + } + else if (buildFailures > 0) + { + buildState = BuildState.Failed; + } + else + { + buildState = BuildState.Success; + } + } + else if (current && !buildServiceEnabled) + { + buildState = BuildState.Configure; + } + + // Calculate the number of changes performed on files and folders (not meta files) + var paths = new Dictionary(); + foreach (ChangeAction change in rev.entries) + { + if (change.path.EndsWith(".meta")) + { + var path = change.path.Substring(0, change.path.Length - 5); + // Actions taken on meta files are secondary to any actions taken on the main file + if (!paths.ContainsKey(path)) + paths[path] = new ChangeData() {path = path, action = change.action}; + } + else + { + paths[change.path] = new ChangeData() {path = change.path, action = change.action}; + } + } + + var displayName = (rev.author != currentUser) ? rev.authorName : "You"; + + var item = new RevisionData + { + id = rev.revisionID, + index = totalRevisions - index + 1, + timeStamp = TimeStampToDateTime(rev.timeStamp), + authorName = displayName, + comment = rev.comment, + + obtained = rev.isObtained, + current = current, + inProgress = (rev.revisionID == inProgressRevision), + enabled = revisionActionsEnabled, + + buildState = buildState, + buildFailures = buildFailures, + + changes = paths.Values.Take(k_MaxChangesPerRevision).ToList(), + changesTotal = paths.Values.Count, + changesTruncated = paths.Values.Count > k_MaxChangesPerRevision, + }; + + yield return item; + } + } + + private static DateTime TimeStampToDateTime(double timeStamp) + { + DateTime dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); + dateTime = dateTime.AddSeconds(timeStamp).ToLocalTime(); + return dateTime; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta new file mode 100644 index 0000000..3250d96 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc46f91ea1e8e4ca2ab693fef9156dbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs new file mode 100644 index 0000000..2b8fe65 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs @@ -0,0 +1,94 @@ +using System; +using UnityEditor; +using UnityEditor.Collaboration; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal class CollabHistoryRevisionLine : VisualElement + { + public CollabHistoryRevisionLine(int number) + { + AddNumber(number); + AddLine("topLine"); + AddLine("bottomLine"); + AddIndicator(); + } + + public CollabHistoryRevisionLine(DateTime date, bool isFullDateObtained) + { + AddLine(isFullDateObtained ? "obtainedDateLine" : "absentDateLine"); + AddHeader(GetFormattedHeader(date)); + AddToClassList("revisionLineHeader"); + } + + private void AddHeader(string content) + { + Add(new Label + { + text = content + }); + } + + private void AddIndicator() + { + Add(new VisualElement + { + name = "RevisionIndicator" + }); + } + + private void AddLine(string className = null) + { + var line = new VisualElement + { + name = "RevisionLine" + }; + if (!String.IsNullOrEmpty(className)) + { + line.AddToClassList(className); + } + Add(line); + } + + private void AddNumber(int number) + { + Add(new Label + { + text = number.ToString(), + name = "RevisionIndex" + }); + } + + private string GetFormattedHeader(DateTime date) + { + string result = "Commits on " + date.ToString("MMM d"); + switch (date.Day) + { + case 1: + case 21: + case 31: + result += "st"; + break; + case 2: + case 22: + result += "nd"; + break; + case 3: + case 23: + result += "rd"; + break; + default: + result += "th"; + break; + } + return result; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta new file mode 100644 index 0000000..2659a3c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/CollabHistoryRevisionLine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c737f7a9d78541d1ab25f28f045dd32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs new file mode 100644 index 0000000..fad3b82 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs @@ -0,0 +1,69 @@ +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal class HistoryProgressSpinner : Image + { + private readonly Texture2D[] m_StatusWheelTextures; + private bool m_ProgressEnabled; + private IVisualElementScheduledItem m_Animation; + + public bool ProgressEnabled + { + set + { + if (m_ProgressEnabled == value) + return; + + m_ProgressEnabled = value; + visible = value; + + + if (value) + { + if (m_Animation == null) + { + m_Animation = this.schedule.Execute(AnimateProgress).Every(33); + } + else + { + m_Animation.Resume(); + } + } + else + { + if (m_Animation != null) + { + m_Animation.Pause(); + } + } + } + } + + public HistoryProgressSpinner() + { + m_StatusWheelTextures = new Texture2D[12]; + for (int i = 0; i < 12; i++) + { + m_StatusWheelTextures[i] = EditorGUIUtility.LoadIcon("WaitSpin" + i.ToString("00")); + } + image = m_StatusWheelTextures[0]; + style.width = m_StatusWheelTextures[0].width; + style.height = m_StatusWheelTextures[0].height; + visible = false; + } + + private void AnimateProgress(TimerState obj) + { + int frame = (int)Mathf.Repeat(Time.realtimeSinceStartup * 10, 11.99f); + image = m_StatusWheelTextures[frame]; + MarkDirtyRepaint(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta new file mode 100644 index 0000000..0ded4e8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/HistoryProgressSpinner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cf6aca931950a4a6a886e214e9e649c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs new file mode 100644 index 0000000..03239a3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using UnityEditor.Collaboration; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +#endif + +namespace UnityEditor.Collaboration +{ + internal interface ICollabHistoryItemFactory + { + IEnumerable GenerateElements(IEnumerable revsRevisions, int mTotalRevisions, int startIndex, string tipRev, string inProgressRevision, bool revisionActionsEnabled, bool buildServiceEnabled, string currentUser); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta new file mode 100644 index 0000000..08e9085 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/ICollabHistoryItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 821f5482c5a3f4389885f4432433f56f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs new file mode 100644 index 0000000..472a70e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs @@ -0,0 +1,192 @@ +using System; +using System.Collections.Generic; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +namespace UnityEditor.Collaboration +{ + internal interface IPagerData + { + int curPage { get; } + int totalPages { get; } + PageChangeAction OnPageChanged { get; } + } + + internal class PagerElement : VisualElement + { + IPagerData m_Data; + readonly Label m_PageText; + readonly Button m_DownButton; + readonly Button m_UpButton; + + public PagerElement(IPagerData dataSource) + { + m_Data = dataSource; + + this.style.flexDirection = FlexDirection.Row; + this.style.alignSelf = Align.Center; + + Add(m_DownButton = new Button(OnPageDownClicked) {text = "\u25c5 Newer"}); + m_DownButton.AddToClassList("PagerDown"); + + m_PageText = new Label(); + m_PageText.AddToClassList("PagerLabel"); + Add(m_PageText); + + Add(m_UpButton = new Button(OnPageUpClicked) {text = "Older \u25bb"}); + m_UpButton.AddToClassList("PagerUp"); + + UpdateControls(); + } + + void OnPageDownClicked() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "NewerPage"); + m_Data.OnPageChanged(m_Data.curPage - 1); + } + + void OnPageUpClicked() + { + CollabAnalytics.SendUserAction(CollabAnalytics.historyCategoryString, "OlderPage"); + m_Data.OnPageChanged(m_Data.curPage + 1); + } + + public void Refresh() + { + UpdateControls(); + } + + void UpdateControls() + { + var curPage = m_Data.curPage; + var totalPages = m_Data.totalPages; + + m_PageText.text = (curPage + 1) + " / " + totalPages; + m_DownButton.SetEnabled(curPage > 0); + m_UpButton.SetEnabled(curPage < totalPages - 1); + } + } + + internal enum PagerLocation + { + Top, + Bottom, + } + + internal class PagedListView : VisualElement, IPagerData + { + public const int DefaultItemsPerPage = 10; + + readonly VisualElement m_ItemContainer; + readonly PagerElement m_PagerTop, m_PagerBottom; + int m_PageSize = DefaultItemsPerPage; + IEnumerable m_Items; + int m_TotalItems; + int m_CurPage; + + public int pageSize + { + set { m_PageSize = value; } + } + + public IEnumerable items + { + set + { + m_Items = value; + LayoutItems(); + } + } + + public int totalItems + { + set + { + if (m_TotalItems == value) + return; + + m_TotalItems = value; + UpdatePager(); + } + } + + public PageChangeAction OnPageChanged { get; set; } + + public PagedListView() + { + m_PagerTop = new PagerElement(this); + + m_ItemContainer = new VisualElement() + { + name = "PagerItems", + }; + Add(m_ItemContainer); + m_Items = new List(); + + m_PagerBottom = new PagerElement(this); + } + + void LayoutItems() + { + m_ItemContainer.Clear(); + foreach (var item in m_Items) + { + m_ItemContainer.Add(item); + } + } + + void UpdatePager() + { + if (m_PagerTop.parent != this && totalPages > 1 && curPage > 0) + Insert(0, m_PagerTop); + if (m_PagerTop.parent == this && (totalPages <= 1 || curPage == 0)) + Remove(m_PagerTop); + + if (m_PagerBottom.parent != this && totalPages > 1) + Add(m_PagerBottom); + if (m_PagerBottom.parent == this && totalPages <= 1) + Remove(m_PagerBottom); + + m_PagerTop.Refresh(); + m_PagerBottom.Refresh(); + } + + int pageCount + { + get + { + var pages = m_TotalItems / m_PageSize; + if (m_TotalItems % m_PageSize > 0) + pages++; + + return pages; + } + } + + public int curPage + { + get { return m_CurPage; } + set + { + m_CurPage = value; + UpdatePager(); + } + } + + public int totalPages + { + get + { + var extraPage = 0; + if (m_TotalItems % m_PageSize > 0) + extraPage = 1; + return m_TotalItems / m_PageSize + extraPage; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta new file mode 100644 index 0000000..565f7a2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/PagedListView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50de529b6a28f4a7093045e08810a5df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs new file mode 100644 index 0000000..9b50e7a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs @@ -0,0 +1,88 @@ +using System; +using UnityEditor; +using UnityEngine; + +#if UNITY_2019_1_OR_NEWER +using UnityEngine.UIElements; +#else +using UnityEngine.Experimental.UIElements; +using UnityEngine.Experimental.UIElements.StyleEnums; +#endif + +namespace UnityEditor.Collaboration +{ + internal class StatusView : VisualElement + { + Image m_Image; + Label m_Message; + Button m_Button; + Action m_Callback; + + public Texture icon + { + get { return m_Image.image; } + set + { + m_Image.image = value; + m_Image.visible = value != null; + // Until "display: hidden" is added, this is the only way to hide an element + m_Image.style.height = value != null ? 150 : 0; + } + } + + public string message + { + get { return m_Message.text; } + set + { + m_Message.text = value; + m_Message.visible = value != null; + } + } + + public string buttonText + { + get { return m_Button.text; } + set + { + m_Button.text = value; + UpdateButton(); + } + } + + public Action callback + { + get { return m_Callback; } + set + { + m_Callback = value; + UpdateButton(); + } + } + + public StatusView() + { + name = "StatusView"; + + this.StretchToParentSize(); + + m_Image = new Image() { name = "StatusIcon", visible = false, style = { height = 0f }}; + m_Message = new Label() { name = "StatusMessage", visible = false}; + m_Button = new Button(InternalCallaback) { name = "StatusButton", visible = false}; + + Add(m_Image); + Add(m_Message); + Add(m_Button); + } + + private void UpdateButton() + { + m_Button.visible = m_Button.text != null && m_Callback != null; + } + + private void InternalCallaback() + { + m_Callback(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta new file mode 100644 index 0000000..bb634b1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Collab/Views/StatusView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08e9894bdf0834710b22d3c0aa245ac0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta new file mode 100644 index 0000000..01229c2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a6ab6fd2b91214e8a9c8ec2224a528de +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta new file mode 100644 index 0000000..0ff0382 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b1ae1e78552c459d9ce27048ff51c7f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss new file mode 100644 index 0000000..b20f08e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss @@ -0,0 +1,259 @@ +.unity-button { + min-height:0; + -unity-text-align:middle-center; + margin-left:4px; + margin-top:3px; + margin-right:4px; + margin-bottom:3px; + border-left-width:6px; + border-top-width:4px; + border-right-width:6px; + border-bottom-width:4px; + padding-left:6px; + padding-top:2px; + padding-right:6px; + padding-bottom:3px; +} + +.unity-label { + overflow: hidden; + margin-left:4px; + margin-top:2px; + margin-right:4px; + margin-bottom:2px; + padding-left:2px; + padding-top:1px; + min-height: 0; +} + +#HistoryContainer { + flex: 1 0 0; +} + +#HistoryItem { + flex: 1 0 0; + flex-direction: row; +} + +#HistoryDetail { + margin-top: 10px; + margin-left: 10px; + margin-bottom: 10px; + margin-right: 10px; + padding-top: 4px; + flex: 1 0 0; +} + +#Author { + -unity-font-style: bold; + font-size: 12px; +} + +#HistoryDetail > Button { + align-self: flex-end; +} + +CollabHistoryRevisionLine { + width: 40px; +} + +#RevisionLine { + flex: 1 0 0; + margin-left: 35px; + width: 1.5px; +} + +#RevisionLine.topLine { + height: 20px; + flex: 0 0 auto; +} + +#RevisionLine.absentDateLine { + background-color: #797676; +} + +.absentRevision #RevisionLine { + background-color: #797676; +} + +.currentRevision #RevisionLine.topLine { + background-color: #797676; +} + +#RevisionIndex { + position: absolute; + min-width: 23px; + -unity-text-align: middle-right; + top: 15.8px; + font-size: 9px; +} + +#RevisionIndicator { + position: absolute; + background-color: #000; + border-radius: 3px; + width: 8px; + height: 8px; + border-bottom-width: 2px; + border-left-width: 2px; + border-right-width: 2px; + border-top-width: 2px; + top: 20px; + left: 32px; +} + +.revisionLineHeader { + width: 200px; + height: 20px; +} + +.revisionLineHeader > .unity-label { + position: absolute; + margin-left: 47px; + margin-top: 3px; +} + +#PagerItems { + flex-direction: column; +} + +PagerElement > .unity-label { + margin-top: 8px; +} + +.absentRevision #RevisionIndicator { + border-color: #797676; +} + +.absentRevision #RevisionIndex { + color: #797676; +} + +.currentRevision #HistoryDetail { + border-top-width: 2px; +} + +#HistoryItem #RevisionDescription { + white-space: normal; +} + +#HistoryItem #ToggleDescription { + align-self: flex-start; + padding-top: 0; + padding-left: 0; + padding-right: 0; + padding-bottom: 2px; +} + +#HistoryItem #ActionButton { + position: absolute; + right: 0; +} + +#HistoryItem #BuildIcon { + width: 16px; + height: 13px; +} + +#HistoryItemActionsTray { + flex: 1 0 0; + flex-direction: row; + align-items: center; + height: 38px; + margin-left: 10px; + margin-right: 10px; +} + +CollabHistoryDropDown { + border-top-width: 1px; +} + +CollabHistoryDropDown > .unity-label { + padding-top: 10px; + padding-bottom: 10px; +} + +CollabHistoryDropDownItem { + flex-direction: row; + border-top-width: 1px; + overflow: hidden; +} + +#FileIcon { + align-self: center; + width: 26px; + height: 26px; +} + +#FileName { + -unity-font-style: bold; + padding-bottom: 0; + margin-bottom: 0; +} + +#FileIcon { + padding-top: 0; + margin-top: 0; +} + +#ErrorBar { + height: 24px; + background-color: #ff0000; + color: #000; + font-size: 12px; +} + +#ErrorBar > #CloseButton { + position: absolute; + right: 0; + top: 0; + width: 24px; + height: 24px; + color: #000; + font-size: 18px; + -unity-font-style: bold; +} + +#StatusView { + flex-direction: column; + justify-content: center; + align-self: center; + align-items: center; + flex: 1 0 0; +} + +#StatusView > #StatusIcon { + width: 115px; + height: 150px; +} + +#StatusView > #StatusMessage { + font-size: 22px; + width: 230px; + white-space: normal; + -unity-text-align: middle-center; +} + +#StatusView > #StatusButton { + font-size: 12px; + margin-top: 20px; + background-image: none; + width: 108px; + height: 29px; +} + +BuildStatusButton.unity-button { + flex-direction: row; + align-self: flex-end; + align-items: center; + margin-right: 10px; + padding-left:0; + padding-top:0; + padding-right:0; + padding-bottom:0; +} + +BuildStatusButton.unity-button .unity-label { + padding-left: 2px; +} + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta new file mode 100644 index 0000000..035b662 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryCommon.uss.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 3a2d94c8977984b67984caeff9fa666e +ScriptedImporter: + fileIDToRecycleName: + 11400000: stylesheet + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss new file mode 100644 index 0000000..de436f8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss @@ -0,0 +1,86 @@ +#HistoryContainer { + background-color: #292929; +} + +.obtainedRevision #HistoryDetail { + background-color: #333; +} + +.absentRevision #HistoryDetail { + background-color: #595959; +} + +#StatusView { + background-color: #292929; +} + +#StatusView > #StatusMessage { + color: #959995; +} + +BuildStatusButton.unity-button { + color: #B4B4B4; + background-image: resource("Builtin Skins/DarkSkin/Images/btn.png"); +} + +BuildStatusButton.unity-button:hover { + color: #FFF; +} + +BuildStatusButton.unity-button:hover:active { + background-image: resource("Builtin Skins/DarkSkin/Images/btn act.png"); +} + +BuildStatusButton.unity-button:checked { + color: #F0F0F0; + background-image: resource("Builtin Skins/DarkSkin/Images/btn on.png"); +} + +BuildStatusButton.unity-button:hover:checked { + color: #FFF; +} + +BuildStatusButton.unity-button:hover:active:checked { + background-image: resource("Builtin Skins/DarkSkin/Images/btn onact.png"); +} + +BuildStatusButton.unity-button:focus:checked { + background-image: resource("Builtin Skins/DarkSkin/Images/btn on focus.png"); +} + +CollabHistoryDropDown { + border-color: #292929; +} + +CollabHistoryDropDownItem { + border-color: #292929; +} + +#RevisionLine.obtainedDateLine { + background-color: #0cb4cc; +} + +.obtainedRevision #RevisionLine { + background-color: #0cb4cc; +} + +#RevisionIndex { + color: #0cb4cc; +} + +#RevisionIndicator { + border-color: #0cb4cc; +} + +.currentRevision #RevisionIndicator { + background-color: #0cb4cc; +} + +.currentRevision #HistoryDetail { + border-color: #0cb4cc; +} + +#StatusView > #StatusButton { + background-color: #0cb4cc; + border-color: #0cb4cc; +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta new file mode 100644 index 0000000..35a7d09 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryDark.uss.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 70d4d75a2877243758b0750cbc75b6eb +ScriptedImporter: + fileIDToRecycleName: + 11400000: stylesheet + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss new file mode 100644 index 0000000..3f9b85f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss @@ -0,0 +1,86 @@ +#HistoryContainer { + background-color: #a2a2a2; +} + +.obtainedRevision #HistoryDetail { + background-color: #c2c2c2; +} + +.absentRevision #HistoryDetail { + background-color: #dedede; +} + +#StatusView { + background-color: #a2a2a3; +} + +#StatusView > #StatusMessage { + color: #000; +} + +BuildStatusButton.unity-button { + color: #111; + background-image: resource("Builtin Skins/LightSkin/Images/btn.png"); +} + +BuildStatusButton.unity-button:hover { + color: #000; +} + +BuildStatusButton.unity-button:hover:active { + background-image: resource("Builtin Skins/LightSkin/Images/btn act.png"); +} + +BuildStatusButton.unity-button:checked { + color: #F0F0F0; + background-image: resource("Builtin Skins/LightSkin/Images/btn on.png"); +} + +BuildStatusButton.unity-button:hover:checked { + color: #000; +} + +BuildStatusButton.unity-button:hover:active:checked { + background-image: resource("Builtin Skins/LightSkin/Images/btn onact.png"); +} + +BuildStatusButton.unity-button:focus:checked { + background-image: resource("Builtin Skins/LightSkin/Images/btn on focus.png"); +} + +CollabHistoryDropDown { + border-color: #a2a2a2; +} + +CollabHistoryDropDownItem { + border-color: #a2a2a2; +} + +#RevisionLine.obtainedDateLine { + background-color: #018d98; +} + +.obtainedRevision #RevisionLine { + background-color: #018d98; +} + +#RevisionIndex { + color: #018d98; +} + +#RevisionIndicator { + border-color: #018d98; +} + +.currentRevision #RevisionIndicator { + background-color: #018d98; +} + +.currentRevision #HistoryDetail { + border-color: #018d98; +} + +#StatusView > #StatusButton { + background-color: #018d98; + border-color: #018d98; +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta new file mode 100644 index 0000000..28c860e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Resources/Styles/CollabHistoryLight.uss.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b52bde26a83564960bcb90217f72b910 +ScriptedImporter: + fileIDToRecycleName: + 11400000: stylesheet + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: + script: {fileID: 12385, guid: 0000000000000000e000000000000000, type: 0} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef new file mode 100644 index 0000000..66511e1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef @@ -0,0 +1,7 @@ +{ + "name": "Unity.CollabProxy.Editor", + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta new file mode 100644 index 0000000..03ebeca --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Editor/Unity.CollabProxy.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 645165c8169474bfbbeb8fb0bcfd26f5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md new file mode 100644 index 0000000..31bde4e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md @@ -0,0 +1,31 @@ +**Unity Companion Package License v1.0 ("_License_")** + +Copyright © 2017 Unity Technologies ApS ("**_Unity_**") + +Unity hereby grants to you a worldwide, non-exclusive, no-charge, and royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, sublicense, and distribute the software that is made available with this License ("**_Software_**"), subject to the following terms and conditions: + +1. *Unity Companion Use Only*. Exercise of the license granted herein is limited to exercise for the creation, use, and/or distribution of applications, software, or other content pursuant to a valid Unity development engine software license ("**_Engine License_**"). That means while use of the Software is not limited to use in the software licensed under the Engine License, the Software may not be used for any purpose other than the creation, use, and/or distribution of Engine License-dependent applications, software, or other content. No other exercise of the license granted herein is permitted. + +1. *No Modification of Engine License*. Neither this License nor any exercise of the license granted herein modifies the Engine License in any way. + +1. *Ownership & Grant Back to You*. + + 3.1. You own your content. In this License, "derivative works" means derivatives of the Software itself--works derived only from the Software by you under this License (for example, modifying the code of the Software itself to improve its efficacy); “derivative works” of the Software do not include, for example, games, apps, or content that you create using the Software. You keep all right, title, and interest to your own content. + + 3.2. Unity owns its content. While you keep all right, title, and interest to your own content per the above, as between Unity and you, Unity will own all right, title, and interest to all intellectual property rights (including patent, trademark, and copyright) in the Software and derivative works of the Software, and you hereby assign and agree to assign all such rights in those derivative works to Unity. + + 3.3. You have a license to those derivative works. Subject to this License, Unity grants to you the same worldwide, non-exclusive, no-charge, and royalty-free copyright license to derivative works of the Software you create as is granted to you for the Software under this License. + +1. *Trademarks*. You are not granted any right or license under this License to use any trademarks, service marks, trade names, products names, or branding of Unity or its affiliates ("**_Trademarks_**"). Descriptive uses of Trademarks are permitted; see, for example, Unity’s Branding Usage Guidelines at [https://unity3d.com/public-relations/brand](https://unity3d.com/public-relations/brand). + +1. *Notices & Third-Party Rights*. This License, including the copyright notice above, must be provided in all substantial portions of the Software and derivative works thereof (or, if that is impracticable, in any other location where such notices are customarily placed). Further, if the Software is accompanied by a Unity "third-party notices" or similar file, you acknowledge and agree that software identified in that file is governed by those separate license terms. + +1. *DISCLAIMER, LIMITATION OF LIABILITY*. THE SOFTWARE AND ANY DERIVATIVE WORKS THEREOF IS PROVIDED ON AN "AS IS" BASIS, AND IS PROVIDED WITHOUT WARRANTY OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND/OR NONINFRINGEMENT. IN NO EVENT SHALL ANY COPYRIGHT HOLDER OR AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES (WHETHER DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL, INCLUDING PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, LOSS OF USE, DATA, OR PROFITS, AND BUSINESS INTERRUPTION), OR OTHER LIABILITY WHATSOEVER, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM OR OUT OF, OR IN CONNECTION WITH, THE SOFTWARE OR ANY DERIVATIVE WORKS THEREOF OR THE USE OF OR OTHER DEALINGS IN SAME, EVEN WHERE ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +1. *USE IS ACCEPTANCE and License Versions*. Your receipt and use of the Software constitutes your acceptance of this License and its terms and conditions. Software released by Unity under this License may be modified or updated and the License with it; upon any such modification or update, you will comply with the terms of the updated License for any use of any of the Software under the updated License. + +1. *Use in Compliance with Law and Termination*. Your exercise of the license granted herein will at all times be in compliance with applicable law and will not infringe any proprietary rights (including intellectual property rights); this License will terminate immediately on any breach by you of this License. + +1. *Severability*. If any provision of this License is held to be unenforceable or invalid, that provision will be enforced to the maximum extent possible and the other provisions will remain in full force and effect. + +1. *Governing Law and Venue*. This License is governed by and construed in accordance with the laws of Denmark, except for its conflict of laws rules; the United Nations Convention on Contracts for the International Sale of Goods will not apply. If you reside (or your principal place of business is) within the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the state and federal courts located in San Francisco County, California concerning any dispute arising out of this License ("**_Dispute_**"). If you reside (or your principal place of business is) outside the United States, you and Unity agree to submit to the personal and exclusive jurisdiction of and venue in the courts located in Copenhagen, Denmark concerning any Dispute. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta new file mode 100644 index 0000000..30f5c3a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c754112a02f354a6696fa4f2b99e95a5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md new file mode 100644 index 0000000..5cfbd88 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md @@ -0,0 +1,16 @@ +# Collab Proxy UPM Package +This is the packaged version of Collab, currently limited to containing the History and Toolbar windows, along with supporting classes. + +## Development +Check this repository out in your {$PROJECT}/Packages/ folder, under the name com.unity.collab-proxy. The classes will be built by Unity. + +## Testing +In order to run the tests, you will need to add this project to the testables key in your manifest.json - once you have done this, the tests will be picked up by the Unity Test Runner window. + +## Building +You may build this project using msbuild. The commands to do so can be seen under .gitlab-ci.yml. + +## Deploying +Gitlab will automatically build your project when you deploy. You can download the resulting artifact, which will be a dll, and place it in your Editor/bin/ folder. Open the package in Unity to generate the meta files, and then you will be able to publish. + +We're currently looking into a way to avoid this manual process. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta new file mode 100644 index 0000000..b3ad993 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac281230df7b14becb40b3c479f1b429 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta new file mode 100644 index 0000000..f43ddd3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1369382d2c5e64dc5b2ec0b6b0a94531 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta new file mode 100644 index 0000000..b80cefd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4506ac79f5b274cb1b249ed7f4abfb9a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs new file mode 100644 index 0000000..ba79a20 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs @@ -0,0 +1,583 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEditor.Collaboration; +using UnityEngine.TestTools; +using NUnit.Framework; + +namespace UnityEditor.Collaboration.Tests +{ + [TestFixture] + internal class HistoryTests + { + private TestHistoryWindow _window; + private TestRevisionsService _service; + private CollabHistoryPresenter _presenter; + + [SetUp] + public void SetUp() + { + _window = new TestHistoryWindow(); + _service = new TestRevisionsService(); + _presenter = new CollabHistoryPresenter(_window, new CollabHistoryItemFactory(), _service); + } + + [TearDown] + public void TearDown() + { + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__PropagatesRevisionResult() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(authorName: "authorName", comment: "comment", revisionID: "revisionID"), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual("revisionID", item.id); + Assert.AreEqual("authorName", item.authorName); + Assert.AreEqual("comment", item.comment); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingIsInOrder() + { + _service.result = new RevisionsResult() + { + RevisionsInRepo = 4, + Revisions = new List() + { + new Revision(revisionID: "0"), + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + } + }; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.AreEqual(4, items[0].index); + Assert.AreEqual(3, items[1].index); + Assert.AreEqual(2, items[2].index); + Assert.AreEqual(1, items[3].index); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__RevisionNumberingChangesForMorePages() + { + _service.result = new RevisionsResult() + { + RevisionsInRepo = 12, + Revisions = new List() + { + new Revision(revisionID: "0"), + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + new Revision(revisionID: "4"), + } + }; + + _presenter.OnUpdatePage(1); + var items = _window.items.ToArray(); + + Assert.AreEqual(12, items[0].index); + Assert.AreEqual(11, items[1].index); + Assert.AreEqual(10, items[2].index); + Assert.AreEqual(9, items[3].index); + Assert.AreEqual(8, items[4].index); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ObtainedIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(isObtained: false), + new Revision(isObtained: true), + } + }; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.IsFalse(items[0].obtained); + Assert.IsTrue(items[1].obtained); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__CurrentIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + } + }; + _service.tipRevision = "2"; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.AreEqual(false, items[0].current); + Assert.AreEqual(true, items[1].current); + Assert.AreEqual(false, items[2].current); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__InProgressIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "1"), + new Revision(revisionID: "2"), + new Revision(revisionID: "3"), + } + }; + _window.inProgressRevision = "2"; + + _presenter.OnUpdatePage(0); + var items = _window.items.ToArray(); + + Assert.IsFalse(items[0].inProgress); + Assert.IsTrue(items[1].inProgress); + Assert.IsFalse(items[2].inProgress); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__EnabledIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _window.revisionActionsEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(true, item.enabled); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__DisabledIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _window.revisionActionsEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(false, item.enabled); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenNotTip() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "1"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.None, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateTipHasNoneWhenEnabled() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.None, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenTip() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Configure, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasConfigureWhenZeroBuildStatus() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = false; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Configure, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasNoneWhenZeroBuildStatuses() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0"), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.None, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasSuccessWhenCompleteAndSucceeded() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[1] + { + new CloudBuildStatus(complete: true, success: true), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Success, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasInProgress() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[1] + { + new CloudBuildStatus(complete: false), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.InProgress, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailure() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[1] + { + new CloudBuildStatus(complete: true, success: false), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Failed, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__BuildStateHasFailureWhenAnyBuildsFail() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + revisionID: "0", + buildStatuses: new CloudBuildStatus[3] + { + new CloudBuildStatus(complete: true, success: false), + new CloudBuildStatus(complete: true, success: false), + new CloudBuildStatus(complete: true, success: true), + } + ), + } + }; + _service.tipRevision = "0"; + _presenter.BuildServiceEnabled = true; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(BuildState.Failed, item.buildState); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ChangesPropagateThrough() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0", entries: GenerateChangeActions(3)), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + var changes = item.changes.ToList(); + + Assert.AreEqual("Path0", changes[0].path); + Assert.AreEqual("Path1", changes[1].path); + Assert.AreEqual("Path2", changes[2].path); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ChangesTotalIsCalculated() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0", entries: GenerateChangeActions(3)), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(3, item.changes.Count); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__ChangesTruncatedIsCalculated() + { + for (var i = 0; i < 20; i++) + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(revisionID: "0", entries: GenerateChangeActions(i)), + } + }; + + _presenter.OnUpdatePage(0); + var item = _window.items.First(); + + Assert.AreEqual(i > 10, item.changesTruncated); + } + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__OnlyKeeps10ChangeActions() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision(authorName: "Test", author: "test", entries: GenerateChangeActions(12)), + } + }; + + _presenter.OnUpdatePage(1); + var item = _window.items.First(); + + Assert.AreEqual(10, item.changes.Count); + Assert.AreEqual(12, item.changesTotal); + Assert.AreEqual(true, item.changesTruncated); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__DeduplicatesMetaFiles() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + authorName: "Test", + author: "test", + revisionID: "", + entries: new ChangeAction[2] + { + new ChangeAction(path: "Path1", action: "Action1"), + new ChangeAction(path: "Path1.meta", action: "Action1"), + } + ), + } + }; + + _presenter.OnUpdatePage(1); + var item = _window.items.First(); + + Assert.AreEqual(1, item.changes.Count); + Assert.AreEqual(1, item.changesTotal); + Assert.AreEqual("Path1", item.changes.First().path); + } + + [Test] + public void CollabHistoryPresenter_OnUpdatePage__FolderMetaFilesAreCounted() + { + _service.result = new RevisionsResult() + { + Revisions = new List() + { + new Revision + ( + authorName: "Test", + author: "test", + entries: new ChangeAction[1] + { + new ChangeAction(path: "Folder1.meta", action: "Action1"), + } + ), + } + }; + + _presenter.OnUpdatePage(1); + var item = _window.items.First(); + + Assert.AreEqual(1, item.changes.Count); + Assert.AreEqual(1, item.changesTotal); + Assert.AreEqual("Folder1", item.changes.First().path); + } + + private static ChangeAction[] GenerateChangeActions(int count) + { + var entries = new ChangeAction[count]; + for (var i = 0; i < count; i++) + entries[i] = new ChangeAction(path: "Path" + i, action: "Action" + i); + return entries; + } + } + + internal class TestRevisionsService : IRevisionsService + { + public RevisionsResult result; + public event RevisionsDelegate FetchRevisionsCallback; + + public string tipRevision { get; set; } + public string currentUser { get; set; } + + public void GetRevisions(int offset, int count) + { + if(FetchRevisionsCallback != null) + { + FetchRevisionsCallback(result); + } + } + } + + internal class TestHistoryWindow : ICollabHistoryWindow + { + public IEnumerable items; + + public bool revisionActionsEnabled { get; set; } + public int itemsPerPage { get; set; } + public string errMessage { get; set; } + public string inProgressRevision { get; set; } + public PageChangeAction OnPageChangeAction { get; set; } + public RevisionAction OnGoBackAction { get; set; } + public RevisionAction OnUpdateAction { get; set; } + public RevisionAction OnRestoreAction { get; set; } + public ShowBuildAction OnShowBuildAction { get; set; } + public Action OnShowServicesAction { get; set; } + + public void UpdateState(HistoryState state, bool force) + { + } + + public void UpdateRevisions(IEnumerable items, string tip, int totalRevisions, int currPage) + { + this.items = items; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta new file mode 100644 index 0000000..d648a7f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/HistoryTests.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 23a56a19774ed42b6b65646af08a003c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef new file mode 100644 index 0000000..3467a9e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef @@ -0,0 +1,13 @@ +{ + "name": "Unity.CollabProxy.EditorTests", + "references": [ + "Unity.CollabProxy.Editor" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta new file mode 100644 index 0000000..57db5c7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/Tests/Editor/Unity.CollabProxy.EditorTests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 782de34c17796430ba8d0ceddb60944e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json new file mode 100644 index 0000000..3402274 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json @@ -0,0 +1,21 @@ +{ + "name": "com.unity.collab-proxy", + "displayName": "Unity Collaborate", + "version": "1.2.16", + "unity": "2018.3", + "description": "Collaborate is a simple way for teams to save, share, and sync their Unity project", + "keywords": [ + "collab", + "collaborate", + "teams", + "team", + "cloud", + "backup" + ], + "dependencies": {}, + "repository": { + "type": "git", + "url": "https://gitlab.cds.internal.unity3d.com/upm-packages/cloud-services/collab-proxy.git", + "revision": "070e173b6a36e1d6097b1d95e09c08840c23f6ca" + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta new file mode 100644 index 0000000..c52d0c6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.collab-proxy@1.2.16/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57b0c806ba25b48aa8a6ecb3345a4a9b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/.gitlab-ci.yml b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/.gitlab-ci.yml new file mode 100644 index 0000000..4c64e22 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/.gitlab-ci.yml @@ -0,0 +1,15 @@ +image: node:6.10.0 + +stages: + - push_to_packman_staging + +push_to_packman_staging: + stage: push_to_packman_staging + only: + - tags + script: + - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" package.json + - sed -i "s/PLACEHOLDERSHA/$CI_COMMIT_SHA/g" package.json + - sed -i "s/0.0.1-PLACEHOLDERVERSION/$CI_COMMIT_TAG/g" CHANGELOG.md + - curl -u $USER_NAME:$API_KEY https://staging-packages.unity.com/auth > .npmrc + - npm publish diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md new file mode 100644 index 0000000..269a7c4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md @@ -0,0 +1,22 @@ +# Changelog +## [1.0.6] - 2020-11-30 +- isExplicitlyReferenced set to 0 (case 1296162) +## [1.0.5] - 2020-11-04 +- Removed pdb files + +## [1.0.4] - 2020-11-03 +- Added the portable-pdb (DSTR-37) + +## [1.0.3] - 2020-10-30 +- Fixed being able to load mdb or portable-pdb symbolsbug (DSTR-37) +- Minimum unity version updated (case 1279253) + +## [1.0.2] - 2019-12-04 + +- Added missed metafiles + +## [0.0.1] - 2019-02-21 + +### This is the first release of *Unity Package com.unity.ext.nunit*. + +- Migrated the custom version of nunit from inside of unity. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md.meta new file mode 100644 index 0000000..d91fbde --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f49bbe06ffa5ae24abe32abdab430c24 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/Documentation~/ext.nunit.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/Documentation~/ext.nunit.md new file mode 100644 index 0000000..2a38b9d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/Documentation~/ext.nunit.md @@ -0,0 +1,6 @@ +# Custom Nunit build to work with Unity + +This version of nunit works with all platforms, il2cpp and Mono AOT. + +For Nunit Documentation: +https://github.com/nunit/docs/wiki/NUnit-Documentation diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md new file mode 100644 index 0000000..ccc1f59 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md @@ -0,0 +1,19 @@ +Copyright (c) 2018 Charlie Poole, Rob Prouse + +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. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md.meta new file mode 100644 index 0000000..90df748 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f91a00d2dca52b843b2d50ccf750737d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md new file mode 100644 index 0000000..2a38b9d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md @@ -0,0 +1,6 @@ +# Custom Nunit build to work with Unity + +This version of nunit works with all platforms, il2cpp and Mono AOT. + +For Nunit Documentation: +https://github.com/nunit/docs/wiki/NUnit-Documentation diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md.meta new file mode 100644 index 0000000..e9a7f9f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5da62a0c1c5218c4aa16b74546a7822d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35.meta new file mode 100644 index 0000000..278a2fa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a36d8b72880a8004f96ac54ce4598ff9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom.meta new file mode 100644 index 0000000..750f82c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2347243c7aa3e224f9282dc94e6fc3b2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll new file mode 100644 index 0000000..ac346cb Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll.meta new file mode 100644 index 0000000..4d8a380 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/net35/unity-custom/nunit.framework.dll.meta @@ -0,0 +1,33 @@ +fileFormatVersion: 2 +guid: f1605f5534186904fa2c4c42acbfe01e +PluginImporter: + externalObjects: {} + serializedVersion: 2 + iconMap: {} + executionOrder: {} + defineConstraints: [] + isPreloaded: 0 + isOverridable: 1 + isExplicitlyReferenced: 1 + validateReferences: 1 + platformData: + - first: + Any: + second: + enabled: 1 + settings: {} + - first: + Editor: Editor + second: + enabled: 0 + settings: + DefaultValueInitialized: true + - first: + Windows Store Apps: WindowsStoreApps + second: + enabled: 0 + settings: + CPU: AnyCPU + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json new file mode 100644 index 0000000..2ea221d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json @@ -0,0 +1,24 @@ +{ + "displayName": "Custom NUnit", + "name": "com.unity.ext.nunit", + "version": "1.0.6", + "unity": "2019.2", + "description": "Custom version of the nunit package build to work with Unity. Used by the Unity Test Framework.", + "keywords": [ + "nunit", + "unittest", + "test" + ], + "category": "Libraries", + "repository": { + "url": "https://github.cds.internal.unity3d.com/unity/com.unity.ext.nunit.git", + "type": "git", + "revision": "29ea4d6504a5f58fb3a6934db839aa80ae6d9d88" + }, + "relatedPackages": { + "com.unity.ext.nunit.tests": "1.0.6" + }, + "upmCi": { + "footprint": "e9f76bd265402773096bf08a8ffb51cd3d76f39a" + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json.meta new file mode 100644 index 0000000..ad88492 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ext.nunit@1.0.6/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8143d3a8390f2c64685e3bc272bd9e90 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig new file mode 100644 index 0000000..aca1979 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/.editorconfig @@ -0,0 +1,6 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md new file mode 100644 index 0000000..c93c873 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md @@ -0,0 +1,74 @@ +# Code Editor Package for Rider + +## [1.1.4] - 2019-11-21 + +fix warning - unreachable code + + +## [1.1.3] - 2019-10-17 + + - Update External Editor, when new toolbox build was installed + - Add xaml to default list of extensions to include in csproj + - Avoid initializing Rider package in secondary Unity process, which does Asset processing + - Reflect multiple csc.rsp arguments to generated csproj files: https://github.com/JetBrains/resharper-unity/issues/1337 + - Setting, which allowed to override LangVersion removed in favor of langversion in csc.rsp + - Environment.NewLine is used in generated project files instead of Windows line separator. + +## [1.1.2] - 2019-09-18 + +performance optimizations: + - avoid multiple evaluations + - avoid reflection in DisableSyncSolutionOnceCallBack + - project generation optimization +fixes: + - avoid compilation error with incompatible `Test Framework` package + +## [1.1.1] - 2019-08-26 + +parse nowarn in csc.rsp +warning, when Unity was started from Rider, but external editor was different +improved unit test support +workaround to avoid Unity internal project-generation (fix #28) + + +## [1.1.0] - 2019-07-02 + +new setting to manage list of extensions to be opened with Rider +avoid breaking everything on any unhandled exception in RiderScriptEditor cctor +hide Rider settings, when different Editor is selected +dynamically load only newer rider plugins +path detection (work on unix symlinks) +speed up for project generation +lots of bug fixing + +## [1.0.8] - 2019-05-20 + +Fix NullReferenceException when External editor was pointing to non-existing Rider everything was broken by null-ref. + +## [1.0.7] - 2019-05-16 + +Initial migration steps from rider plugin to package. +Fix OSX check and opening of files. + +## [1.0.6] - 2019-04-30 + +Ensure asset database is refreshed when generating csproj and solution files. + +## [1.0.5] - 2019-04-27 + +Add support for generating all csproj files. + +## [1.0.4] - 2019-04-18 + +Fix relative package paths. +Fix opening editor on mac. + +## [1.0.3] - 2019-04-12 + +Fixing null reference issue for callbacks to Asset pipeline. + +## [1.0.2] - 2019-01-01 + +### This is the first release of *Unity Package rider_editor*. + +Using the newly created api to integrate Rider with Unity. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta new file mode 100644 index 0000000..344cac5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8645aa9c3c74fb34ba9499e14fb332b5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md new file mode 100644 index 0000000..576d096 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md @@ -0,0 +1,6 @@ +# Contributing + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Once you have a change ready following these ground rules. Simply make a pull request \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta new file mode 100644 index 0000000..81c20c6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e83f8baac96eaa47bdd9ca781cd2002 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md new file mode 100644 index 0000000..9ddd634 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Documentation~/README.md @@ -0,0 +1,4 @@ +# Code Editor Package for Rider + +This package is not intended to be modified by users. +Nor does it provide any api intended to be included in user projects. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md new file mode 100644 index 0000000..eb18dfb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Unity Technologies + +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/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta new file mode 100644 index 0000000..be2f8e6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5598b14661b5f4c43bed757f34b6d172 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta new file mode 100644 index 0000000..cf6222d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9129183a42052cd43b9c284d6dbd541e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta new file mode 100644 index 0000000..49130a6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1b393f6b29a9ee84c803af1ab4944b71 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs new file mode 100644 index 0000000..6c04ea3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs @@ -0,0 +1,457 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using JetBrains.Annotations; +using Microsoft.Win32; +using Unity.CodeEditor; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public interface IDiscovery + { + CodeEditor.Installation[] PathCallback(); + } + + public class Discovery : IDiscovery + { + public CodeEditor.Installation[] PathCallback() + { + return RiderPathLocator.GetAllRiderPaths() + .Select(riderInfo => new CodeEditor.Installation + { + Path = riderInfo.Path, + Name = riderInfo.Presentation + }) + .OrderBy(a=>a.Name) + .ToArray(); + } + } + + /// + /// This code is a modified version of the JetBrains resharper-unity plugin listed here: + /// https://github.com/JetBrains/resharper-unity/blob/master/unity/JetBrains.Rider.Unity.Editor/EditorPlugin/RiderPathLocator.cs + /// + public static class RiderPathLocator + { +#if !(UNITY_4_7 || UNITY_5_5) + [UsedImplicitly] // Used in com.unity.ide.rider + public static RiderInfo[] GetAllRiderPaths() + { + try + { + switch (SystemInfo.operatingSystemFamily) + { + case OperatingSystemFamily.Windows: + { + return CollectRiderInfosWindows(); + } + + case OperatingSystemFamily.MacOSX: + { + return CollectRiderInfosMac(); + } + + case OperatingSystemFamily.Linux: + { + return CollectAllRiderPathsLinux(); + } + } + } + catch (Exception e) + { + Debug.LogException(e); + } + + return new RiderInfo[0]; + } +#endif + +#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider + internal static RiderInfo[] GetAllFoundInfos(OperatingSystemFamilyRider operatingSystemFamily) + { + try + { + switch (operatingSystemFamily) + { + case OperatingSystemFamilyRider.Windows: + { + return CollectRiderInfosWindows(); + } + case OperatingSystemFamilyRider.MacOSX: + { + return CollectRiderInfosMac(); + } + case OperatingSystemFamilyRider.Linux: + { + return CollectAllRiderPathsLinux(); + } + } + } + catch (Exception e) + { + Debug.LogException(e); + } + + return new RiderInfo[0]; + } + + internal static string[] GetAllFoundPaths(OperatingSystemFamilyRider operatingSystemFamily) + { + return GetAllFoundInfos(operatingSystemFamily).Select(a=>a.Path).ToArray(); + } +#endif + + private static RiderInfo[] CollectAllRiderPathsLinux() + { + var installInfos = new List(); + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + var toolboxRiderRootPath = GetToolboxBaseDir(); + installInfos.AddRange(CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider.sh", false) + .Select(a => new RiderInfo(a, true)).ToList()); + + //$Home/.local/share/applications/jetbrains-rider.desktop + var shortcut = new FileInfo(Path.Combine(home, @".local/share/applications/jetbrains-rider.desktop")); + + if (shortcut.Exists) + { + var lines = File.ReadAllLines(shortcut.FullName); + foreach (var line in lines) + { + if (!line.StartsWith("Exec=\"")) + continue; + var path = line.Split('"').Where((item, index) => index == 1).SingleOrDefault(); + if (string.IsNullOrEmpty(path)) + continue; + + if (installInfos.Any(a => a.Path == path)) // avoid adding similar build as from toolbox + continue; + installInfos.Add(new RiderInfo(path, false)); + } + } + } + + // snap install + var snapInstallPath = "/snap/rider/current/bin/rider.sh"; + if (new FileInfo(snapInstallPath).Exists) + installInfos.Add(new RiderInfo(snapInstallPath, false)); + + return installInfos.ToArray(); + } + + private static RiderInfo[] CollectRiderInfosMac() + { + var installInfos = new List(); + // "/Applications/*Rider*.app" + var folder = new DirectoryInfo("/Applications"); + if (folder.Exists) + { + installInfos.AddRange(folder.GetDirectories("*Rider*.app") + .Select(a => new RiderInfo(a.FullName, false)) + .ToList()); + } + + // /Users/user/Library/Application Support/JetBrains/Toolbox/apps/Rider/ch-1/181.3870.267/Rider EAP.app + var toolboxRiderRootPath = GetToolboxBaseDir(); + var paths = CollectPathsFromToolbox(toolboxRiderRootPath, "", "Rider*.app", true) + .Select(a => new RiderInfo(a, true)); + installInfos.AddRange(paths); + + return installInfos.ToArray(); + } + + private static RiderInfo[] CollectRiderInfosWindows() + { + var installInfos = new List(); + var toolboxRiderRootPath = GetToolboxBaseDir(); + var installPathsToolbox = CollectPathsFromToolbox(toolboxRiderRootPath, "bin", "rider64.exe", false).ToList(); + installInfos.AddRange(installPathsToolbox.Select(a => new RiderInfo(a, true)).ToList()); + + var installPaths = new List(); + const string registryKey = @"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"; + CollectPathsFromRegistry(registryKey, installPaths); + const string wowRegistryKey = @"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"; + CollectPathsFromRegistry(wowRegistryKey, installPaths); + + installInfos.AddRange(installPaths.Select(a => new RiderInfo(a, false)).ToList()); + + return installInfos.ToArray(); + } + + private static string GetToolboxBaseDir() + { + switch (SystemInfo.operatingSystemFamily) + { + case OperatingSystemFamily.Windows: + { + var localAppData = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData); + return Path.Combine(localAppData, @"JetBrains\Toolbox\apps\Rider"); + } + + case OperatingSystemFamily.MacOSX: + { + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + return Path.Combine(home, @"Library/Application Support/JetBrains/Toolbox/apps/Rider"); + } + break; + } + + case OperatingSystemFamily.Linux: + { + var home = Environment.GetEnvironmentVariable("HOME"); + if (!string.IsNullOrEmpty(home)) + { + return Path.Combine(home, @".local/share/JetBrains/Toolbox/apps/Rider"); + } + break; + } + } + return string.Empty; + } + + internal static string GetBuildNumber(string path) + { + var file = new FileInfo(Path.Combine(path, GetRelativePathToBuildTxt())); + if (!file.Exists) + return string.Empty; + var text = File.ReadAllText(file.FullName); + if (text.Length > 3) + return text.Substring(3); + return string.Empty; + } + + internal static bool IsToolbox(string path) + { + return path.StartsWith(GetToolboxBaseDir()); + } + + private static string GetRelativePathToBuildTxt() + { + switch (SystemInfo.operatingSystemFamily) + { + case OperatingSystemFamily.Windows: + case OperatingSystemFamily.Linux: + return "../../build.txt"; + case OperatingSystemFamily.MacOSX: + return "Contents/Resources/build.txt"; + } + throw new Exception("Unknown OS"); + } + + private static void CollectPathsFromRegistry(string registryKey, List installPaths) + { + using (var key = Registry.LocalMachine.OpenSubKey(registryKey)) + { + if (key == null) return; + foreach (var subkeyName in key.GetSubKeyNames().Where(a => a.Contains("Rider"))) + { + using (var subkey = key.OpenSubKey(subkeyName)) + { + var folderObject = subkey?.GetValue("InstallLocation"); + if (folderObject == null) continue; + var folder = folderObject.ToString(); + var possiblePath = Path.Combine(folder, @"bin\rider64.exe"); + if (File.Exists(possiblePath)) + installPaths.Add(possiblePath); + } + } + } + } + + private static string[] CollectPathsFromToolbox(string toolboxRiderRootPath, string dirName, string searchPattern, + bool isMac) + { + if (!Directory.Exists(toolboxRiderRootPath)) + return new string[0]; + + var channelDirs = Directory.GetDirectories(toolboxRiderRootPath); + var paths = channelDirs.SelectMany(channelDir => + { + try + { + // use history.json - last entry stands for the active build https://jetbrains.slack.com/archives/C07KNP99D/p1547807024066500?thread_ts=1547731708.057700&cid=C07KNP99D + var historyFile = Path.Combine(channelDir, ".history.json"); + if (File.Exists(historyFile)) + { + var json = File.ReadAllText(historyFile); + var build = ToolboxHistory.GetLatestBuildFromJson(json); + if (build != null) + { + var buildDir = Path.Combine(channelDir, build); + var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); + if (executablePaths.Any()) + return executablePaths; + } + } + + var channelFile = Path.Combine(channelDir, ".channel.settings.json"); + if (File.Exists(channelFile)) + { + var json = File.ReadAllText(channelFile).Replace("active-application", "active_application"); + var build = ToolboxInstallData.GetLatestBuildFromJson(json); + if (build != null) + { + var buildDir = Path.Combine(channelDir, build); + var executablePaths = GetExecutablePaths(dirName, searchPattern, isMac, buildDir); + if (executablePaths.Any()) + return executablePaths; + } + } + + // changes in toolbox json files format may brake the logic above, so return all found Rider installations + return Directory.GetDirectories(channelDir) + .SelectMany(buildDir => GetExecutablePaths(dirName, searchPattern, isMac, buildDir)); + } + catch (Exception e) + { + // do not write to Debug.Log, just log it. + Logger.Warn($"Failed to get RiderPath from {channelDir}", e); + } + + return new string[0]; + }) + .Where(c => !string.IsNullOrEmpty(c)) + .ToArray(); + return paths; + } + + private static string[] GetExecutablePaths(string dirName, string searchPattern, bool isMac, string buildDir) + { + var folder = new DirectoryInfo(Path.Combine(buildDir, dirName)); + if (!folder.Exists) + return new string[0]; + + if (!isMac) + return new[] {Path.Combine(folder.FullName, searchPattern)}.Where(File.Exists).ToArray(); + return folder.GetDirectories(searchPattern).Select(f => f.FullName) + .Where(Directory.Exists).ToArray(); + } + + // Disable the "field is never assigned" compiler warning. We never assign it, but Unity does. + // Note that Unity disable this warning in the generated C# projects +#pragma warning disable 0649 + + [Serializable] + class ToolboxHistory + { + public List history; + + [CanBeNull] + public static string GetLatestBuildFromJson(string json) + { + try + { +#if UNITY_4_7 || UNITY_5_5 + return JsonConvert.DeserializeObject(json).history.LastOrDefault()?.item.build; +#else + return JsonUtility.FromJson(json).history.LastOrDefault()?.item.build; +#endif + } + catch (Exception) + { + Logger.Warn($"Failed to get latest build from json {json}"); + } + + return null; + } + } + + [Serializable] + class ItemNode + { + public BuildNode item; + } + + [Serializable] + class BuildNode + { + public string build; + } + + // ReSharper disable once ClassNeverInstantiated.Global + [Serializable] + class ToolboxInstallData + { + // ReSharper disable once InconsistentNaming + public ActiveApplication active_application; + + [CanBeNull] + public static string GetLatestBuildFromJson(string json) + { + try + { +#if UNITY_4_7 || UNITY_5_5 + var toolbox = JsonConvert.DeserializeObject(json); +#else + var toolbox = JsonUtility.FromJson(json); +#endif + var builds = toolbox.active_application.builds; + if (builds != null && builds.Any()) + return builds.First(); + } + catch (Exception) + { + Logger.Warn($"Failed to get latest build from json {json}"); + } + + return null; + } + } + + [Serializable] + class ActiveApplication + { + // ReSharper disable once InconsistentNaming + public List builds; + } + +#pragma warning restore 0649 + + public struct RiderInfo + { + public bool IsToolbox; + public string Presentation; + public string BuildVersion; + public string Path; + + public RiderInfo(string path, bool isToolbox) + { + if (path == RiderScriptEditor.CurrentEditor) + { + RiderScriptEditorData.instance.Init(); + BuildVersion = RiderScriptEditorData.instance.currentEditorVersion; + } + else + BuildVersion = GetBuildNumber(path); + Path = new FileInfo(path).FullName; // normalize separators + var presentation = "Rider " + BuildVersion; + if (isToolbox) + presentation += " (JetBrains Toolbox)"; + + Presentation = presentation; + IsToolbox = isToolbox; + } + } + + private static class Logger + { + internal static void Warn(string message, Exception e = null) + { +#if RIDER_EDITOR_PLUGIN // can't be used in com.unity.ide.rider + Log.GetLog(typeof(RiderPathLocator).Name).Warn(message); + if (e != null) + Log.GetLog(typeof(RiderPathLocator).Name).Warn(e); +#else + Debug.LogError(message); + if (e != null) + Debug.LogException(e); +#endif + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta new file mode 100644 index 0000000..ea4ef85 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Discovery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dab656c79e1985c40b31faebcda44442 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs new file mode 100644 index 0000000..91e9624 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs @@ -0,0 +1,136 @@ +using System; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.CompilerServices; +using Debug = UnityEngine.Debug; + +namespace Packages.Rider.Editor +{ + public static class EditorPluginInterop + { + private static string ourEntryPointTypeName = "JetBrains.Rider.Unity.Editor.PluginEntryPoint"; + + private static Assembly ourEditorPluginAssembly; + + public static Assembly EditorPluginAssembly + { + get + { + if (ourEditorPluginAssembly != null) + return ourEditorPluginAssembly; + var assemblies = AppDomain.CurrentDomain.GetAssemblies(); + ourEditorPluginAssembly = assemblies.FirstOrDefault(a => a.GetName().Name.Equals("JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked")); + return ourEditorPluginAssembly; + } + } + + + private static void DisableSyncSolutionOnceCallBack() + { + // RiderScriptableSingleton.Instance.CsprojProcessedOnce = true; + // Otherwise EditorPlugin regenerates all on every AppDomain reload + var assembly = EditorPluginAssembly; + if (assembly == null) return; + var type = assembly.GetType("JetBrains.Rider.Unity.Editor.Utils.RiderScriptableSingleton"); + if (type == null) return; + var baseType = type.BaseType; + if (baseType == null) return; + var instance = baseType.GetProperty("Instance"); + if (instance == null) return; + var instanceVal = instance.GetValue(null); + var member = type.GetProperty("CsprojProcessedOnce"); + if (member==null) return; + member.SetValue(instanceVal, true); + } + + public static string LogPath + { + get + { + try + { + var assembly = EditorPluginAssembly; + if (assembly == null) return null; + var type = assembly.GetType(ourEntryPointTypeName); + if (type == null) return null; + var field = type.GetField("LogPath", BindingFlags.NonPublic | BindingFlags.Static); + if (field == null) return null; + return field.GetValue(null) as string; + } + catch (Exception) + { + Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation."); + } + + return null; + } + } + + public static bool OpenFileDllImplementation(string path, int line, int column) + { + var openResult = false; + // reflection for fast OpenFileLineCol, when Rider is started and protocol connection is established + try + { + var assembly = EditorPluginAssembly; + if (assembly == null) return false; + var type = assembly.GetType(ourEntryPointTypeName); + if (type == null) return false; + var field = type.GetField("OpenAssetHandler", BindingFlags.NonPublic | BindingFlags.Static); + if (field == null) return false; + var handlerInstance = field.GetValue(null); + var method = handlerInstance.GetType() + .GetMethod("OnOpenedAsset", new[] {typeof(string), typeof(int), typeof(int)}); + if (method == null) return false; + var assetFilePath = path; + if (!string.IsNullOrEmpty(path)) + assetFilePath = Path.GetFullPath(path); + + openResult = (bool) method.Invoke(handlerInstance, new object[] {assetFilePath, line, column}); + } + catch (Exception e) + { + Debug.Log("Unable to do OpenFile to Rider from dll, fallback to com.unity.ide.rider implementation."); + Debug.LogException(e); + } + + return openResult; + } + + public static bool EditorPluginIsLoadedFromAssets(Assembly assembly) + { + if (assembly == null) + return false; + var location = assembly.Location; + var currentDir = Directory.GetCurrentDirectory(); + return location.StartsWith(currentDir, StringComparison.InvariantCultureIgnoreCase); + } + + + internal static void InitEntryPoint(Assembly assembly) + { + try + { + if (Version.TryParse(RiderScriptEditorData.instance.currentEditorVersion, out var version)) + { + if (version.Major < 192) + DisableSyncSolutionOnceCallBack(); // is require for Rider prior to 2019.2 + } + else + DisableSyncSolutionOnceCallBack(); + + var type = assembly.GetType("JetBrains.Rider.Unity.Editor.AfterUnity56.EntryPoint"); + if (type == null) + type = assembly.GetType("JetBrains.Rider.Unity.Editor.UnitTesting.EntryPoint"); // oldRider + RuntimeHelpers.RunClassConstructor(type.TypeHandle); + } + catch (TypeInitializationException ex) + { + Debug.LogException(ex); + if (ex.InnerException != null) + Debug.LogException(ex.InnerException); + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta new file mode 100644 index 0000000..fda18d3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/EditorPluginInterop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9bd02a3a916be64c9b47b1305149423 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs new file mode 100644 index 0000000..19ef8ab --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs @@ -0,0 +1,22 @@ +namespace Packages.Rider.Editor +{ + public enum LoggingLevel + { + /// + /// Do not use it in logging. Only in config to disable logging. + /// + OFF, + /// For errors that lead to application failure + FATAL, + /// For errors that must be shown in Exception Browser + ERROR, + /// Suspicious situations but not errors + WARN, + /// Regular level for important events + INFO, + /// Additional info for debbuging + VERBOSE, + /// Methods & callstacks tracing, more than verbose + TRACE, + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta new file mode 100644 index 0000000..c0494f3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/LoggingLevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71bb46b59a9a7a346bbab1e185c723df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs new file mode 100644 index 0000000..bda3fcb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs @@ -0,0 +1,128 @@ +using Unity.CodeEditor; +using UnityEditor; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public class PluginSettings + { + public static LoggingLevel SelectedLoggingLevel + { + get => (LoggingLevel) EditorPrefs.GetInt("Rider_SelectedLoggingLevel", 0); + set + { + EditorPrefs.SetInt("Rider_SelectedLoggingLevel", (int) value); + } + } + + public static bool LogEventsCollectorEnabled + { + get { return EditorPrefs.GetBool("Rider_LogEventsCollectorEnabled", true); } + private set { EditorPrefs.SetBool("Rider_LogEventsCollectorEnabled", value); } + } + + + private static GUIStyle ourVersionInfoStyle = new GUIStyle() + { + normal = new GUIStyleState() + { + textColor = new Color(0, 0, 0, .6f), + }, + margin = new RectOffset(4, 4, 4, 4), + }; + + /// + /// Preferences menu layout + /// + /// + /// Contains all 3 toggles: Enable/Disable; Debug On/Off; Writing Launch File On/Off + /// + [SettingsProvider] + private static SettingsProvider RiderPreferencesItem() + { + if (!RiderScriptEditor.IsRiderInstallation(RiderScriptEditor.CurrentEditor)) + return null; + if (!RiderScriptEditorData.instance.shouldLoadEditorPlugin) + return null; + var provider = new SettingsProvider("Preferences/Rider", SettingsScope.User) + { + label = "Rider", + keywords = new[] { "Rider" }, + guiHandler = (searchContext) => + { + EditorGUIUtility.labelWidth = 200f; + EditorGUILayout.BeginVertical(); + + GUILayout.BeginVertical(); + LogEventsCollectorEnabled = + EditorGUILayout.Toggle(new GUIContent("Pass Console to Rider:"), LogEventsCollectorEnabled); + + GUILayout.EndVertical(); + GUILayout.Label(""); + + if (!string.IsNullOrEmpty(EditorPluginInterop.LogPath)) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PrefixLabel("Log file:"); + var previous = GUI.enabled; + GUI.enabled = previous && SelectedLoggingLevel != LoggingLevel.OFF; + var button = GUILayout.Button(new GUIContent("Open log")); + if (button) + { + //UnityEditorInternal.InternalEditorUtility.OpenFileAtLineExternal(PluginEntryPoint.LogPath, 0); + // works much faster than the commented code, when Rider is already started + CodeEditor.CurrentEditor.OpenProject(EditorPluginInterop.LogPath, 0, 0); + } + + GUI.enabled = previous; + GUILayout.EndHorizontal(); + } + + var loggingMsg = + @"Sets the amount of Rider Debug output. If you are about to report an issue, please select Verbose logging level and attach Unity console output to the issue."; + SelectedLoggingLevel = + (LoggingLevel) EditorGUILayout.EnumPopup(new GUIContent("Logging Level:", loggingMsg), + SelectedLoggingLevel); + + + EditorGUILayout.HelpBox(loggingMsg, MessageType.None); + + var githubRepo = "https://github.com/JetBrains/resharper-unity"; + var caption = $"{githubRepo}"; + LinkButton(caption: caption, url: githubRepo); + + GUILayout.FlexibleSpace(); + GUILayout.BeginHorizontal(); + + GUILayout.FlexibleSpace(); + var assembly = EditorPluginInterop.EditorPluginAssembly; + if (assembly != null) + { + var version = assembly.GetName().Version; + GUILayout.Label("Plugin version: " + version, ourVersionInfoStyle); + } + + GUILayout.EndHorizontal(); + + EditorGUILayout.EndVertical(); + } + }; + return provider; + } + + private static void LinkButton(string caption, string url) + { + var style = GUI.skin.label; + style.richText = true; + + var bClicked = GUILayout.Button(caption, style); + + var rect = GUILayoutUtility.GetLastRect(); + rect.width = style.CalcSize(new GUIContent(caption)).x; + EditorGUIUtility.AddCursorRect(rect, MouseCursor.Link); + + if (bClicked) + Application.OpenURL(url); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta new file mode 100644 index 0000000..279a4cc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PluginSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1bfe12aa306c0c74db4f4f1a1a0ae5ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta new file mode 100644 index 0000000..40cdc60 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: aa290bd9a165a0543a4bf85ac73914bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs new file mode 100644 index 0000000..230633f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs @@ -0,0 +1,16 @@ +using Unity.CodeEditor; +using UnityEditor; + +namespace Packages.Rider.Editor.PostProcessors +{ + public class RiderAssetPostprocessor: AssetPostprocessor + { + public static bool OnPreGeneratingCSProjectFiles() + { + var path = RiderScriptEditor.GetEditorRealPath(CodeEditor.CurrentEditorInstallation); + if (RiderScriptEditor.IsRiderInstallation(path)) + return !ProjectGeneration.isRiderProjectGeneration; + return false; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta new file mode 100644 index 0000000..68658cc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/PostProcessors/RiderAssetPostprocessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45471ad7b8c1f964da5e3c07d57fbf4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta new file mode 100644 index 0000000..37615b9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 313cbe17019f1934397f91069831062c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs new file mode 100644 index 0000000..6ea51dc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs @@ -0,0 +1,23 @@ +using System; +using System.IO; +using System.Text; + +namespace Packages.Rider.Editor { + class FileIOProvider : IFileIO + { + public bool Exists(string fileName) + { + return File.Exists(fileName); + } + + public string ReadAllText(string fileName) + { + return File.ReadAllText(fileName); + } + + public void WriteAllText(string fileName, string content) + { + File.WriteAllText(fileName, content, Encoding.UTF8); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta new file mode 100644 index 0000000..2763839 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/FileIOProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a6ba838b1348d5e46a7eaacd1646c1d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs new file mode 100644 index 0000000..476766e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs @@ -0,0 +1,16 @@ +using System; + +namespace Packages.Rider.Editor { + class GUIDProvider : IGUIDGenerator + { + public string ProjectGuid(string projectName, string assemblyName) + { + return SolutionGuidGenerator.GuidForProject(projectName + assemblyName); + } + + public string SolutionGuid(string projectName, string extension) + { + return SolutionGuidGenerator.GuidForSolution(projectName, extension); // GetExtensionOfSourceFiles(assembly.sourceFiles) + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta new file mode 100644 index 0000000..7b331f2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/GUIDProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cfde1a59fb35574189691a9de1df93b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs new file mode 100644 index 0000000..d0a2664 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs @@ -0,0 +1,1090 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security; +using System.Security.Cryptography; +using System.Text; +using System.Text.RegularExpressions; +using Packages.Rider.Editor.Util; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; +using UnityEditorInternal; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public interface IGenerator + { + bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles); + void Sync(); + bool HasSolutionBeenGenerated(); + string SolutionFile(); + string ProjectDirectory { get; } + void GenerateAll(bool generateAll); + } + + public interface IFileIO + { + bool Exists(string fileName); + + string ReadAllText(string fileName); + void WriteAllText(string fileName, string content); + } + + public interface IGUIDGenerator + { + string ProjectGuid(string projectName, string assemblyName); + string SolutionGuid(string projectName, string extension); + } + + public interface IAssemblyNameProvider + { + string GetAssemblyNameFromScriptPath(string path); + IEnumerable GetAssemblies(Func shouldFileBePartOfSolution); + IEnumerable GetAllAssetPaths(); + UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath); + ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories); + } + + class AssemblyNameProvider : IAssemblyNameProvider + { + public string GetAssemblyNameFromScriptPath(string path) + { + return CompilationPipeline.GetAssemblyNameFromScriptPath(path); + } + + public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution) + { + return CompilationPipeline.GetAssemblies() + .Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution)); + } + + public IEnumerable GetAllAssetPaths() + { + return AssetDatabase.GetAllAssetPaths(); + } + + public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath) + { + return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath); + } + + public ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories) + { + return CompilationPipeline.ParseResponseFile( + responseFilePath, + projectDirectory, + systemReferenceDirectories + ); + } + } + + public class ProjectGeneration : IGenerator + { + enum ScriptingLanguage + { + None, + CSharp + } + + public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003"; + + /// + /// Map source extensions to ScriptingLanguages + /// + static readonly Dictionary k_BuiltinSupportedExtensions = + new Dictionary + { + {"cs", ScriptingLanguage.CSharp}, + {"uxml", ScriptingLanguage.None}, + {"uss", ScriptingLanguage.None}, + {"shader", ScriptingLanguage.None}, + {"compute", ScriptingLanguage.None}, + {"cginc", ScriptingLanguage.None}, + {"hlsl", ScriptingLanguage.None}, + {"glslinc", ScriptingLanguage.None}, + {"template", ScriptingLanguage.None}, + {"raytrace", ScriptingLanguage.None} + }; + + string m_SolutionProjectEntryTemplate = string.Join(Environment.NewLine, + @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", + @"EndProject").Replace(" ", "\t"); + + string m_SolutionProjectConfigurationTemplate = string.Join(Environment.NewLine, + @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", + @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU", + @" {{{0}}}.Release|Any CPU.ActiveCfg = Release|Any CPU", + @" {{{0}}}.Release|Any CPU.Build.0 = Release|Any CPU").Replace(" ", "\t"); + + static readonly string[] k_ReimportSyncExtensions = {".dll", ".asmdef"}; + + /// + /// Map ScriptingLanguages to project extensions + /// + /*static readonly Dictionary k_ProjectExtensions = new Dictionary + { + { ScriptingLanguage.CSharp, ".csproj" }, + { ScriptingLanguage.None, ".csproj" }, + };*/ + static readonly Regex k_ScriptReferenceExpression = new Regex( + @"^Library.ScriptAssemblies.(?(?.*)\.dll$)", + RegexOptions.Compiled | RegexOptions.IgnoreCase); + + string[] m_ProjectSupportedExtensions = new string[0]; + bool m_ShouldGenerateAll; + + public string ProjectDirectory { get; } + + public void GenerateAll(bool generateAll) + { + m_ShouldGenerateAll = generateAll; + } + + readonly string m_ProjectName; + readonly IAssemblyNameProvider m_AssemblyNameProvider; + readonly IFileIO m_FileIOProvider; + readonly IGUIDGenerator m_GUIDGenerator; + internal static bool isRiderProjectGeneration; // workaround to https://github.cds.internal.unity3d.com/unity/com.unity.ide.rider/issues/28 + + const string k_ToolsVersion = "4.0"; + const string k_ProductVersion = "10.0.20506"; + const string k_BaseDirectory = "."; + const string k_TargetFrameworkVersion = "v4.7.1"; + const string k_TargetLanguageVersion = "latest"; + + static readonly Regex scriptReferenceExpression = new Regex( + @"^Library.ScriptAssemblies.(?(?.*)\.dll$)", + RegexOptions.Compiled | RegexOptions.IgnoreCase); + + public ProjectGeneration() : this(Directory.GetParent(Application.dataPath).FullName) + { + } + + public ProjectGeneration(string tempDirectory) : this(tempDirectory, new AssemblyNameProvider(), new FileIOProvider(), new GUIDProvider()) + { + } + + public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider, IFileIO fileIoProvider, IGUIDGenerator guidGenerator) + { + ProjectDirectory = tempDirectory.Replace('\\', '/'); + m_ProjectName = Path.GetFileName(ProjectDirectory); + m_AssemblyNameProvider = assemblyNameProvider; + m_FileIOProvider = fileIoProvider; + m_GUIDGenerator = guidGenerator; + } + + /// + /// Syncs the scripting solution if any affected files are relevant. + /// + /// + /// Whether the solution was synced. + /// + /// + /// A set of files whose status has changed + /// + /// + /// A set of files that got reimported + /// + public bool SyncIfNeeded(IEnumerable affectedFiles, IEnumerable reimportedFiles) + { + SetupProjectSupportedExtensions(); + + if (HasFilesBeenModified(affectedFiles, reimportedFiles)) + { + Sync(); + return true; + } + + return false; + } + + bool HasFilesBeenModified(IEnumerable affectedFiles, IEnumerable reimportedFiles) + { + return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset); + } + + static bool ShouldSyncOnReimportedAsset(string asset) + { + return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension); + } + + public void Sync() + { + SetupProjectSupportedExtensions(); + var types = GetAssetPostprocessorTypes(); + isRiderProjectGeneration = true; + bool externalCodeAlreadyGeneratedProjects = OnPreGeneratingCSProjectFiles(types); + isRiderProjectGeneration = false; + if (!externalCodeAlreadyGeneratedProjects) + { + GenerateAndWriteSolutionAndProjects(types); + } + + OnGeneratedCSProjectFiles(types); + } + + public bool HasSolutionBeenGenerated() + { + return m_FileIOProvider.Exists(SolutionFile()); + } + + void SetupProjectSupportedExtensions() + { + m_ProjectSupportedExtensions = EditorSettings.projectGenerationUserExtensions; + } + + bool ShouldFileBePartOfSolution(string file) + { + string extension = Path.GetExtension(file); + + // Exclude files coming from packages except if they are internalized. + if (!m_ShouldGenerateAll && IsInternalizedPackagePath(file)) + { + return false; + } + + // Dll's are not scripts but still need to be included.. + if (extension == ".dll") + return true; + + if (file.ToLower().EndsWith(".asmdef")) + return true; + + return IsSupportedExtension(extension); + } + + bool IsSupportedExtension(string extension) + { + extension = extension.TrimStart('.'); + if (k_BuiltinSupportedExtensions.ContainsKey(extension)) + return true; + if (m_ProjectSupportedExtensions.Contains(extension)) + return true; + return false; + } + + static ScriptingLanguage ScriptingLanguageFor(Assembly island) + { + return ScriptingLanguageFor(GetExtensionOfSourceFiles(island.sourceFiles)); + } + + static string GetExtensionOfSourceFiles(string[] files) + { + return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA"; + } + + static string GetExtensionOfSourceFile(string file) + { + var ext = Path.GetExtension(file).ToLower(); + ext = ext.Substring(1); //strip dot + return ext; + } + + static ScriptingLanguage ScriptingLanguageFor(string extension) + { + return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result) + ? result + : ScriptingLanguage.None; + } + + public void GenerateAndWriteSolutionAndProjects(Type[] types) + { + // Only synchronize islands that have associated source files and ones that we actually want in the project. + // This also filters out DLLs coming from .asmdef files in packages. + var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution); + + var allAssetProjectParts = GenerateAllAssetProjectParts(); + + var monoIslands = assemblies.ToList(); + + SyncSolution(monoIslands, types); + var allProjectIslands = RelevantIslandsForMode(monoIslands).ToList(); + foreach (Assembly assembly in allProjectIslands) + { + var responseFileData = ParseResponseFileData(assembly); + SyncProject(assembly, allAssetProjectParts, responseFileData, allProjectIslands, types); + } + } + + IEnumerable ParseResponseFileData(Assembly assembly) + { + var systemReferenceDirectories = + CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel); + + Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary( + x => x, x => m_AssemblyNameProvider.ParseResponseFile( + x, + ProjectDirectory, + systemReferenceDirectories + )); + + Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any()) + .ToDictionary(x => x.Key, x => x.Value); + + if (responseFilesWithErrors.Any()) + { + foreach (var error in responseFilesWithErrors) + foreach (var valueError in error.Value.Errors) + { + Debug.LogError($"{error.Key} Parse Error : {valueError}"); + } + } + + return responseFilesData.Select(x => x.Value); + } + + Dictionary GenerateAllAssetProjectParts() + { + Dictionary stringBuilders = new Dictionary(); + + foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths()) + { + // Exclude files coming from packages except if they are internalized. + if (!m_ShouldGenerateAll && IsInternalizedPackagePath(asset)) + { + continue; + } + + string extension = Path.GetExtension(asset); + if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension)) + { + // Find assembly the asset belongs to by adding script extension and using compilation pipeline. + var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset + ".cs"); + + if (string.IsNullOrEmpty(assemblyName)) + { + continue; + } + + assemblyName = FileSystemUtil.FileNameWithoutExtension(assemblyName); + + if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder)) + { + projectBuilder = new StringBuilder(); + stringBuilders[assemblyName] = projectBuilder; + } + + projectBuilder.Append(" ") + .Append(Environment.NewLine); + } + } + + var result = new Dictionary(); + + foreach (var entry in stringBuilders) + result[entry.Key] = entry.Value.ToString(); + + return result; + } + + bool IsInternalizedPackagePath(string file) + { + if (string.IsNullOrWhiteSpace(file)) + { + return false; + } + + var packageInfo = m_AssemblyNameProvider.FindForAssetPath(file); + if (packageInfo == null) + { + return false; + } + + var packageSource = packageInfo.source; + return packageSource != PackageSource.Embedded && packageSource != PackageSource.Local; + } + + void SyncProject( + Assembly island, + Dictionary allAssetsProjectParts, + IEnumerable responseFilesData, + List allProjectIslands, + Type[] types) + { + SyncProjectFileIfNotChanged(ProjectFile(island), + ProjectText(island, allAssetsProjectParts, responseFilesData.ToList(), allProjectIslands), types); + } + + void SyncProjectFileIfNotChanged(string path, string newContents, Type[] types) + { + if (Path.GetExtension(path) == ".csproj") + { + newContents = OnGeneratedCSProject(path, newContents, types); + } + + SyncFileIfNotChanged(path, newContents); + } + + void SyncSolutionFileIfNotChanged(string path, string newContents, Type[] types) + { + newContents = OnGeneratedSlnSolution(path, newContents, types); + + SyncFileIfNotChanged(path, newContents); + } + + static List SafeGetTypes(System.Reflection.Assembly a) + { + List ret; + + try + { + ret = a.GetTypes().ToList(); + } + catch (System.Reflection.ReflectionTypeLoadException rtl) + { + ret = rtl.Types.ToList(); + } + catch (Exception) + { + return new List(); + } + + return ret.Where(r => r != null).ToList(); + } + + static void OnGeneratedCSProjectFiles(Type[] types) + { + var args = new object[0]; + foreach (var type in types) + { + var method = type.GetMethod("OnGeneratedCSProjectFiles", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + method.Invoke(null, args); + } + } + + public static Type[] GetAssetPostprocessorTypes() + { + return TypeCache.GetTypesDerivedFrom().ToArray(); // doesn't find types from EditorPlugin, which is fine + } + + static bool OnPreGeneratingCSProjectFiles(Type[] types) + { + bool result = false; + foreach (var type in types) + { + var args = new object[0]; + var method = type.GetMethod("OnPreGeneratingCSProjectFiles", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + var returnValue = method.Invoke(null, args); + if (method.ReturnType == typeof(bool)) + { + result |= (bool) returnValue; + } + } + + return result; + } + + static string OnGeneratedCSProject(string path, string content, Type[] types) + { + foreach (var type in types) + { + var args = new[] {path, content}; + var method = type.GetMethod("OnGeneratedCSProject", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + var returnValue = method.Invoke(null, args); + if (method.ReturnType == typeof(string)) + { + content = (string) returnValue; + } + } + + return content; + } + + static string OnGeneratedSlnSolution(string path, string content, Type[] types) + { + foreach (var type in types) + { + var args = new[] {path, content}; + var method = type.GetMethod("OnGeneratedSlnSolution", + System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic | + System.Reflection.BindingFlags.Static); + if (method == null) + { + continue; + } + + var returnValue = method.Invoke(null, args); + if (method.ReturnType == typeof(string)) + { + content = (string) returnValue; + } + } + + return content; + } + + void SyncFileIfNotChanged(string filename, string newContents) + { + try + { + if (m_FileIOProvider.Exists(filename) && newContents == m_FileIOProvider.ReadAllText(filename)) + { + return; + } + } + catch (Exception exception) + { + Debug.LogException(exception); + } + + m_FileIOProvider.WriteAllText(filename, newContents); + } + + string ProjectText(Assembly assembly, + Dictionary allAssetsProjectParts, + List responseFilesData, + List allProjectIslands) + { + var projectBuilder = new StringBuilder(ProjectHeader(assembly, responseFilesData)); + var references = new List(); + var projectReferences = new List(); + + foreach (string file in assembly.sourceFiles) + { + if (!ShouldFileBePartOfSolution(file)) + continue; + + var extension = Path.GetExtension(file).ToLower(); + var fullFile = EscapedRelativePathFor(file); + if (".dll" != extension) + { + projectBuilder.Append(" ").Append(Environment.NewLine); + } + else + { + references.Add(fullFile); + } + } + + // Append additional non-script files that should be included in project generation. + if (allAssetsProjectParts.TryGetValue(assembly.name, out var additionalAssetsForProject)) + projectBuilder.Append(additionalAssetsForProject); + + var islandRefs = references.Union(assembly.allReferences); + foreach (string reference in islandRefs) + { + if (reference.EndsWith("/UnityEditor.dll", StringComparison.Ordinal) + || reference.EndsWith("/UnityEngine.dll", StringComparison.Ordinal) + || reference.EndsWith("\\UnityEditor.dll", StringComparison.Ordinal) + || reference.EndsWith("\\UnityEngine.dll", StringComparison.Ordinal)) + continue; + + var match = k_ScriptReferenceExpression.Match(reference); + if (match.Success) + { + // assume csharp language + // Add a reference to a project except if it's a reference to a script assembly + // that we are not generating a project for. This will be the case for assemblies + // coming from .assembly.json files in non-internalized packages. + var dllName = match.Groups["dllname"].Value; + if (allProjectIslands.Any(i => Path.GetFileName(i.outputPath) == dllName)) + { + projectReferences.Add(match); + continue; + } + } + + string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference); + + AppendReference(fullReference, projectBuilder); + } + + var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r)); + foreach (var reference in responseRefs) + { + AppendReference(reference, projectBuilder); + } + + if (0 < projectReferences.Count) + { + projectBuilder.AppendLine(" "); + projectBuilder.AppendLine(" "); + foreach (Match reference in projectReferences) + { + var referencedProject = reference.Groups["project"].Value; + + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder + .Append(" {") + .Append(m_GUIDGenerator.ProjectGuid(m_ProjectName, reference.Groups["project"].Value)) + .Append("}") + .Append(Environment.NewLine); + projectBuilder.Append(" ").Append(referencedProject).Append("").Append(Environment.NewLine); + projectBuilder.AppendLine(" "); + } + } + + projectBuilder.Append(ProjectFooter()); + return projectBuilder.ToString(); + } + + static void AppendReference(string fullReference, StringBuilder projectBuilder) + { + //replace \ with / and \\ with / + var escapedFullPath = SecurityElement.Escape(fullReference); + escapedFullPath = escapedFullPath.Replace("\\\\", "/").Replace("\\", "/"); + projectBuilder.Append(" ").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(Environment.NewLine); + projectBuilder.Append(" ").Append(Environment.NewLine); + } + + public string ProjectFile(Assembly assembly) + { + return Path.Combine(ProjectDirectory, $"{assembly.name}.csproj"); + } + + public string SolutionFile() + { + return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln"); + } + + string ProjectHeader( + Assembly assembly, + List responseFilesData + ) + { + var otherResponseFilesData = GetOtherArgumentsFromResponseFilesData(responseFilesData); + var arguments = new object[] + { + k_ToolsVersion, k_ProductVersion, m_GUIDGenerator.ProjectGuid(m_ProjectName, assembly.name), + InternalEditorUtility.GetEngineAssemblyPath(), + InternalEditorUtility.GetEditorAssemblyPath(), + string.Join(";", + new[] {"DEBUG", "TRACE"}.Concat(EditorUserBuildSettings.activeScriptCompilationDefines).Concat(assembly.defines) + .Concat(responseFilesData.SelectMany(x => x.Defines)).Distinct().ToArray()), + MSBuildNamespaceUri, + assembly.name, + EditorSettings.projectGenerationRootNamespace, + k_TargetFrameworkVersion, + GenerateLangVersion(otherResponseFilesData["langversion"]), + k_BaseDirectory, + assembly.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe), + GenerateNoWarn(otherResponseFilesData["nowarn"].Distinct().ToArray()), + GenerateAnalyserItemGroup(otherResponseFilesData["analyzer"].Concat(otherResponseFilesData["a"]).SelectMany(x=>x.Split(';')).Distinct().ToArray()), + GenerateAnalyserAdditionalFiles(otherResponseFilesData["additionalfile"].SelectMany(x=>x.Split(';')).Distinct().ToArray()), + GenerateAnalyserRuleSet(otherResponseFilesData["ruleset"].Distinct().ToArray()), + GenerateWarningLevel(otherResponseFilesData["warn"].Concat(otherResponseFilesData["w"]).Distinct()), + GenerateWarningAsError(otherResponseFilesData["warnaserror"]), + GenerateDocumentationFile(otherResponseFilesData["doc"]) + }; + + try + { + return string.Format(GetProjectHeaderTemplate(), arguments); + } + catch (Exception) + { + throw new NotSupportedException( + "Failed creating c# project because the c# project header did not have the correct amount of arguments, which is " + + arguments.Length); + } + } + + private string GenerateDocumentationFile(IEnumerable paths) + { + if (!paths.Any()) + return String.Empty; + + + return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private string GenerateWarningAsError(IEnumerable enumerable) + { + string returnValue = String.Empty; + bool allWarningsAsErrors = false; + List warningIds = new List(); + + foreach (string s in enumerable) + { + if (s == "+") allWarningsAsErrors = true; + else if (s == "-") allWarningsAsErrors = false; + else + { + warningIds.Add(s); + } + } + + returnValue += $@" {allWarningsAsErrors}"; + if (warningIds.Any()) + { + returnValue += $"{Environment.NewLine} {string.Join(";", warningIds)}"; + } + + return $"{Environment.NewLine}{returnValue}"; + } + + private string GenerateWarningLevel(IEnumerable warningLevel) + { + var level = warningLevel.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(level)) + return level; + + return 4.ToString(); + } + + static string GetSolutionText() + { + return string.Join(Environment.NewLine, + @"", + @"Microsoft Visual Studio Solution File, Format Version {0}", + @"# Visual Studio {1}", + @"{2}", + @"Global", + @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", + @" Debug|Any CPU = Debug|Any CPU", + @" Release|Any CPU = Release|Any CPU", + @" EndGlobalSection", + @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", + @"{3}", + @" EndGlobalSection", + @" GlobalSection(SolutionProperties) = preSolution", + @" HideSolutionNode = FALSE", + @" EndGlobalSection", + @"EndGlobal", + @"").Replace(" ", "\t"); + } + + static string GetProjectFooterTemplate() + { + return string.Join(Environment.NewLine, + @" ", + @" ", + @" ", + @"", + @""); + } + + static string GetProjectHeaderTemplate() + { + var header = new[] + { + @"", + @"", + @" ", + @" {10}", + @" <_TargetFrameworkDirectories>non_empty_path_generated_by_unity.rider.package", + @" <_FullFrameworkReferenceAssemblyPaths>non_empty_path_generated_by_unity.rider.package", + @" true{16}", + @" ", + @" ", + @" Debug", + @" AnyCPU", + @" {1}", + @" 2.0", + @" {8}", + @" {{{2}}}", + @" Library", + @" Properties", + @" {7}", + @" {9}", + @" 512", + @" {11}", + @" ", + @" ", + @" true", + @" full", + @" false", + @" Temp\bin\Debug\", + @" {5}", + @" prompt", + @" {17}", + @" 0169{13}", + @" {12}{18}{19}", + @" ", + @" ", + @" pdbonly", + @" true", + @" Temp\bin\Release\", + @" prompt", + @" {17}", + @" 0169{13}", + @" {12}{18}{19}", + @" " + }; + + var forceExplicitReferences = new[] + { + @" ", + @" true", + @" true", + @" false", + @" false", + @" false", + @" " + }; + + var itemGroupStart = new[] + { + @" " + }; + + var footer = new[] + { + @" ", + @" {3}", + @" ", + @" ", + @" {4}", + @" ", + @" {14}{15}", + @" ", + @"" + }; + + var pieces = header.Concat(forceExplicitReferences).Concat(itemGroupStart).Concat(footer).ToArray(); + return string.Join(Environment.NewLine, pieces); + } + + void SyncSolution(IEnumerable islands, Type[] types) + { + SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(islands), types); + } + + string SolutionText(IEnumerable islands) + { + var fileversion = "11.00"; + var vsversion = "2010"; + + var relevantIslands = RelevantIslandsForMode(islands); + string projectEntries = GetProjectEntries(relevantIslands); + string projectConfigurations = string.Join(Environment.NewLine, + relevantIslands.Select(i => GetProjectActiveConfigurations(m_GUIDGenerator.ProjectGuid(m_ProjectName, i.name))).ToArray()); + return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations); + } + + private static string GenerateAnalyserItemGroup(string[] paths) + { + // + // + // + // + if (!paths.Any()) + return string.Empty; + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) + { + analyserBuilder.AppendLine($" "); + } + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + private static ILookup GetOtherArgumentsFromResponseFilesData(List responseFilesData) + { + var paths = responseFilesData.SelectMany(x => + { + return x.OtherArguments + .Where(a => a.StartsWith("/") || a.StartsWith("-")) + .Select(b => + { + var index = b.IndexOf(":", StringComparison.Ordinal); + if (index > 0 && b.Length > index) + { + var key = b.Substring(1, index - 1); + return new KeyValuePair(key, b.Substring(index + 1)); + } + + const string warnaserror = "warnaserror"; + if (b.Substring(1).StartsWith(warnaserror)) + { + return new KeyValuePair(warnaserror, b.Substring(warnaserror.Length+ 1) ); + } + + return default; + }); + }) + .Distinct() + .ToLookup(o => o.Key, pair => pair.Value); + return paths; + } + + private string GenerateLangVersion(IEnumerable langVersionList) + { + var langVersion = langVersionList.FirstOrDefault(); + if (!string.IsNullOrWhiteSpace(langVersion)) + return langVersion; + return k_TargetLanguageVersion; + } + + private static string GenerateAnalyserRuleSet(string[] paths) + { + //..\path\to\myrules.ruleset + if (!paths.Any()) + return string.Empty; + + return $"{Environment.NewLine}{string.Join(Environment.NewLine, paths.Select(a => $" {a}"))}"; + } + + private static string GenerateAnalyserAdditionalFiles(string[] paths) + { + if (!paths.Any()) + return string.Empty; + + + var analyserBuilder = new StringBuilder(); + analyserBuilder.AppendLine(" "); + foreach (var path in paths) + { + analyserBuilder.AppendLine($" "); + } + analyserBuilder.AppendLine(" "); + return analyserBuilder.ToString(); + } + + private static string GenerateNoWarn(string[] codes) + { + if (!codes.Any()) + return string.Empty; + + return $",{string.Join(",", codes)}"; + } + + static IEnumerable RelevantIslandsForMode(IEnumerable islands) + { + IEnumerable relevantIslands = islands.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i)); + return relevantIslands; + } + + /// + /// Get a Project("{guid}") = "MyProject", "MyProject.unityproj", "{projectguid}" + /// entry for each relevant language + /// + string GetProjectEntries(IEnumerable islands) + { + var projectEntries = islands.Select(i => string.Format( + m_SolutionProjectEntryTemplate, + m_GUIDGenerator.SolutionGuid(m_ProjectName, GetExtensionOfSourceFiles(i.sourceFiles)), + i.name, + Path.GetFileName(ProjectFile(i)), + m_GUIDGenerator.ProjectGuid(m_ProjectName, i.name) + )); + + return string.Join(Environment.NewLine, projectEntries.ToArray()); + } + + /// + /// Generate the active configuration string for a given project guid + /// + string GetProjectActiveConfigurations(string projectGuid) + { + return string.Format( + m_SolutionProjectConfigurationTemplate, + projectGuid); + } + + string EscapedRelativePathFor(string file) + { + var projectDir = ProjectDirectory.Replace('/', '\\'); + file = file.Replace('/', '\\'); + var path = SkipPathPrefix(file, projectDir); + + var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/')); + if (packageInfo != null) + { + // We have to normalize the path, because the PackageManagerRemapper assumes + // dir seperators will be os specific. + var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\'); + path = SkipPathPrefix(absolutePath, projectDir); + } + + return SecurityElement.Escape(path); + } + + static string SkipPathPrefix(string path, string prefix) + { + if (path.Replace("\\", "/").StartsWith($"{prefix}/")) + return path.Substring(prefix.Length + 1); + return path; + } + + static string NormalizePath(string path) + { + if (Path.DirectorySeparatorChar == '\\') + return path.Replace('/', Path.DirectorySeparatorChar); + return path.Replace('\\', Path.DirectorySeparatorChar); + } + + static string ProjectFooter() + { + return GetProjectFooterTemplate(); + } + + static string GetProjectExtension() + { + return ".csproj"; + } + } + + public static class SolutionGuidGenerator + { + public static string GuidForProject(string projectName) + { + return ComputeGuidHashFor(projectName + "salt"); + } + + public static string GuidForSolution(string projectName, string sourceFileExtension) + { + if (sourceFileExtension.ToLower() == "cs") + // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs + return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"; + + return ComputeGuidHashFor(projectName); + } + + static string ComputeGuidHashFor(string input) + { + var hash = MD5.Create().ComputeHash(Encoding.Default.GetBytes(input)); + return HashAsGuid(HashToString(hash)); + } + + static string HashAsGuid(string hash) + { + var guid = hash.Substring(0, 8) + "-" + hash.Substring(8, 4) + "-" + hash.Substring(12, 4) + "-" + + hash.Substring(16, 4) + "-" + hash.Substring(20, 12); + return guid.ToUpper(); + } + + static string HashToString(byte[] bs) + { + var sb = new StringBuilder(); + foreach (byte b in bs) + sb.Append(b.ToString("x2")); + return sb.ToString(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta new file mode 100644 index 0000000..4a0705c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/ProjectGeneration/ProjectGeneration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7078f19173ceac84fb9e29b9f6175201 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs new file mode 100644 index 0000000..d481133 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs @@ -0,0 +1,38 @@ +using System; +using System.IO; +using UnityEngine; +using Debug = UnityEngine.Debug; + +namespace Packages.Rider.Editor +{ + internal class RiderInitializer + { + public void Initialize(string editorPath) + { + var assembly = EditorPluginInterop.EditorPluginAssembly; + if (EditorPluginInterop.EditorPluginIsLoadedFromAssets(assembly)) + { + Debug.LogError($"Please delete {assembly.Location}. Unity 2019.2+ loads it directly from Rider installation. To disable this, open Rider's settings, search and uncheck 'Automatically install and update Rider's Unity editor plugin'."); + return; + } + + var dllName = "JetBrains.Rider.Unity.Editor.Plugin.Full.Repacked.dll"; + var relPath = "../../plugins/rider-unity/EditorPlugin"; + if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) + relPath = "Contents/plugins/rider-unity/EditorPlugin"; + var dllFile = new FileInfo(Path.Combine(Path.Combine(editorPath, relPath), dllName)); + + if (dllFile.Exists) + { + var bytes = File.ReadAllBytes(dllFile.FullName); + assembly = AppDomain.CurrentDomain.Load(bytes); // doesn't lock assembly on disk + // assembly = AppDomain.CurrentDomain.Load(AssemblyName.GetAssemblyName(dllFile.FullName)); // use this for external source debug + EditorPluginInterop.InitEntryPoint(assembly); + } + else + { + Debug.Log($"Unable to find Rider EditorPlugin {dllFile.FullName} for Unity "); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta new file mode 100644 index 0000000..11d46bc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f5a0cc9645f0e2d4fb816156dcf3f4dd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs new file mode 100644 index 0000000..debee95 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs @@ -0,0 +1,404 @@ +using System; +using System.Diagnostics; +using System.IO; +using System.Linq; +using Packages.Rider.Editor.Util; +using Unity.CodeEditor; +using UnityEditor; +using UnityEngine; +using Debug = UnityEngine.Debug; + +namespace Packages.Rider.Editor +{ + [InitializeOnLoad] + public class RiderScriptEditor : IExternalCodeEditor + { + IDiscovery m_Discoverability; + IGenerator m_ProjectGeneration; + RiderInitializer m_Initiliazer = new RiderInitializer(); + + static RiderScriptEditor() + { + try + { + var projectGeneration = new ProjectGeneration(); + var editor = new RiderScriptEditor(new Discovery(), projectGeneration); + CodeEditor.Register(editor); + var path = GetEditorRealPath(CodeEditor.CurrentEditorInstallation); + + if (IsRiderInstallation(path)) + { + if (!RiderScriptEditorData.instance.InitializedOnce) + { + var installations = editor.Installations; + // is toolbox and outdated - update + if (installations.Any() && RiderPathLocator.IsToolbox(path) && installations.All(a => a.Path != path)) + { + var toolboxInstallations = installations.Where(a => a.Name.Contains("(JetBrains Toolbox)")).ToArray(); + if (toolboxInstallations.Any()) + { + var newEditor = toolboxInstallations.Last().Path; + CodeEditor.SetExternalScriptEditor(newEditor); + path = newEditor; + } + else + { + var newEditor = installations.Last().Path; + CodeEditor.SetExternalScriptEditor(newEditor); + path = newEditor; + } + } + + // exists, is non toolbox and outdated - notify + if (installations.Any() && FileSystemUtil.EditorPathExists(path) && installations.All(a => a.Path != path)) + { + var newEditorName = installations.Last().Name; + Debug.LogWarning($"Consider updating External Editor in Unity to Rider {newEditorName}."); + } + + ShowWarningOnUnexpectedScriptEditor(path); + RiderScriptEditorData.instance.InitializedOnce = true; + } + + if (!FileSystemUtil.EditorPathExists(path)) // previously used rider was removed + { + var installations = editor.Installations; + if (installations.Any()) + { + var newEditor = installations.Last().Path; + CodeEditor.SetExternalScriptEditor(newEditor); + path = newEditor; + } + } + RiderScriptEditorData.instance.Init(); + + editor.CreateSolutionIfDoesntExist(); + if (RiderScriptEditorData.instance.shouldLoadEditorPlugin) + { + editor.m_Initiliazer.Initialize(path); + } + + InitProjectFilesWatcher(); + } + } + catch (Exception e) + { + Debug.LogException(e); + } + } + + private static void ShowWarningOnUnexpectedScriptEditor(string path) + { + // Show warning, when Unity was started from Rider, but external editor is different https://github.com/JetBrains/resharper-unity/issues/1127 + var args = Environment.GetCommandLineArgs(); + var commandlineParser = new CommandLineParser(args); + if (commandlineParser.Options.ContainsKey("-riderPath")) + { + var originRiderPath = commandlineParser.Options["-riderPath"]; + var originRealPath = GetEditorRealPath(originRiderPath); + var originVersion = RiderPathLocator.GetBuildNumber(originRealPath); + var version = RiderPathLocator.GetBuildNumber(path); + if (originVersion != string.Empty && originVersion != version) + { + Debug.LogWarning("Unity was started by a version of Rider that is not the current default external editor. Advanced integration features cannot be enabled."); + Debug.Log($"Unity was started by Rider {originVersion}, but external editor is set to: {path}"); + } + } + } + + private static void InitProjectFilesWatcher() + { + var watcher = new FileSystemWatcher(); + watcher.Path = Directory.GetCurrentDirectory(); + watcher.NotifyFilter = NotifyFilters.LastWrite; //Watch for changes in LastWrite times + watcher.Filter = "*.*"; + + // Add event handlers. + watcher.Changed += OnChanged; + watcher.Created += OnChanged; + + watcher.EnableRaisingEvents = true; // Begin watching. + + AppDomain.CurrentDomain.DomainUnload += (EventHandler) ((_, __) => + { + watcher.Dispose(); + }); + } + + private static void OnChanged(object sender, FileSystemEventArgs e) + { + var extension = Path.GetExtension(e.FullPath); + if (extension == ".sln" || extension == ".csproj") + RiderScriptEditorData.instance.HasChanges = true; + } + + internal static string GetEditorRealPath(string path) + { + if (string.IsNullOrEmpty(path)) + { + return path; + } + + if (!FileSystemUtil.EditorPathExists(path)) + return path; + + if (SystemInfo.operatingSystemFamily != OperatingSystemFamily.Windows) + { + var realPath = FileSystemUtil.GetFinalPathName(path); + + // case of snap installation + if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.Linux) + { + if (new FileInfo(path).Name.ToLowerInvariant() == "rider" && + new FileInfo(realPath).Name.ToLowerInvariant() == "snap") + { + var snapInstallPath = "/snap/rider/current/bin/rider.sh"; + if (new FileInfo(snapInstallPath).Exists) + return snapInstallPath; + } + } + + // in case of symlink + return realPath; + } + + return path; + } + + const string unity_generate_all = "unity_generate_all_csproj"; + + public RiderScriptEditor(IDiscovery discovery, IGenerator projectGeneration) + { + m_Discoverability = discovery; + m_ProjectGeneration = projectGeneration; + } + + private static string[] defaultExtensions + { + get + { + var customExtensions = new[] {"json", "asmdef", "log", "xaml"}; + return EditorSettings.projectGenerationBuiltinExtensions.Concat(EditorSettings.projectGenerationUserExtensions) + .Concat(customExtensions).Distinct().ToArray(); + } + } + + private static string[] HandledExtensions + { + get + { + return HandledExtensionsString.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries).Select(s => s.TrimStart('.', '*')) + .ToArray(); + } + } + + private static string HandledExtensionsString + { + get { return EditorPrefs.GetString("Rider_UserExtensions", string.Join(";", defaultExtensions));} + set { EditorPrefs.SetString("Rider_UserExtensions", value); } + } + + private static bool SupportsExtension(string path) + { + var extension = Path.GetExtension(path); + if (string.IsNullOrEmpty(extension)) + return false; + return HandledExtensions.Contains(extension.TrimStart('.')); + } + + public void OnGUI() + { + var prevGenerate = EditorPrefs.GetBool(unity_generate_all, false); + var generateAll = EditorGUILayout.Toggle("Generate all .csproj files.", prevGenerate); + if (generateAll != prevGenerate) + { + EditorPrefs.SetBool(unity_generate_all, generateAll); + } + + m_ProjectGeneration.GenerateAll(generateAll); + + if (RiderScriptEditorData.instance.shouldLoadEditorPlugin) + { + HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString); + } + } + + public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles, + string[] importedFiles) + { + m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles), + importedFiles); + } + + public void SyncAll() + { + AssetDatabase.Refresh(); + if (RiderScriptEditorData.instance.HasChanges) + { + m_ProjectGeneration.Sync(); + RiderScriptEditorData.instance.HasChanges = false; + } + } + + public void Initialize(string editorInstallationPath) // is called each time ExternalEditor is changed + { + RiderScriptEditorData.instance.Invalidate(editorInstallationPath); + m_ProjectGeneration.Sync(); // regenerate csproj and sln for new editor + } + + public bool OpenProject(string path, int line, int column) + { + if (path != "" && !SupportsExtension(path)) // Assets - Open C# Project passes empty path here + { + return false; + } + + if (path == "" && SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) + { + // there is a bug in DllImplementation - use package implementation here instead https://github.cds.internal.unity3d.com/unity/com.unity.ide.rider/issues/21 + return OpenOSXApp(path, line, column); + } + + if (!IsUnityScript(path)) + { + var fastOpenResult = EditorPluginInterop.OpenFileDllImplementation(path, line, column); + if (fastOpenResult) + return true; + } + + if (SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX) + { + return OpenOSXApp(path, line, column); + } + + var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync. + solution = solution == "" ? "" : $"\"{solution}\""; + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = CodeEditor.CurrentEditorInstallation, + Arguments = $"{solution} -l {line} \"{path}\"", + UseShellExecute = true, + } + }; + + process.Start(); + + return true; + } + + private bool OpenOSXApp(string path, int line, int column) + { + var solution = GetSolutionFile(path); // TODO: If solution file doesn't exist resync. + solution = solution == "" ? "" : $"\"{solution}\""; + var pathArguments = path == "" ? "" : $"-l {line} \"{path}\""; + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "open", + Arguments = $"-n \"{CodeEditor.CurrentEditorInstallation}\" --args {solution} {pathArguments}", + CreateNoWindow = true, + UseShellExecute = true, + } + }; + + process.Start(); + + return true; + } + + private string GetSolutionFile(string path) + { + if (IsUnityScript(path)) + { + return Path.Combine(GetBaseUnityDeveloperFolder(), "Projects/CSharp/Unity.CSharpProjects.gen.sln"); + } + + var solutionFile = m_ProjectGeneration.SolutionFile(); + if (File.Exists(solutionFile)) + { + return solutionFile; + } + + return ""; + } + + static bool IsUnityScript(string path) + { + if (UnityEditor.Unsupported.IsDeveloperBuild()) + { + var baseFolder = GetBaseUnityDeveloperFolder().Replace("\\", "/"); + var lowerPath = path.ToLowerInvariant().Replace("\\", "/"); + + if (lowerPath.Contains((baseFolder + "/Runtime").ToLowerInvariant()) + || lowerPath.Contains((baseFolder + "/Editor").ToLowerInvariant())) + { + return true; + } + } + + return false; + } + + static string GetBaseUnityDeveloperFolder() + { + return Directory.GetParent(EditorApplication.applicationPath).Parent.Parent.FullName; + } + + public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation) + { + if (FileSystemUtil.EditorPathExists(editorPath) && IsRiderInstallation(editorPath)) + { + var info = new RiderPathLocator.RiderInfo(editorPath, false); + installation = new CodeEditor.Installation + { + Name = info.Presentation, + Path = info.Path + }; + return true; + } + + installation = default; + return false; + } + + public static bool IsRiderInstallation(string path) + { + if (IsAssetImportWorkerProcess()) + return false; + + if (string.IsNullOrEmpty(path)) + { + return false; + } + + var fileInfo = new FileInfo(path); + var filename = fileInfo.Name.ToLowerInvariant(); + return filename.StartsWith("rider", StringComparison.Ordinal); + } + + private static bool IsAssetImportWorkerProcess() + { +#if UNITY_2019_3_OR_NEWER + return UnityEditor.Experimental.AssetDatabaseExperimental.IsAssetImportWorkerProcess(); +#else + return false; +#endif + } + + public static string CurrentEditor // works fast, doesn't validate if executable really exists + => EditorPrefs.GetString("kScriptsDefaultApp"); + + public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback(); + + public void CreateSolutionIfDoesntExist() + { + if (!m_ProjectGeneration.HasSolutionBeenGenerated()) + { + m_ProjectGeneration.Sync(); + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta new file mode 100644 index 0000000..1676483 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4095d72f77fbb64ea39b8b3ca246622 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs new file mode 100644 index 0000000..f75ed0d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs @@ -0,0 +1,29 @@ +using System; +using UnityEditor; +using UnityEngine; + +namespace Packages.Rider.Editor +{ + public class RiderScriptEditorData : ScriptableSingleton + { + [SerializeField] internal bool HasChanges = true; // sln/csproj files were changed + [SerializeField] internal bool shouldLoadEditorPlugin; + [SerializeField] internal bool InitializedOnce; + [SerializeField] internal string currentEditorVersion; + + public void Init() + { + if (string.IsNullOrEmpty(currentEditorVersion)) + Invalidate(RiderScriptEditor.CurrentEditor); + } + + public void Invalidate(string editorInstallationPath) + { + currentEditorVersion = RiderPathLocator.GetBuildNumber(editorInstallationPath); + if (!Version.TryParse(currentEditorVersion, out var version)) + shouldLoadEditorPlugin = false; + + shouldLoadEditorPlugin = version >= new Version("191.7141.156"); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta new file mode 100644 index 0000000..21a5abc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/RiderScriptEditorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f079e3afd077fb94fa2bda74d6409499 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta new file mode 100644 index 0000000..f6e86c9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a52391bc44c477f40a547ed4ef3b9560 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs new file mode 100644 index 0000000..01573fa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using JetBrains.Annotations; +using UnityEditor; + +namespace Packages.Rider.Editor.UnitTesting +{ + public class CallbackData : ScriptableSingleton + { + public bool isRider; + + [UsedImplicitly] public static event EventHandler Changed = (sender, args) => { }; + + internal void RaiseChangedEvent() + { + Changed(null, EventArgs.Empty); + } + + public List events = new List(); + + [UsedImplicitly] + public void Clear() + { + events.Clear(); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta new file mode 100644 index 0000000..ce32722 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 010246a07de7cb34185a2a7b1c1fad59 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs new file mode 100644 index 0000000..10d528b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs @@ -0,0 +1,18 @@ +#if TEST_FRAMEWORK +using UnityEditor; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace Packages.Rider.Editor.UnitTesting +{ + [InitializeOnLoad] + internal static class CallbackInitializer + { + static CallbackInitializer() + { + if (CallbackData.instance.isRider) + ScriptableObject.CreateInstance().RegisterCallbacks(ScriptableObject.CreateInstance(), 0); + } + } +} +#endif \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta new file mode 100644 index 0000000..d47c38c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/CallbackInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aa1c6b1a353ab464782fc1e7c051eb02 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs new file mode 100644 index 0000000..e08c346 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs @@ -0,0 +1,47 @@ +using JetBrains.Annotations; +using UnityEngine; +#if TEST_FRAMEWORK +using UnityEditor; +using UnityEditor.TestTools.TestRunner.Api; +#endif + +namespace Packages.Rider.Editor.UnitTesting +{ + public static class RiderTestRunner + { +#if TEST_FRAMEWORK + private static readonly TestsCallback Callback = ScriptableObject.CreateInstance(); +#endif + [UsedImplicitly] + public static void RunTests(int testMode, string[] assemblyNames, string[] testNames, string[] categoryNames, string[] groupNames, int? buildTarget) + { +#if !TEST_FRAMEWORK + Debug.LogError("Update Test Framework package to v.1.1.1+ to run tests from Rider."); +#else + CallbackData.instance.isRider = true; + + var api = ScriptableObject.CreateInstance(); + var settings = new ExecutionSettings(); + var filter = new Filter + { + assemblyNames = assemblyNames, + testNames = testNames, + categoryNames = categoryNames, + groupNames = groupNames, + targetPlatform = (BuildTarget?) buildTarget + }; + + if (testMode > 0) // for future use - test-framework would allow running both Edit and Play test at once + filter.testMode = (TestMode) testMode; + + settings.filters = new []{ + filter + }; + api.Execute(settings); + + api.UnregisterCallbacks(Callback); // avoid multiple registrations + api.RegisterCallbacks(Callback); // This can be used to receive information about when the test suite and individual tests starts and stops. Provide this with a scriptable object implementing ICallbacks +#endif + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta new file mode 100644 index 0000000..6ef5313 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/RiderTestRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c3b27069cb3ddf42ba1260eeefcdd1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs new file mode 100644 index 0000000..ce2e1b7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs @@ -0,0 +1,31 @@ +using System; +using NUnit.Framework.Interfaces; + +namespace Packages.Rider.Editor.UnitTesting +{ + [Serializable] + public enum EventType { TestStarted, TestFinished, RunFinished } + + [Serializable] + public class TestEvent + { + public EventType type; + public string id; + public string assemblyName; + public string output; + public TestStatus testStatus; + public double duration; + public string parentId; + + public TestEvent(EventType type, string id, string assemblyName, string output, double duration, TestStatus testStatus, string parentID) + { + this.type = type; + this.id = id; + this.assemblyName = assemblyName; + this.output = output; + this.testStatus = testStatus; + this.duration = duration; + parentId = parentID; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta new file mode 100644 index 0000000..7ec7c71 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9413c47b3a14a64e8810ce76d1a6032 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs new file mode 100644 index 0000000..9995050 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs @@ -0,0 +1,83 @@ +#if TEST_FRAMEWORK +using System; +using System.Text; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace Packages.Rider.Editor.UnitTesting +{ + public class TestsCallback : ScriptableObject, ICallbacks + { + public void RunFinished(ITestResultAdaptor result) + { + CallbackData.instance.isRider = false; + + CallbackData.instance.events.Add( + new TestEvent(EventType.RunFinished, "", "","", 0, ParseTestStatus(result.TestStatus), "")); + CallbackData.instance.RaiseChangedEvent(); + } + + public void TestStarted(ITestAdaptor result) + { + if (result.Method == null) return; + + CallbackData.instance.events.Add( + new TestEvent(EventType.TestStarted, GetUniqueName(result), result.Method.TypeInfo.Assembly.GetName().Name, "", 0, ParseTestStatus(TestStatus.Passed), result.ParentFullName)); + CallbackData.instance.RaiseChangedEvent(); + } + + public void TestFinished(ITestResultAdaptor result) + { + if (result.Test.Method == null) return; + + CallbackData.instance.events.Add( + new TestEvent(EventType.TestFinished, GetUniqueName(result.Test), result.Test.Method.TypeInfo.Assembly.GetName().Name, ExtractOutput(result), result.Duration, ParseTestStatus(result.TestStatus), result.Test.ParentFullName)); + CallbackData.instance.RaiseChangedEvent(); + } + + // todo: reimplement JetBrains.Rider.Unity.Editor.AfterUnity56.UnitTesting.TestEventsSender.GetUniqueName + private static string GetUniqueName(ITestAdaptor test) + { + string str = test.FullName; + return str; + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + + private static NUnit.Framework.Interfaces.TestStatus ParseTestStatus(TestStatus testStatus) + { + return (NUnit.Framework.Interfaces.TestStatus)Enum.Parse(typeof(NUnit.Framework.Interfaces.TestStatus), testStatus.ToString()); + } + + private static string ExtractOutput(ITestResultAdaptor testResult) + { + var stringBuilder = new StringBuilder(); + if (testResult.Message != null) + { + stringBuilder.AppendLine("Message: "); + stringBuilder.AppendLine(testResult.Message); + } + + if (!string.IsNullOrEmpty(testResult.Output)) + { + stringBuilder.AppendLine("Output: "); + stringBuilder.AppendLine(testResult.Output); + } + + if (!string.IsNullOrEmpty(testResult.StackTrace)) + { + stringBuilder.AppendLine("Stacktrace: "); + stringBuilder.AppendLine(testResult.StackTrace); + } + + var result = stringBuilder.ToString(); + if (result.Length > 0) + return result; + + return testResult.Output ?? string.Empty; + } + } +} +#endif \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta new file mode 100644 index 0000000..068cba1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/UnitTesting/TestsCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58aa570dbe0761f43b25ff6c2265bbe2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta new file mode 100644 index 0000000..d7ba88e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e726086cd652f82087d59d67d2c24cd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs new file mode 100644 index 0000000..c41490a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs @@ -0,0 +1,36 @@ +using System.Collections.Generic; + +namespace Packages.Rider.Editor.Util +{ + public class CommandLineParser + { + public Dictionary Options = new Dictionary(); + + public CommandLineParser(string[] args) + { + var i = 0; + while (i < args.Length) + { + var arg = args[i]; + if (!arg.StartsWith("-")) + { + i++; + continue; + } + + string value = null; + if (i + 1 < args.Length && !args[i + 1].StartsWith("-")) + { + value = args[i + 1]; + i++; + } + + if (!(Options.ContainsKey(arg))) + { + Options.Add(arg, value); + } + i++; + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta new file mode 100644 index 0000000..536d707 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/CommandLineParser.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 154ace4bd16de9f4e84052ac257786d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs new file mode 100644 index 0000000..f558aca --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs @@ -0,0 +1,66 @@ +using System; +using System.ComponentModel; +using System.IO; +using System.Text; +using JetBrains.Annotations; +using UnityEngine; + +namespace Packages.Rider.Editor.Util +{ + public static class FileSystemUtil + { + [NotNull] + public static string GetFinalPathName([NotNull] string path) + { + if (path == null) throw new ArgumentNullException("path"); + + // up to MAX_PATH. MAX_PATH on Linux currently 4096, on Mac OS X 1024 + // doc: http://man7.org/linux/man-pages/man3/realpath.3.html + var sb = new StringBuilder(8192); + var result = LibcNativeInterop.realpath(path, sb); + if (result == IntPtr.Zero) + { + throw new Win32Exception($"{path} was not resolved."); + } + + return new FileInfo(sb.ToString()).FullName; + } + + public static string FileNameWithoutExtension(string path) + { + if (string.IsNullOrEmpty(path)) + { + return ""; + } + + var indexOfDot = -1; + var indexOfSlash = 0; + for (var i = path.Length - 1; i >= 0; i--) + { + if (indexOfDot == -1 && path[i] == '.') + { + indexOfDot = i; + } + + if (indexOfSlash == 0 && path[i] == '/' || path[i] == '\\') + { + indexOfSlash = i + 1; + break; + } + } + + if (indexOfDot == -1) + { + indexOfDot = path.Length; + } + + return path.Substring(indexOfSlash, indexOfDot - indexOfSlash); + } + + public static bool EditorPathExists(string editorPath) + { + return SystemInfo.operatingSystemFamily == OperatingSystemFamily.MacOSX && new DirectoryInfo(editorPath).Exists + || SystemInfo.operatingSystemFamily != OperatingSystemFamily.MacOSX && new FileInfo(editorPath).Exists; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta new file mode 100644 index 0000000..ebc001b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/FileSystemUtil.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bdbd564a9fdad0b738e76d030cad1204 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs new file mode 100644 index 0000000..a4070f2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs @@ -0,0 +1,12 @@ +using System; +using System.Runtime.InteropServices; +using System.Text; + +namespace Packages.Rider.Editor.Util +{ + internal static class LibcNativeInterop + { + [DllImport("libc", SetLastError = true)] + public static extern IntPtr realpath(string path, StringBuilder resolved_path); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta new file mode 100644 index 0000000..fe70ee0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/LibcNativeInterop.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 071c17858dc6c47ada7b2a1f1ded5402 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs new file mode 100644 index 0000000..63acff6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs @@ -0,0 +1,25 @@ +using JetBrains.Annotations; +using Packages.Rider.Editor; +using Unity.CodeEditor; + +// Is called via commandline from Rider Notification after checking out from source control. + +// ReSharper disable once CheckNamespace +namespace JetBrains.Rider.Unity.Editor +{ + public static class RiderMenu + { + [UsedImplicitly] + public static void MenuOpenProject() + { + if (RiderScriptEditor.IsRiderInstallation(RiderScriptEditor.CurrentEditor)) + { + // Force the project files to be sync + CodeEditor.CurrentEditor.SyncAll(); + + // Load Project + CodeEditor.CurrentEditor.OpenProject(); + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta new file mode 100644 index 0000000..b78dfae --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/RiderMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8860c53ca4073d4f92c403e709c12ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs new file mode 100644 index 0000000..03c9922 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs @@ -0,0 +1,20 @@ +using System; +using System.Linq; +using UnityEngine; + +namespace Packages.Rider.Editor.Util +{ + public static class UnityUtils + { + internal static readonly string UnityApplicationVersion = Application.unityVersion; + + public static Version UnityVersion + { + get + { + var ver = UnityApplicationVersion.Split(".".ToCharArray()).Take(2).Aggregate((a, b) => a + "." + b); + return new Version(ver); + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta new file mode 100644 index 0000000..9a4e6fe --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/Util/UnityUtils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ec9edad2de6c4df3a146b543a0fbc4c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef new file mode 100644 index 0000000..4caebc4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef @@ -0,0 +1,22 @@ +{ + "name": "Unity.Rider.Editor", + "references": [ + "GUID:0acc523941302664db1f4e527237feb3" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [ + { + "name": "com.unity.test-framework", + "expression": "1.1.1", + "define": "TEST_FRAMEWORK" + } + ] +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta new file mode 100644 index 0000000..7a89700 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/Rider/Editor/com.unity.ide.rider.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d528c8c98d269ca44a06cd9624a03945 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json new file mode 100644 index 0000000..eb7d7d5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json @@ -0,0 +1,19 @@ +{ + "name": "com.unity.ide.rider", + "displayName": "Rider Editor", + "description": "Code editor integration for supporting Rider as code editor for unity. Adds support for generating csproj files for code completion, auto discovery of installations, etc.", + "version": "1.1.4", + "unity": "2019.2", + "unityRelease": "0a12", + "dependencies": { + "com.unity.test-framework": "1.1.1" + }, + "relatedPackages": { + "com.unity.ide.rider.tests": "1.1.4" + }, + "repository": { + "type": "git", + "url": "git@github.cds.internal.unity3d.com:unity/com.unity.ide.rider.git", + "revision": "d2ef95989104a4ce866cdcb7f94cf3c67476fcc9" + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta new file mode 100644 index 0000000..11bcd7b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.rider@1.1.4/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 66c95bb3c74257f41bae2622511dc02d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md new file mode 100644 index 0000000..20f4072 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md @@ -0,0 +1,79 @@ +# Code Editor Package for Visual Studio Code + +## [1.2.3] - 2020-10-23 + +Remove workaround for VSCode omnisharp (as of https://github.com/OmniSharp/omnisharp-vscode/issues/4113 we no longer need to disable the referenceoutputassemblies). + + +## [1.2.2] - 2020-09-04 + +VSC-14 - synchronize solution file when adding new assembly + + +## [1.2.1] - 2020-05-15 + +Source filtering adds support for asmref + + +## [1.2.0] - 2020-03-04 + +Do not reference projects that has not been generated (case 1211057) +Only open files that exists (case 1188394) +Add individual toggle buttons for generating csprojects for packages +Add support for Roslyn analyzers in project generation through csc.rsp and compiled assembly references +Remove Release build target from csproj and sln + + +## [1.1.4] - 2020-01-02 + +Delta project generation, only recompute the csproj files whose script modified. + + +## [1.1.3] - 2019-10-22 + +Exe version of vscode will use Normal ProcessWindowStyle while cmd will use Hidden + + +## [1.1.2] - 2019-08-30 + +Fixing OSX open command arguments + + +## [1.1.1] - 2019-08-19 + +Support for Player Project. Generates specific csproj files containing files, reference, defines, +etc. that will show how the assembly will be compiled for a target platform. + + +## [1.1.0] - 2019-08-07 + +Adds support for choosing extensions to be opened with VSCode. This can be done through the GUI in Preferences. +Avoids opening all extensions after the change in core unity. + + +## [1.0.7] - 2019-05-15 + +Fix various OSX specific issues. +Generate project on load if they are not generated. +Fix path recognition. + + +## [1.0.6] - 2019-04-30 + +Ensure asset database is refreshed when generating csproj and solution files. + +## [1.0.5] - 2019-04-27 + +Add support for generating all csproj files. + +## [1.0.4] - 2019-04-18 + +Fix relative package paths. +Fix opening editor on mac. +Add %LOCALAPPDATA%/Programs to the path of install paths. + +## [1.0.3] - 2019-01-01 + +### This is the first release of *Unity Package vscode_editor*. + +Using the newly created api to integrate Visual Studio Code with Unity. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md.meta new file mode 100644 index 0000000..65aea0b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4ddcdc3816429494a8bea67e973875f7 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md new file mode 100644 index 0000000..576d096 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md @@ -0,0 +1,6 @@ +# Contributing + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Once you have a change ready following these ground rules. Simply make a pull request \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md.meta new file mode 100644 index 0000000..31e836f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: fcb9be00baf924c4183fc0313e6185c5 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Documentation~/README.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Documentation~/README.md new file mode 100644 index 0000000..d0a565f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Documentation~/README.md @@ -0,0 +1,4 @@ +# Code Editor Package for Visual Studio Code + +This package is not intended to be modified by users. +Nor does it provide any api intended to be included in user projects. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor.meta new file mode 100644 index 0000000..568fa03 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 58628227479c34542ac8c5193ccced84 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration.meta new file mode 100644 index 0000000..48ed36c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c779d3735d950f341ba35154e8b3234b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs new file mode 100644 index 0000000..c442d87 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs @@ -0,0 +1,124 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditor.PackageManager; + +namespace VSCodeEditor +{ + public interface IAssemblyNameProvider + { + string[] ProjectSupportedExtensions { get; } + ProjectGenerationFlag ProjectGenerationFlag { get; } + string GetAssemblyNameFromScriptPath(string path); + IEnumerable GetAssemblies(Func shouldFileBePartOfSolution); + IEnumerable GetAllAssetPaths(); + IEnumerable GetRoslynAnalyzerPaths(); + UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath); + ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories); + bool IsInternalizedPackagePath(string path); + void ToggleProjectGeneration(ProjectGenerationFlag preference); + } + + internal class AssemblyNameProvider : IAssemblyNameProvider + { + ProjectGenerationFlag m_ProjectGenerationFlag = (ProjectGenerationFlag)EditorPrefs.GetInt("unity_project_generation_flag", 0); + + public string[] ProjectSupportedExtensions => EditorSettings.projectGenerationUserExtensions; + + public ProjectGenerationFlag ProjectGenerationFlag + { + get => m_ProjectGenerationFlag; + private set + { + EditorPrefs.SetInt("unity_project_generation_flag", (int)value); + m_ProjectGenerationFlag = value; + } + } + + public string GetAssemblyNameFromScriptPath(string path) + { + return CompilationPipeline.GetAssemblyNameFromScriptPath(path); + } + + public IEnumerable GetAssemblies(Func shouldFileBePartOfSolution) + { + return CompilationPipeline.GetAssemblies() + .Where(i => 0 < i.sourceFiles.Length && i.sourceFiles.Any(shouldFileBePartOfSolution)); + } + + public IEnumerable GetAllAssetPaths() + { + return AssetDatabase.GetAllAssetPaths(); + } + + public UnityEditor.PackageManager.PackageInfo FindForAssetPath(string assetPath) + { + return UnityEditor.PackageManager.PackageInfo.FindForAssetPath(assetPath); + } + + public ResponseFileData ParseResponseFile(string responseFilePath, string projectDirectory, string[] systemReferenceDirectories) + { + return CompilationPipeline.ParseResponseFile( + responseFilePath, + projectDirectory, + systemReferenceDirectories + ); + } + + public bool IsInternalizedPackagePath(string path) + { + if (string.IsNullOrWhiteSpace(path)) + { + return false; + } + var packageInfo = FindForAssetPath(path); + if (packageInfo == null) + { + return false; + } + var packageSource = packageInfo.source; + switch (packageSource) + { + case PackageSource.Embedded: + return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Embedded); + case PackageSource.Registry: + return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Registry); + case PackageSource.BuiltIn: + return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.BuiltIn); + case PackageSource.Unknown: + return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Unknown); + case PackageSource.Local: + return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Local); + case PackageSource.Git: + return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.Git); +#if UNITY_2019_3_OR_NEWER + case PackageSource.LocalTarball: + return !ProjectGenerationFlag.HasFlag(ProjectGenerationFlag.LocalTarBall); +#endif + } + + return false; + } + + public void ToggleProjectGeneration(ProjectGenerationFlag preference) + { + if (ProjectGenerationFlag.HasFlag(preference)) + { + ProjectGenerationFlag ^= preference; + } + else + { + ProjectGenerationFlag |= preference; + } + } + + public IEnumerable GetRoslynAnalyzerPaths() + { + return PluginImporter.GetAllImporters() + .Where(i => !i.isNativePlugin && AssetDatabase.GetLabels(i).SingleOrDefault(l => l == "RoslynAnalyzer") != null) + .Select(i => i.assetPath); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta new file mode 100644 index 0000000..a8ae38b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/AssemblyNameProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d93ffb668978f7488211a331977b73b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs new file mode 100644 index 0000000..aeff22e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs @@ -0,0 +1,38 @@ +using System.IO; +using System.Text; + +namespace VSCodeEditor +{ + public interface IFileIO + { + bool Exists(string fileName); + + string ReadAllText(string fileName); + void WriteAllText(string fileName, string content); + + void CreateDirectory(string pathName); + } + + class FileIOProvider : IFileIO + { + public bool Exists(string fileName) + { + return File.Exists(fileName); + } + + public string ReadAllText(string fileName) + { + return File.ReadAllText(fileName); + } + + public void WriteAllText(string fileName, string content) + { + File.WriteAllText(fileName, content, Encoding.UTF8); + } + + public void CreateDirectory(string pathName) + { + Directory.CreateDirectory(pathName); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs.meta new file mode 100644 index 0000000..91d8212 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/FileIO.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb221cf55b3544646b0c3b6bc790080f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs new file mode 100644 index 0000000..0654966 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs @@ -0,0 +1,21 @@ +namespace VSCodeEditor +{ + public interface IGUIDGenerator + { + string ProjectGuid(string projectName, string assemblyName); + string SolutionGuid(string projectName, string extension); + } + + class GUIDProvider : IGUIDGenerator + { + public string ProjectGuid(string projectName, string assemblyName) + { + return SolutionGuidGenerator.GuidForProject(projectName + assemblyName); + } + + public string SolutionGuid(string projectName, string extension) + { + return SolutionGuidGenerator.GuidForSolution(projectName, extension); // GetExtensionOfSourceFiles(assembly.sourceFiles) + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs.meta new file mode 100644 index 0000000..9ce342e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/GUIDGenerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e58bd3cca6475e54b93632bb6837aeea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs new file mode 100644 index 0000000..4552728 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs @@ -0,0 +1,777 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Security; +using System.Security.Cryptography; +using System.Text; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; +using UnityEngine.Profiling; + +namespace VSCodeEditor +{ + public interface IGenerator + { + bool SyncIfNeeded(List affectedFiles, string[] reimportedFiles); + void Sync(); + string SolutionFile(); + string ProjectDirectory { get; } + IAssemblyNameProvider AssemblyNameProvider { get; } + void GenerateAll(bool generateAll); + bool SolutionExists(); + } + + public class ProjectGeneration : IGenerator + { + enum ScriptingLanguage + { + None, + CSharp + } + + public static readonly string MSBuildNamespaceUri = "http://schemas.microsoft.com/developer/msbuild/2003"; + + const string k_WindowsNewline = "\r\n"; + + const string k_SettingsJson = @"{ + ""files.exclude"": + { + ""**/.DS_Store"":true, + ""**/.git"":true, + ""**/.gitignore"":true, + ""**/.gitmodules"":true, + ""**/*.booproj"":true, + ""**/*.pidb"":true, + ""**/*.suo"":true, + ""**/*.user"":true, + ""**/*.userprefs"":true, + ""**/*.unityproj"":true, + ""**/*.dll"":true, + ""**/*.exe"":true, + ""**/*.pdf"":true, + ""**/*.mid"":true, + ""**/*.midi"":true, + ""**/*.wav"":true, + ""**/*.gif"":true, + ""**/*.ico"":true, + ""**/*.jpg"":true, + ""**/*.jpeg"":true, + ""**/*.png"":true, + ""**/*.psd"":true, + ""**/*.tga"":true, + ""**/*.tif"":true, + ""**/*.tiff"":true, + ""**/*.3ds"":true, + ""**/*.3DS"":true, + ""**/*.fbx"":true, + ""**/*.FBX"":true, + ""**/*.lxo"":true, + ""**/*.LXO"":true, + ""**/*.ma"":true, + ""**/*.MA"":true, + ""**/*.obj"":true, + ""**/*.OBJ"":true, + ""**/*.asset"":true, + ""**/*.cubemap"":true, + ""**/*.flare"":true, + ""**/*.mat"":true, + ""**/*.meta"":true, + ""**/*.prefab"":true, + ""**/*.unity"":true, + ""build/"":true, + ""Build/"":true, + ""Library/"":true, + ""library/"":true, + ""obj/"":true, + ""Obj/"":true, + ""ProjectSettings/"":true, + ""temp/"":true, + ""Temp/"":true + } +}"; + + /// + /// Map source extensions to ScriptingLanguages + /// + static readonly Dictionary k_BuiltinSupportedExtensions = new Dictionary + { + { "cs", ScriptingLanguage.CSharp }, + { "uxml", ScriptingLanguage.None }, + { "uss", ScriptingLanguage.None }, + { "shader", ScriptingLanguage.None }, + { "compute", ScriptingLanguage.None }, + { "cginc", ScriptingLanguage.None }, + { "hlsl", ScriptingLanguage.None }, + { "glslinc", ScriptingLanguage.None }, + { "template", ScriptingLanguage.None }, + { "raytrace", ScriptingLanguage.None } + }; + + string m_SolutionProjectEntryTemplate = string.Join("\r\n", @"Project(""{{{0}}}"") = ""{1}"", ""{2}"", ""{{{3}}}""", @"EndProject").Replace(" ", "\t"); + + string m_SolutionProjectConfigurationTemplate = string.Join("\r\n", @" {{{0}}}.Debug|Any CPU.ActiveCfg = Debug|Any CPU", @" {{{0}}}.Debug|Any CPU.Build.0 = Debug|Any CPU").Replace(" ", "\t"); + + static readonly string[] k_ReimportSyncExtensions = { ".dll", ".asmdef" }; + + string[] m_ProjectSupportedExtensions = new string[0]; + public string ProjectDirectory { get; } + IAssemblyNameProvider IGenerator.AssemblyNameProvider => m_AssemblyNameProvider; + + public void GenerateAll(bool generateAll) + { + m_AssemblyNameProvider.ToggleProjectGeneration( + ProjectGenerationFlag.BuiltIn + | ProjectGenerationFlag.Embedded + | ProjectGenerationFlag.Git + | ProjectGenerationFlag.Local +#if UNITY_2019_3_OR_NEWER + | ProjectGenerationFlag.LocalTarBall +#endif + | ProjectGenerationFlag.PlayerAssemblies + | ProjectGenerationFlag.Registry + | ProjectGenerationFlag.Unknown); + } + + readonly string m_ProjectName; + readonly IAssemblyNameProvider m_AssemblyNameProvider; + readonly IFileIO m_FileIOProvider; + readonly IGUIDGenerator m_GUIDProvider; + + const string k_ToolsVersion = "4.0"; + const string k_ProductVersion = "10.0.20506"; + const string k_BaseDirectory = "."; + const string k_TargetFrameworkVersion = "v4.7.1"; + const string k_TargetLanguageVersion = "latest"; + + public ProjectGeneration(string tempDirectory) + : this(tempDirectory, new AssemblyNameProvider(), new FileIOProvider(), new GUIDProvider()) { } + + public ProjectGeneration(string tempDirectory, IAssemblyNameProvider assemblyNameProvider, IFileIO fileIO, IGUIDGenerator guidGenerator) + { + ProjectDirectory = tempDirectory.Replace('\\', '/'); + m_ProjectName = Path.GetFileName(ProjectDirectory); + m_AssemblyNameProvider = assemblyNameProvider; + m_FileIOProvider = fileIO; + m_GUIDProvider = guidGenerator; + } + + /// + /// Syncs the scripting solution if any affected files are relevant. + /// + /// + /// Whether the solution was synced. + /// + /// + /// A set of files whose status has changed + /// + /// + /// A set of files that got reimported + /// + public bool SyncIfNeeded(List affectedFiles, string[] reimportedFiles) + { + Profiler.BeginSample("SolutionSynchronizerSync"); + SetupProjectSupportedExtensions(); + + // Don't sync if we haven't synced before + if (SolutionExists() && HasFilesBeenModified(affectedFiles, reimportedFiles)) + { + var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution); + var allProjectAssemblies = RelevantAssembliesForMode(assemblies).ToList(); + SyncSolution(allProjectAssemblies); + + var allAssetProjectParts = GenerateAllAssetProjectParts(); + + var affectedNames = affectedFiles.Select(asset => m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset)).Where(name => !string.IsNullOrWhiteSpace(name)).Select(name => name.Split(new [] {".dll"}, StringSplitOptions.RemoveEmptyEntries)[0]); + var reimportedNames = reimportedFiles.Select(asset => m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset)).Where(name => !string.IsNullOrWhiteSpace(name)).Select(name => name.Split(new [] {".dll"}, StringSplitOptions.RemoveEmptyEntries)[0]); + var affectedAndReimported = new HashSet(affectedNames.Concat(reimportedNames)); + var assemblyNames = new HashSet(allProjectAssemblies.Select(assembly => Path.GetFileName(assembly.outputPath))); + + foreach (var assembly in allProjectAssemblies) + { + if (!affectedAndReimported.Contains(assembly.name)) + continue; + + SyncProject(assembly, allAssetProjectParts, ParseResponseFileData(assembly), assemblyNames); + } + + Profiler.EndSample(); + return true; + } + + Profiler.EndSample(); + return false; + } + + bool HasFilesBeenModified(List affectedFiles, string[] reimportedFiles) + { + return affectedFiles.Any(ShouldFileBePartOfSolution) || reimportedFiles.Any(ShouldSyncOnReimportedAsset); + } + + static bool ShouldSyncOnReimportedAsset(string asset) + { + return k_ReimportSyncExtensions.Contains(new FileInfo(asset).Extension); + } + + public void Sync() + { + SetupProjectSupportedExtensions(); + GenerateAndWriteSolutionAndProjects(); + } + + public bool SolutionExists() + { + return m_FileIOProvider.Exists(SolutionFile()); + } + + void SetupProjectSupportedExtensions() + { + m_ProjectSupportedExtensions = m_AssemblyNameProvider.ProjectSupportedExtensions; + } + + bool ShouldFileBePartOfSolution(string file) + { + // Exclude files coming from packages except if they are internalized. + if (m_AssemblyNameProvider.IsInternalizedPackagePath(file)) + { + return false; + } + + return HasValidExtension(file); + } + + bool HasValidExtension(string file) + { + string extension = Path.GetExtension(file); + + // Dll's are not scripts but still need to be included.. + if (extension == ".dll") + return true; + + if (file.ToLower().EndsWith(".asmdef")) + return true; + + return IsSupportedExtension(extension); + } + + bool IsSupportedExtension(string extension) + { + extension = extension.TrimStart('.'); + if (k_BuiltinSupportedExtensions.ContainsKey(extension)) + return true; + if (m_ProjectSupportedExtensions.Contains(extension)) + return true; + return false; + } + + static ScriptingLanguage ScriptingLanguageFor(Assembly assembly) + { + return ScriptingLanguageFor(GetExtensionOfSourceFiles(assembly.sourceFiles)); + } + + static string GetExtensionOfSourceFiles(string[] files) + { + return files.Length > 0 ? GetExtensionOfSourceFile(files[0]) : "NA"; + } + + static string GetExtensionOfSourceFile(string file) + { + var ext = Path.GetExtension(file).ToLower(); + ext = ext.Substring(1); //strip dot + return ext; + } + + static ScriptingLanguage ScriptingLanguageFor(string extension) + { + return k_BuiltinSupportedExtensions.TryGetValue(extension.TrimStart('.'), out var result) + ? result + : ScriptingLanguage.None; + } + + public void GenerateAndWriteSolutionAndProjects() + { + // Only synchronize assemblies that have associated source files and ones that we actually want in the project. + // This also filters out DLLs coming from .asmdef files in packages. + var assemblies = m_AssemblyNameProvider.GetAssemblies(ShouldFileBePartOfSolution); + + var allAssetProjectParts = GenerateAllAssetProjectParts(); + + SyncSolution(assemblies); + var allProjectAssemblies = RelevantAssembliesForMode(assemblies).ToList(); + var assemblyNames = new HashSet(allProjectAssemblies.Select(assembly => Path.GetFileName(assembly.outputPath))); + foreach (Assembly assembly in allProjectAssemblies) + { + var responseFileData = ParseResponseFileData(assembly); + SyncProject(assembly, allAssetProjectParts, responseFileData, assemblyNames); + } + + WriteVSCodeSettingsFiles(); + } + + List ParseResponseFileData(Assembly assembly) + { + var systemReferenceDirectories = CompilationPipeline.GetSystemAssemblyDirectories(assembly.compilerOptions.ApiCompatibilityLevel); + + Dictionary responseFilesData = assembly.compilerOptions.ResponseFiles.ToDictionary(x => x, x => m_AssemblyNameProvider.ParseResponseFile( + x, + ProjectDirectory, + systemReferenceDirectories + )); + + Dictionary responseFilesWithErrors = responseFilesData.Where(x => x.Value.Errors.Any()) + .ToDictionary(x => x.Key, x => x.Value); + + if (responseFilesWithErrors.Any()) + { + foreach (var error in responseFilesWithErrors) + foreach (var valueError in error.Value.Errors) + { + Debug.LogError($"{error.Key} Parse Error : {valueError}"); + } + } + + return responseFilesData.Select(x => x.Value).ToList(); + } + + Dictionary GenerateAllAssetProjectParts() + { + Dictionary stringBuilders = new Dictionary(); + + foreach (string asset in m_AssemblyNameProvider.GetAllAssetPaths()) + { + // Exclude files coming from packages except if they are internalized. + // TODO: We need assets from the assembly API + if (m_AssemblyNameProvider.IsInternalizedPackagePath(asset)) + { + continue; + } + + string extension = Path.GetExtension(asset); + if (IsSupportedExtension(extension) && ScriptingLanguage.None == ScriptingLanguageFor(extension)) + { + // Find assembly the asset belongs to by adding script extension and using compilation pipeline. + var assemblyName = m_AssemblyNameProvider.GetAssemblyNameFromScriptPath(asset); + + if (string.IsNullOrEmpty(assemblyName)) + { + continue; + } + + assemblyName = Path.GetFileNameWithoutExtension(assemblyName); + + if (!stringBuilders.TryGetValue(assemblyName, out var projectBuilder)) + { + projectBuilder = new StringBuilder(); + stringBuilders[assemblyName] = projectBuilder; + } + + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + } + + var result = new Dictionary(); + + foreach (var entry in stringBuilders) + result[entry.Key] = entry.Value.ToString(); + + return result; + } + + void SyncProject( + Assembly assembly, + Dictionary allAssetsProjectParts, + List responseFilesData, + HashSet assemblyNames) + { + SyncProjectFileIfNotChanged(ProjectFile(assembly), ProjectText(assembly, allAssetsProjectParts, responseFilesData, assemblyNames, GetAllRoslynAnalyzerPaths().ToArray())); + } + + private IEnumerable GetAllRoslynAnalyzerPaths() + { + return m_AssemblyNameProvider.GetRoslynAnalyzerPaths(); + } + + void SyncProjectFileIfNotChanged(string path, string newContents) + { + SyncFileIfNotChanged(path, newContents); + } + + void SyncSolutionFileIfNotChanged(string path, string newContents) + { + SyncFileIfNotChanged(path, newContents); + } + + void SyncFileIfNotChanged(string filename, string newContents) + { + if (m_FileIOProvider.Exists(filename)) + { + var currentContents = m_FileIOProvider.ReadAllText(filename); + + if (currentContents == newContents) + { + return; + } + } + + m_FileIOProvider.WriteAllText(filename, newContents); + } + + string ProjectText( + Assembly assembly, + Dictionary allAssetsProjectParts, + List responseFilesData, + HashSet assemblyNames, + string[] roslynAnalyzerDllPaths) + { + var projectBuilder = new StringBuilder(); + ProjectHeader(assembly, responseFilesData, roslynAnalyzerDllPaths, projectBuilder); + var references = new List(); + + foreach (string file in assembly.sourceFiles) + { + if (!HasValidExtension(file)) + continue; + + var extension = Path.GetExtension(file).ToLower(); + var fullFile = EscapedRelativePathFor(file); + if (".dll" != extension) + { + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + else + { + references.Add(fullFile); + } + } + + // Append additional non-script files that should be included in project generation. + if (allAssetsProjectParts.TryGetValue(assembly.name, out var additionalAssetsForProject)) + projectBuilder.Append(additionalAssetsForProject); + + var responseRefs = responseFilesData.SelectMany(x => x.FullPathReferences.Select(r => r)); + var internalAssemblyReferences = assembly.assemblyReferences + .Where(i => !i.sourceFiles.Any(ShouldFileBePartOfSolution)).Select(i => i.outputPath); + var allReferences = + assembly.compiledAssemblyReferences + .Union(responseRefs) + .Union(references) + .Union(internalAssemblyReferences) + .Except(roslynAnalyzerDllPaths); + + foreach (var reference in allReferences) + { + string fullReference = Path.IsPathRooted(reference) ? reference : Path.Combine(ProjectDirectory, reference); + AppendReference(fullReference, projectBuilder); + } + + if (0 < assembly.assemblyReferences.Length) + { + projectBuilder.Append(" ").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(k_WindowsNewline); + foreach (Assembly reference in assembly.assemblyReferences.Where(i => i.sourceFiles.Any(ShouldFileBePartOfSolution))) + { + var referencedProject = reference.outputPath; + + projectBuilder.Append(" ").Append(k_WindowsNewline); + projectBuilder.Append(" {").Append(ProjectGuid(reference.name)).Append("}").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(reference.name).Append("").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + } + + projectBuilder.Append(ProjectFooter()); + return projectBuilder.ToString(); + } + + static void AppendReference(string fullReference, StringBuilder projectBuilder) + { + //replace \ with / and \\ with / + var escapedFullPath = SecurityElement.Escape(fullReference); + escapedFullPath = escapedFullPath.Replace("\\\\", "/"); + escapedFullPath = escapedFullPath.Replace("\\", "/"); + projectBuilder.Append(" ").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(escapedFullPath).Append("").Append(k_WindowsNewline); + projectBuilder.Append(" ").Append(k_WindowsNewline); + } + + public string ProjectFile(Assembly assembly) + { + var fileBuilder = new StringBuilder(assembly.name); + fileBuilder.Append(".csproj"); + return Path.Combine(ProjectDirectory, fileBuilder.ToString()); + } + + public string SolutionFile() + { + return Path.Combine(ProjectDirectory, $"{m_ProjectName}.sln"); + } + + void ProjectHeader( + Assembly assembly, + List responseFilesData, + string[] roslynAnalyzerDllPaths, + StringBuilder builder + ) + { + var otherArguments = GetOtherArgumentsFromResponseFilesData(responseFilesData); + GetProjectHeaderTemplate( + builder, + ProjectGuid(assembly.name), + assembly.name, + string.Join(";", new[] { "DEBUG", "TRACE" }.Concat(assembly.defines).Concat(responseFilesData.SelectMany(x => x.Defines)).Concat(EditorUserBuildSettings.activeScriptCompilationDefines).Distinct().ToArray()), + assembly.compilerOptions.AllowUnsafeCode | responseFilesData.Any(x => x.Unsafe), + GenerateAnalyserItemGroup(otherArguments["analyzer"].Concat(otherArguments["a"]) + .SelectMany(x => x.Split(';')) + .Concat(roslynAnalyzerDllPaths) + .Distinct() + .ToArray())); + } + + private static ILookup GetOtherArgumentsFromResponseFilesData(List responseFilesData) + { + var paths = responseFilesData.SelectMany(x => + { + return x.OtherArguments.Where(a => a.StartsWith("/") || a.StartsWith("-")) + .Select(b => + { + var index = b.IndexOf(":", StringComparison.Ordinal); + if (index > 0 && b.Length > index) + { + var key = b.Substring(1, index - 1); + return new KeyValuePair(key, b.Substring(index + 1)); + } + + const string warnaserror = "warnaserror"; + if (b.Substring(1).StartsWith(warnaserror)) + { + return new KeyValuePair(warnaserror, b.Substring(warnaserror.Length + 1)); + } + + return default; + }); + }) + .Distinct() + .ToLookup(o => o.Key, pair => pair.Value); + return paths; + } + + private static string GenerateAnalyserItemGroup(string[] paths) + { + // + // + // + // + if (!paths.Any()) + return string.Empty; + + var analyserBuilder = new StringBuilder(); + analyserBuilder.Append(" ").Append(k_WindowsNewline); + foreach (var path in paths) + { + analyserBuilder.Append($" ").Append(k_WindowsNewline); + } + analyserBuilder.Append(" ").Append(k_WindowsNewline); + return analyserBuilder.ToString(); + } + + static string GetSolutionText() + { + return string.Join("\r\n", @"", @"Microsoft Visual Studio Solution File, Format Version {0}", @"# Visual Studio {1}", @"{2}", @"Global", @" GlobalSection(SolutionConfigurationPlatforms) = preSolution", @" Debug|Any CPU = Debug|Any CPU", @" EndGlobalSection", @" GlobalSection(ProjectConfigurationPlatforms) = postSolution", @"{3}", @" EndGlobalSection", @" GlobalSection(SolutionProperties) = preSolution", @" HideSolutionNode = FALSE", @" EndGlobalSection", @"EndGlobal", @"").Replace(" ", "\t"); + } + + static string GetProjectFooterTemplate() + { + return string.Join("\r\n", @" ", @" ", @" ", @"", @""); + } + + static void GetProjectHeaderTemplate( + StringBuilder builder, + string assemblyGUID, + string assemblyName, + string defines, + bool allowUnsafe, + string analyzerBlock + ) + { + builder.Append(@"").Append(k_WindowsNewline); + builder.Append(@"").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_TargetLanguageVersion).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" Debug").Append(k_WindowsNewline); + builder.Append(@" AnyCPU").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_ProductVersion).Append("").Append(k_WindowsNewline); + builder.Append(@" 2.0").Append(k_WindowsNewline); + builder.Append(@" ").Append(EditorSettings.projectGenerationRootNamespace).Append("").Append(k_WindowsNewline); + builder.Append(@" {").Append(assemblyGUID).Append("}").Append(k_WindowsNewline); + builder.Append(@" Library").Append(k_WindowsNewline); + builder.Append(@" Properties").Append(k_WindowsNewline); + builder.Append(@" ").Append(assemblyName).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_TargetFrameworkVersion).Append("").Append(k_WindowsNewline); + builder.Append(@" 512").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_BaseDirectory).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" true").Append(k_WindowsNewline); + builder.Append(@" full").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" Temp\bin\Debug\").Append(k_WindowsNewline); + builder.Append(@" ").Append(defines).Append("").Append(k_WindowsNewline); + builder.Append(@" prompt").Append(k_WindowsNewline); + builder.Append(@" 4").Append(k_WindowsNewline); + builder.Append(@" 0169").Append(k_WindowsNewline); + builder.Append(@" ").Append(allowUnsafe).Append("").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(@" true").Append(k_WindowsNewline); + builder.Append(@" true").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" false").Append(k_WindowsNewline); + builder.Append(@" ").Append(k_WindowsNewline); + builder.Append(analyzerBlock); + builder.Append(@" ").Append(k_WindowsNewline); + } + + void SyncSolution(IEnumerable assemblies) + { + SyncSolutionFileIfNotChanged(SolutionFile(), SolutionText(assemblies)); + } + + string SolutionText(IEnumerable assemblies) + { + var fileversion = "11.00"; + var vsversion = "2010"; + + var relevantAssemblies = RelevantAssembliesForMode(assemblies); + string projectEntries = GetProjectEntries(relevantAssemblies); + string projectConfigurations = string.Join(k_WindowsNewline, relevantAssemblies.Select(i => GetProjectActiveConfigurations(ProjectGuid(i.name))).ToArray()); + return string.Format(GetSolutionText(), fileversion, vsversion, projectEntries, projectConfigurations); + } + + static IEnumerable RelevantAssembliesForMode(IEnumerable assemblies) + { + return assemblies.Where(i => ScriptingLanguage.CSharp == ScriptingLanguageFor(i)); + } + + /// + /// Get a Project("{guid}") = "MyProject", "MyProject.csproj", "{projectguid}" + /// entry for each relevant language + /// + string GetProjectEntries(IEnumerable assemblies) + { + var projectEntries = assemblies.Select(i => string.Format( + m_SolutionProjectEntryTemplate, + SolutionGuid(i), + i.name, + Path.GetFileName(ProjectFile(i)), + ProjectGuid(i.name) + )); + + return string.Join(k_WindowsNewline, projectEntries.ToArray()); + } + + /// + /// Generate the active configuration string for a given project guid + /// + string GetProjectActiveConfigurations(string projectGuid) + { + return string.Format( + m_SolutionProjectConfigurationTemplate, + projectGuid); + } + + string EscapedRelativePathFor(string file) + { + var projectDir = ProjectDirectory.Replace('/', '\\'); + file = file.Replace('/', '\\'); + var path = SkipPathPrefix(file, projectDir); + + var packageInfo = m_AssemblyNameProvider.FindForAssetPath(path.Replace('\\', '/')); + if (packageInfo != null) + { + // We have to normalize the path, because the PackageManagerRemapper assumes + // dir seperators will be os specific. + var absolutePath = Path.GetFullPath(NormalizePath(path)).Replace('/', '\\'); + path = SkipPathPrefix(absolutePath, projectDir); + } + + return SecurityElement.Escape(path); + } + + static string SkipPathPrefix(string path, string prefix) + { + if (path.StartsWith($@"{prefix}\")) + return path.Substring(prefix.Length + 1); + return path; + } + + static string NormalizePath(string path) + { + if (Path.DirectorySeparatorChar == '\\') + return path.Replace('/', Path.DirectorySeparatorChar); + return path.Replace('\\', Path.DirectorySeparatorChar); + } + + string ProjectGuid(string assembly) + { + return m_GUIDProvider.ProjectGuid(m_ProjectName, assembly); + } + + string SolutionGuid(Assembly assembly) + { + return m_GUIDProvider.SolutionGuid(m_ProjectName, GetExtensionOfSourceFiles(assembly.sourceFiles)); + } + + static string ProjectFooter() + { + return GetProjectFooterTemplate(); + } + + static string GetProjectExtension() + { + return ".csproj"; + } + + void WriteVSCodeSettingsFiles() + { + var vsCodeDirectory = Path.Combine(ProjectDirectory, ".vscode"); + + if (!m_FileIOProvider.Exists(vsCodeDirectory)) + m_FileIOProvider.CreateDirectory(vsCodeDirectory); + + var vsCodeSettingsJson = Path.Combine(vsCodeDirectory, "settings.json"); + + if (!m_FileIOProvider.Exists(vsCodeSettingsJson)) + m_FileIOProvider.WriteAllText(vsCodeSettingsJson, k_SettingsJson); + } + } + + public static class SolutionGuidGenerator + { + static MD5 mD5 = MD5CryptoServiceProvider.Create(); + + public static string GuidForProject(string projectName) + { + return ComputeGuidHashFor(projectName + "salt"); + } + + public static string GuidForSolution(string projectName, string sourceFileExtension) + { + if (sourceFileExtension.ToLower() == "cs") + + // GUID for a C# class library: http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs + return "FAE04EC0-301F-11D3-BF4B-00C04F79EFBC"; + + return ComputeGuidHashFor(projectName); + } + + static string ComputeGuidHashFor(string input) + { + var hash = mD5.ComputeHash(Encoding.Default.GetBytes(input)); + return new Guid(hash).ToString(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs.meta new file mode 100644 index 0000000..5039705 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGeneration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97d6c87381e3e51488b49f5891490b70 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs new file mode 100644 index 0000000..e51dd43 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs @@ -0,0 +1,18 @@ +using System; + +namespace VSCodeEditor +{ + [Flags] + public enum ProjectGenerationFlag + { + None = 0, + Embedded = 1, + Local = 2, + Registry = 4, + Git = 8, + BuiltIn = 16, + Unknown = 32, + PlayerAssemblies = 64, + LocalTarBall = 128, + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta new file mode 100644 index 0000000..35bf027 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/ProjectGeneration/ProjectGenerationFlag.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f239f506223a98f4e9b5dd3a9f80edea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef new file mode 100644 index 0000000..032da7c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef @@ -0,0 +1,9 @@ +{ + "name": "Unity.VSCode.Editor", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef.meta new file mode 100644 index 0000000..4c94f56 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/Unity.com.unity.vscode.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8b845b123ab418448a8be2935fa804e0 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs new file mode 100644 index 0000000..609d2cd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs @@ -0,0 +1,137 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using Unity.CodeEditor; + +namespace VSCodeEditor +{ + public interface IDiscovery + { + CodeEditor.Installation[] PathCallback(); + } + + public class VSCodeDiscovery : IDiscovery + { + List m_Installations; + + public CodeEditor.Installation[] PathCallback() + { + if (m_Installations == null) + { + m_Installations = new List(); + FindInstallationPaths(); + } + + return m_Installations.ToArray(); + } + + void FindInstallationPaths() + { + string[] possiblePaths = +#if UNITY_EDITOR_OSX + { + "/Applications/Visual Studio Code.app", + "/Applications/Visual Studio Code - Insiders.app" + }; +#elif UNITY_EDITOR_WIN + { + GetProgramFiles() + @"/Microsoft VS Code/bin/code.cmd", + GetProgramFiles() + @"/Microsoft VS Code/Code.exe", + GetProgramFiles() + @"/Microsoft VS Code Insiders/bin/code-insiders.cmd", + GetProgramFiles() + @"/Microsoft VS Code Insiders/Code.exe", + GetLocalAppData() + @"/Programs/Microsoft VS Code/bin/code.cmd", + GetLocalAppData() + @"/Programs/Microsoft VS Code/Code.exe", + GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/bin/code-insiders.cmd", + GetLocalAppData() + @"/Programs/Microsoft VS Code Insiders/Code.exe", + }; +#else + { + "/usr/bin/code", + "/bin/code", + "/usr/local/bin/code", + "/var/lib/flatpak/exports/bin/com.visualstudio.code", + "/snap/current/bin/code" + }; +#endif + var existingPaths = possiblePaths.Where(VSCodeExists).ToList(); + if (!existingPaths.Any()) + { + return; + } + + var lcp = GetLongestCommonPrefix(existingPaths); + switch (existingPaths.Count) + { + case 1: + { + var path = existingPaths.First(); + m_Installations = new List + { + new CodeEditor.Installation + { + Path = path, + Name = path.Contains("Insiders") + ? "Visual Studio Code Insiders" + : "Visual Studio Code" + } + }; + break; + } + case 2 when existingPaths.Any(path => !(path.Substring(lcp.Length).Contains("/") || path.Substring(lcp.Length).Contains("\\"))): + { + goto case 1; + } + default: + { + m_Installations = existingPaths.Select(path => new CodeEditor.Installation + { + Name = $"Visual Studio Code Insiders ({path.Substring(lcp.Length)})", + Path = path + }).ToList(); + + break; + } + } + } + +#if UNITY_EDITOR_WIN + static string GetProgramFiles() + { + return Environment.GetEnvironmentVariable("ProgramFiles")?.Replace("\\", "/"); + } + + static string GetLocalAppData() + { + return Environment.GetEnvironmentVariable("LOCALAPPDATA")?.Replace("\\", "/"); + } +#endif + + static string GetLongestCommonPrefix(List paths) + { + var baseLength = paths.First().Length; + for (var pathIndex = 1; pathIndex < paths.Count; pathIndex++) + { + baseLength = Math.Min(baseLength, paths[pathIndex].Length); + for (var i = 0; i < baseLength; i++) + { + if (paths[pathIndex][i] == paths[0][i]) continue; + + baseLength = i; + break; + } + } + + return paths[0].Substring(0, baseLength); + } + + static bool VSCodeExists(string path) + { +#if UNITY_EDITOR_OSX + return System.IO.Directory.Exists(path); +#else + return new FileInfo(path).Exists; +#endif + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs.meta new file mode 100644 index 0000000..cbeca1b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeDiscovery.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 380f7372e785c7d408552e2c760d269d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs new file mode 100644 index 0000000..7efc69f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs @@ -0,0 +1,280 @@ +using System; +using System.IO; +using System.Linq; +using System.Diagnostics; +using UnityEditor; +using UnityEngine; +using Unity.CodeEditor; + +namespace VSCodeEditor +{ + [InitializeOnLoad] + public class VSCodeScriptEditor : IExternalCodeEditor + { + const string vscode_argument = "vscode_arguments"; + const string vscode_extension = "vscode_userExtensions"; + static readonly GUIContent k_ResetArguments = EditorGUIUtility.TrTextContent("Reset argument"); + string m_Arguments; + + IDiscovery m_Discoverability; + IGenerator m_ProjectGeneration; + + static readonly string[] k_SupportedFileNames = { "code.exe", "visualstudiocode.app", "visualstudiocode-insiders.app", "vscode.app", "code.app", "code.cmd", "code-insiders.cmd", "code", "com.visualstudio.code" }; + + static bool IsOSX => Application.platform == RuntimePlatform.OSXEditor; + + static string DefaultApp => EditorPrefs.GetString("kScriptsDefaultApp"); + + static string DefaultArgument { get; } = "\"$(ProjectPath)\" -g \"$(File)\":$(Line):$(Column)"; + + string Arguments + { + get => m_Arguments ?? (m_Arguments = EditorPrefs.GetString(vscode_argument, DefaultArgument)); + set + { + m_Arguments = value; + EditorPrefs.SetString(vscode_argument, value); + } + } + + static string[] defaultExtensions + { + get + { + var customExtensions = new[] { "json", "asmdef", "log" }; + return EditorSettings.projectGenerationBuiltinExtensions + .Concat(EditorSettings.projectGenerationUserExtensions) + .Concat(customExtensions) + .Distinct().ToArray(); + } + } + + static string[] HandledExtensions + { + get + { + return HandledExtensionsString + .Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries) + .Select(s => s.TrimStart('.', '*')) + .ToArray(); + } + } + + static string HandledExtensionsString + { + get => EditorPrefs.GetString(vscode_extension, string.Join(";", defaultExtensions)); + set => EditorPrefs.SetString(vscode_extension, value); + } + + public bool TryGetInstallationForPath(string editorPath, out CodeEditor.Installation installation) + { + var lowerCasePath = editorPath.ToLower(); + var filename = Path.GetFileName(lowerCasePath).Replace(" ", ""); + var installations = Installations; + if (!k_SupportedFileNames.Contains(filename)) + { + installation = default; + return false; + } + + if (!installations.Any()) + { + installation = new CodeEditor.Installation + { + Name = "Visual Studio Code", + Path = editorPath + }; + } + else + { + try + { + installation = installations.First(inst => inst.Path == editorPath); + } + catch (InvalidOperationException) + { + installation = new CodeEditor.Installation + { + Name = "Visual Studio Code", + Path = editorPath + }; + } + } + + return true; + } + + public void OnGUI() + { + Arguments = EditorGUILayout.TextField("External Script Editor Args", Arguments); + if (GUILayout.Button(k_ResetArguments, GUILayout.Width(120))) + { + Arguments = DefaultArgument; + } + + EditorGUILayout.LabelField("Generate .csproj files for:"); + EditorGUI.indentLevel++; + SettingsButton(ProjectGenerationFlag.Embedded, "Embedded packages", ""); + SettingsButton(ProjectGenerationFlag.Local, "Local packages", ""); + SettingsButton(ProjectGenerationFlag.Registry, "Registry packages", ""); + SettingsButton(ProjectGenerationFlag.Git, "Git packages", ""); + SettingsButton(ProjectGenerationFlag.BuiltIn, "Built-in packages", ""); +#if UNITY_2019_3_OR_NEWER + SettingsButton(ProjectGenerationFlag.LocalTarBall, "Local tarball", ""); +#endif + SettingsButton(ProjectGenerationFlag.Unknown, "Packages from unknown sources", ""); + RegenerateProjectFiles(); + EditorGUI.indentLevel--; + + HandledExtensionsString = EditorGUILayout.TextField(new GUIContent("Extensions handled: "), HandledExtensionsString); + } + + void RegenerateProjectFiles() + { + var rect = EditorGUI.IndentedRect(EditorGUILayout.GetControlRect(new GUILayoutOption[] { })); + rect.width = 252; + if (GUI.Button(rect, "Regenerate project files")) + { + m_ProjectGeneration.Sync(); + } + } + + void SettingsButton(ProjectGenerationFlag preference, string guiMessage, string toolTip) + { + var prevValue = m_ProjectGeneration.AssemblyNameProvider.ProjectGenerationFlag.HasFlag(preference); + var newValue = EditorGUILayout.Toggle(new GUIContent(guiMessage, toolTip), prevValue); + if (newValue != prevValue) + { + m_ProjectGeneration.AssemblyNameProvider.ToggleProjectGeneration(preference); + } + } + + public void CreateIfDoesntExist() + { + if (!m_ProjectGeneration.SolutionExists()) + { + m_ProjectGeneration.Sync(); + } + } + + public void SyncIfNeeded(string[] addedFiles, string[] deletedFiles, string[] movedFiles, string[] movedFromFiles, string[] importedFiles) + { + m_ProjectGeneration.SyncIfNeeded(addedFiles.Union(deletedFiles).Union(movedFiles).Union(movedFromFiles).ToList(), importedFiles); + } + + public void SyncAll() + { + AssetDatabase.Refresh(); + m_ProjectGeneration.Sync(); + } + + public bool OpenProject(string path, int line, int column) + { + if (path != "" && (!SupportsExtension(path) || !File.Exists(path))) // Assets - Open C# Project passes empty path here + { + return false; + } + + if (line == -1) + line = 1; + if (column == -1) + column = 0; + + string arguments; + if (Arguments != DefaultArgument) + { + arguments = m_ProjectGeneration.ProjectDirectory != path + ? CodeEditor.ParseArgument(Arguments, path, line, column) + : m_ProjectGeneration.ProjectDirectory; + } + else + { + arguments = $@"""{m_ProjectGeneration.ProjectDirectory}"""; + if (m_ProjectGeneration.ProjectDirectory != path && path.Length != 0) + { + arguments += $@" -g ""{path}"":{line}:{column}"; + } + } + + if (IsOSX) + { + return OpenOSX(arguments); + } + + var app = DefaultApp; + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = app, + Arguments = arguments, + WindowStyle = app.EndsWith(".cmd", StringComparison.OrdinalIgnoreCase) ? ProcessWindowStyle.Hidden : ProcessWindowStyle.Normal, + CreateNoWindow = true, + UseShellExecute = true, + } + }; + + process.Start(); + return true; + } + + static bool OpenOSX(string arguments) + { + var process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = "open", + Arguments = $"-n \"{DefaultApp}\" --args {arguments}", + UseShellExecute = true, + } + }; + + process.Start(); + return true; + } + + static bool SupportsExtension(string path) + { + var extension = Path.GetExtension(path); + if (string.IsNullOrEmpty(extension)) + return false; + return HandledExtensions.Contains(extension.TrimStart('.')); + } + + public CodeEditor.Installation[] Installations => m_Discoverability.PathCallback(); + + public VSCodeScriptEditor(IDiscovery discovery, IGenerator projectGeneration) + { + m_Discoverability = discovery; + m_ProjectGeneration = projectGeneration; + } + + static VSCodeScriptEditor() + { + var editor = new VSCodeScriptEditor(new VSCodeDiscovery(), new ProjectGeneration(Directory.GetParent(Application.dataPath).FullName)); + CodeEditor.Register(editor); + + if (IsVSCodeInstallation(CodeEditor.CurrentEditorInstallation)) + { + editor.CreateIfDoesntExist(); + } + } + + static bool IsVSCodeInstallation(string path) + { + if (string.IsNullOrEmpty(path)) + { + return false; + } + + var lowerCasePath = path.ToLower(); + var filename = Path + .GetFileName(lowerCasePath.Replace('\\', Path.DirectorySeparatorChar).Replace('/', Path.DirectorySeparatorChar)) + .Replace(" ", ""); + return k_SupportedFileNames.Contains(filename); + } + + public void Initialize(string editorInstallationPath) { } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs.meta new file mode 100644 index 0000000..a0aa5a4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/Editor/VSCodeScriptEditor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac3f13489022aa34d861a0320a6917b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md new file mode 100644 index 0000000..eb18dfb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 Unity Technologies + +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/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md.meta new file mode 100644 index 0000000..20c91bd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c9aabac5924106d4790d7b3a924ca34d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json new file mode 100644 index 0000000..6f6f1c1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json @@ -0,0 +1,19 @@ +{ + "name": "com.unity.ide.vscode", + "displayName": "Visual Studio Code Editor", + "description": "Code editor integration for supporting Visual Studio Code as code editor for unity. Adds support for generating csproj files for intellisense purposes, auto discovery of installations, etc.", + "version": "1.2.3", + "unity": "2019.2", + "unityRelease": "0a12", + "relatedPackages": { + "com.unity.ide.vscode.tests": "1.2.3" + }, + "upmCi": { + "footprint": "ab99793db10bad3c377fc6971b0b21989002c495" + }, + "repository": { + "url": "https://github.cds.internal.unity3d.com/unity/com.unity.ide.vscode.git", + "type": "git", + "revision": "547f63839bdc87e0aed2c9e0d84f8f6336a83ea3" + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json.meta new file mode 100644 index 0000000..e559711 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.ide.vscode@1.2.3/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ffc6271f08270b64ca0aae9c49235d81 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CHANGELOG.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CHANGELOG.md new file mode 100644 index 0000000..5c84109 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CHANGELOG.md @@ -0,0 +1,171 @@ +# Changelog +## [1.1.20] - 2020-12-04 +- The logscope is now available in OneTimeTearDown. +- Fixed an issue where failing tests would not result in the correct exit code if a domain reload happens after the test has run (DS-1304). +- If a player build fails, the test specific build settings should be cleaned up and the original values restored as intended (DS-1001). +- Added better error message when using TestRunCallbackAttribute and the implementation is stripped away (DS-454). +- Fixed an issue where the test results xml would have a zero end-time for tests executed before a domain reload (DSTR-63). +- Fixed OpenSource in case of a Test in a nested class (DSTR-6) +- UnityTests with a domain reload now works correctly in combination with Retry and Repeat attributes (DS-428). +- Fixed OpenSource in case of Tests located inside a package (DS-432) +- Update `com.unity.ext.nunit` version to 1.0.6 + +## [1.1.19] - 2020-11-17 +- Command line runs with an inconclusive test result now exit with exit code 2 (case DS-951). +- Fixed timeout during UnitySetUp which caoused test to pass instead of failing due to wrong time format. +- Timeout exeption thrown when timeout time is exeded in the UnitySetup when using `WaitForSeconds(n)`. +- Updating `com.unity.ext.nunit` version +- Method marked with UnityTest that are not returning IEnumerator is now giving a proper error (DS-1059). + +## [1.1.18] - 2020-10-07 +- Fixed issue of timeout during UnitySetUp which wasn't detected and allowed the test to pass instead of failing (case DSTR-21) + +## [1.1.17] - 2020-10-05 +- Fixed an issue where the WaitForDomainReload yield instruction would sometimes let the test continue for one frame before the domain reload. +- Added support for negation in filters using !. E.g. !CategoryToExclude. +- Fixed an issue where if the first test enters PlayMode from UnitySetup then the test body will not run on consecutive runs (case 1260901). +- Clear Results button clears the test results in the GUI (DSTR-16) +- Improved UI in Test Runner window, added new options: + - Run Selected Tests in player + - Build/Export project with all tests in player + - Build/Export project with selected tests in player +- Fixed issue on loading EditMode or Playmode test tree in the wrong tab when switching between tabs when TestRunner is loading (DS-865) + +## [1.1.16] - 2020-07-09 +- Follow up on fix when UTF picks up on outdated compilation errors + +## [1.1.15] - 2020-07-02 +- Fixed an issue where an exception is thrown on getting the enumerator of a UnityTest would result in stopping the test run instead of failing it (case 1212000). +- Including a trailing semi-colon in a testName filter no longer results in all tests being run (case 1171200). +- Fixed and issue when Unity Test Framework exits editor on an outdated script compilation error (during api updates) + +## [1.1.14] - 2020-04-03 +- Added the 'assemblyNames' command line argument for filtering on the assembly level. +- The dll and project level of the tree view should now correctly show the results when running tests in a player (case 1197026). +- Optimize usage of player connection when transfering test results (case 1229200). +- Ignore internal test framework tests assertions (case 1206961). + +## [1.1.13] - 2020-03-16 +- Fixed an issue where a combination of Entering / Exiting playmode and recompiling scripts would result in the test run repeating (case 1213958). +- Fixed a regression from 1.1.12 where prefabs left in the scene would be cleaned up to aggressively. +- Fixed Test execution timed out. No activity received from the player in 600 seconds error when player is not supposed to start (case 1225147) + +## [1.1.12] - 2020-03-02 +- Now 'Open error line' for a failed UTF test does not throw exceptions for corrupted testable pdb in Editor release mode (case 1118259) +- Fixed an issue where running a test fixture would also run other fixtures with the same full name (namespace plus classname) in other assemblies (case 1197385). +- Running tests with the same full name, with a domain reload inbetween, will no longer fail to initialize the fixture of the second class (case 1205240). +- Running a playmode tests with "Maximize on Play" will now correctly show the result of the tests in the test runner window (case 1014908). +- Fixed an issue where leaving a game object in a scene with a DontSaveInEditor hideFlags would result in an error on cleanup (case 1136883). +- Now ITestPlayerBuildModifier.ModifyOptions is called as expected when running tests on a device (case 1213845) + +## [1.1.11] - 2020-01-16 +- Fixed test runner dlls got included into player build (case 1211624) +- Passing a non-full-path of XML file for -testResults in Unity Batchmode issue resolved, now passing "result.xml" creates the result file in the project file directory (case 959078) +- Respect Script Debugging build setting when running tests + +## [1.1.10] - 2019-12-19 +- Introduced PostSuccessfulLaunchAction callback +- Fixed an issue where canceling a UnityTest while it was running would incorrectly mark it as passed instead of canceled. +- Added command line argument for running tests synchronously. +- The test search bar now handles null values correctly. +- The test output pane now retains its size on domain reloads. + +## [1.1.9] - 2019-12-12 +- Rolled back refactoring to the test run system, as it caused issues in some corner cases. + +## [1.1.8] - 2019-11-15 +- Ensured that a resumed test run is continued instantly. + +## [1.1.7] - 2019-11-14 +- Fixed an issue with test runs after domain reload. + +## [1.1.6] - 2019-11-12 +- Building a player for test will no longer look in unrelated assemblies for relevant attributes. + +## [1.1.5] - 2019-10-23 +- Fixed a regression to synchronous runs introduced in 1.1.4. + +## [1.1.4] - 2019-10-15 +- Running tests in batch mode now correctly returns error code 3 (RunError) when a timeout or a build error occurs. +- Fixed an issue where a test run in a player would time out, if the player takes longer than 10 minutes to run. +- Added command line argument and api setting for specifying custom heartbeat timeout for running on players. + +## [1.1.3] - 2019-09-23 +- Fixed a regression where tests in a player would report a timeout after a test run is finished. +- Made it possible for the ui to change its test items when the test tree changes without script compilation. +- Added synchronous runs as an option to the TestRunnerApi. + +## [1.1.2] - 2019-09-11 +- Fixed an issue where Run Selected would run all tests in the category, if a category filter was selected, regardless of what tests were selected. +- Unsupported attributes used in UnityTests now give an explicit error. +- Added support for the Repeat and Retry attributes in UnityTests (case 1131940). +- Tests with a explicit timeout higher than 10 minutes, no longer times out after running longer than 10 minutes when running from command line (case 1125991). +- Fixed a performance regression in the test runner api result reporting, introduced in 2018.3 (case 1109865). +- Fixed an issue where parameterized test fixtures would not run if selected in the test tree (case 1092244). +- Pressing Clear Results now also correctly clears the counters on the test list (case 1181763). +- Prebuild setup now handles errors logged with Debug.LogError and stops the run if any is logged (case 1115240). It now also supports LogAssert.Expect. + +## [1.1.1] - 2019-08-07 +- Tests retrieved as a test list with the test runner api incorrectly showed both mode as their TestMode. +- Fixed a compatibility issue with running tests from rider. + +## [1.1.0] - 2019-07-30 +- Introduced the TestRunnerApi for running tests programmatically from elsewhere inside the Editor. +- Introduced yield instructions for recompiling scripts and awaiting a domain reload in Edit Mode tests. +- Added a button to the Test Runner UI for clearing the results. + +## [1.0.18] - 2019-07-15 +- Included new full documentation of the test framework. + +## [1.0.17] - 2019-07-11 +- Fixed an issue where the Test Runner window wouldn’t frame selected items after search filter is cleared. +- Fixed a regression where playmode test application on the IOS platform would not quit after the tests are done. + +## [1.0.16] - 2019-06-20 +- Fixed an issue where the Test Runner window popped out if it was docked, or if something else was docked next to it, when re-opened (case 1158961) +- Fixed a regression where the running standalone playmode tests from the ui would result in an error. + +## [1.0.15] - 2019-06-18 +- Added new `[TestMustExpectAllLogs]` attribute, which automatically does `LogAssert.NoUnexpectedReceived()` at the end of affected tests. See docs for this attribute for more info on usage. +- Fixed a regression where no tests would be run if multiple filters are specified. E.g. selecting both a whole assembly and an individual test in the ui. +- Fixed an issue where performing `Run Selected` on a selected assembly would run all assemblies. +- Introduced the capability to do a split build and run, when running playmode tests on standalone devices. +- Fixed an error in ConditionalIgnore, if the condition were not set. + +## [1.0.14] - 2019-05-27 +- Fixed issue preventing scene creation in IPrebuildSetup.Setup callback when running standalone playmode tests. +- Fixed an issue where test assemblies would sometimes not be ordered alphabetically. +- Added module references to the package for the required modules: imgui and jsonserialize. +- Added a ConditionalIgnore attribute to help ignoring tests only under specific conditions. +- Fixed a typo in the player test window (case 1148671). + +## [1.0.13] - 2019-05-07 +- Fixed a regression where results from the player would no longer update correctly in the UI (case 1151147). + +## [1.0.12] - 2019-04-16 +- Added specific unity release to the package information. + +## [1.0.11] - 2019-04-10 +- Fixed a regression from 1.0.10 where test-started events were triggered multiple times after a domain reload. + +## [1.0.10] - 2019-04-08 +- Fixed an issue where test-started events would not be fired correctly after a test performing a domain reload (case 1141530). +- The UI should correctly run tests inside a nested class, when that class is selected. +- All actions should now correctly display a prefix when reporting test result. E.g. "TearDown :". +- Errors logged with Debug.LogError in TearDowns now append the error, rather than overwriting the existing result (case 1114306). +- Incorrect implementations of IWrapTestMethod and IWrapSetUpTearDown now gives a meaningful error. +- Fixed a regression where the Test Framework would run TearDown in a base class before the inheriting class (case 1142553). +- Fixed a regression introduced in 1.0.9 where tests with the Explicit attribute could no longer be executed. + +## [1.0.9] - 2019-03-27 +- Fixed an issue where a corrupt instance of the test runner window would block for a new being opened. +- Added the required modules to the list of package requirements. +- Fixed an issue where errors would happen if the test filter ui was clicked before the ui is done loading. +- Fix selecting items with duplicate names in test hierarchy of Test Runner window (case 987587). +- Fixed RecompileScripts instruction which we use in tests (case 1128994). +- Fixed an issue where using multiple filters on tests would sometimes give an incorrect result. + +## [1.0.7] - 2019-03-12 +### This is the first release of *Unity Package com.unity.test-framework*. + +- Migrated the test-framework from the current extension in unity. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CHANGELOG.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CHANGELOG.md.meta new file mode 100644 index 0000000..4fca79e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d691174143fd3774ba63d7c493633b99 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CONTRIBUTING.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CONTRIBUTING.md new file mode 100644 index 0000000..9f299b1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CONTRIBUTING.md @@ -0,0 +1,9 @@ +# Contributing + +## If you are interested in contributing, here are some ground rules: +* ... Define guidelines & rules for what contributors need to know to successfully make Pull requests against your repo ... + +## All contributions are subject to the [Unity Contribution Agreement(UCA)](https://unity3d.com/legal/licenses/Unity_Contribution_Agreement) +By making a pull request, you are confirming agreement to the terms and conditions of the UCA, including that your Contributions are your original creation and that you have complete right and authority to make your Contributions. + +## Once you have a change ready following these ground rules. Simply make a pull request diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CONTRIBUTING.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CONTRIBUTING.md.meta new file mode 100644 index 0000000..39e850a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/CONTRIBUTING.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 57d2ac5c7d5786e499d4794973fe0d4e +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/TableOfContents.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/TableOfContents.md new file mode 100644 index 0000000..3155c1f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/TableOfContents.md @@ -0,0 +1,66 @@ +* [Unity Test Framework overview](./index.md) +* [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md) +* [Getting started with UTF](./getting-started.md) + * [How to create a new test assembly](./workflow-create-test-assembly.md) + * [How to create a test](./workflow-create-test.md) + * [How to run a test](./workflow-run-test.md) + * [How to create a Play Mode test](./workflow-create-playmode-test.md) + * [How to run a Play Mode test as standalone](./workflow-run-playmode-test-standalone.md) +* [Resources](./resources.md) +* [Extending UTF](./extending.md) + * [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run-for-player-mode-tests) + * [How to run tests programmatically](./extension-run-tests.md) + * [How to get test results](./extension-get-test-results.md) + * [How to retrieve the list of tests](./extension-retrieve-test-list.md) +* [Reference](./manual.md#reference) + * [Running tests from the command-line](./reference-command-line.md) + * [UnityTest attribute](./reference-attribute-unitytest.md) + * [Setup and cleanup at build time](./reference-setup-and-cleanup.md) + * [IPrebuildSetup](./reference-setup-and-cleanup.md#iprebuildsetup) + * [IPostBuildCleanup](./reference-setup-and-cleanup.md#ipostbuildcleanup) + * [Actions outside of tests](./reference-actions-outside-tests.md) + * [Action execution order](./reference-actions-outside-tests.md#action-execution-order) + * [UnitySetUp and UnityTearDown](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [OuterUnityTestAction](./reference-actions-outside-tests.md#outerunitytestaction) + * [Domain Reloads](./reference-actions-outside-tests.md#domain-reloads) + * [Custom attributes](./reference-custom-attributes.md) + * [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md) + * [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md) + * [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md) + * [TestRunCallback attribute](./reference-attribute-testruncallback.md) + * [UnityPlatform attribute](./reference-attribute-unityplatform.md) + * [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTest attribute](./reference-attribute-unitytest.md) + * [Custom equality comparers](./reference-custom-equality-comparers.md) + * [ColorEqualityComparer](./reference-comparer-color.md) + * [FloatEqualityComparer](./reference-comparer-float.md) + * [QuaternionEqualityComparer](./reference-comparer-quaternion.md) + * [Vector2EqualityComparer](./reference-comparer-vector2.md) + * [Vector3EqualityComparer](./reference-comparer-vector3.md) + * [Vector4EqualityComparer](./reference-comparer-vector4.md) + * [Custom equality comparers with equals operator](./reference-comparer-equals.md) + * [Test Utils](./reference-test-utils.md) + * [Custom yield instructions](./reference-custom-yield-instructions.md) + * [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md#IEditModeTestYieldInstruction) + * [EnterPlayMode](./reference-custom-yield-instructions.md#enterplaymode) + * [ExitPlayMode](./reference-custom-yield-instructions.md#exitplaymode) + * [RecompileScripts](./reference-recompile-scripts.md) + * [WaitForDomainReload](./reference-wait-for-domain-reload.md) + * [Custom assertion](./reference-custom-assertion.md) + * [LogAssert](./reference-custom-assertion.md#logassert) + * [Custom constraints](./reference-custom-constraints.md) + * [Is](./reference-custom-constraints.md#is) + * [Parameterized tests](./reference-tests-parameterized.md) + * [MonoBehaviour tests](./reference-tests-monobehaviour.md) + * [MonoBehaviourTest<T>](./reference-tests-monobehaviour.md#monobehaviourtestt) + * [IMonoBehaviourTest](./reference-tests-monobehaviour.md#imonobehaviourtest) + * [TestRunnerApi](./reference-test-runner-api.md) + * [ExecutionSettings](./reference-execution-settings.md) + * [Filter](./reference-filter.md) + * [ITestRunSettings](./reference-itest-run-settings.md) + * [ICallbacks](./reference-icallbacks.md) + * [IErrorCallbacks](./reference-ierror-callbacks.md) + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/edit-mode-vs-play-mode-tests.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/edit-mode-vs-play-mode-tests.md new file mode 100644 index 0000000..5459639 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/edit-mode-vs-play-mode-tests.md @@ -0,0 +1,53 @@ +# Edit Mode vs. Play Mode tests + +Let’s clarify a bit what Play Mode and Edit Mode test means from the Unity Test Framework perspective: + +## Edit Mode tests + +**Edit Mode** tests (also known as Editor tests) are only run in the Unity Editor and have access to the Editor code in addition to the game code. + +With Edit Mode tests it is possible to test any of your [Editor extensions](https://docs.unity3d.com/Manual/ExtendingTheEditor.html) using the [UnityTest](./reference-attribute-unitytest.md) attribute. For Edit Mode tests, your test code runs in the [EditorApplication.update](https://docs.unity3d.com/ScriptReference/EditorApplication-update.html) callback loop. + +> **Note**: You can also control entering and exiting Play Mode from your Edit Mode test. This allow your test to make changes before entering Play Mode. + +Edit Mode tests should meet one of the following conditions: + +* They should have an [assembly definition](./workflow-create-test-assembly.md) with reference to *nunit.framework.dll* and has only the Editor as a target platform: + +```assembly + "includePlatforms": [ + "Editor" + ], +``` + +* Legacy condition: put tests in the project’s [Editor](https://docs.unity3d.com/Manual/SpecialFolders.html) folder. + +## Play Mode tests + +You can run **Play Mode** tests as a [standalone in a Player](./workflow-run-playmode-test-standalone.md) or inside the Editor. Play Mode tests allow you to exercise your game code, as the tests run as [coroutines](https://docs.unity3d.com/ScriptReference/Coroutine.html) if marked with the `UnityTest` attribute. + +Play Mode tests should correspond to the following conditions: + +* Have an [assembly definition](./workflow-create-test-assembly.md) with reference to *nunit.framework.dll*. +* Have the test scripts located in a folder with the .asmdef file. +* The test assembly should reference an assembly within the code that you need to test. + +```assembly + "references": [ + "NewAssembly" + ], + "optionalUnityReferences": [ + "TestAssemblies" + ], + "includePlatforms": [], +``` + +## Recommendations + +### Attributes + +Use the [NUnit](http://www.nunit.org/) `Test` attribute instead of the `UnityTest` attribute, unless you need to [yield special instructions](./reference-custom-yield-instructions.md), in Edit Mode, or if you need to skip a frame or wait for a certain amount of time in Play Mode. + +### References + +It is possible for your Test Assemblies to reference the test tools in `UnityEngine.TestRunner` and `UnityEditor.TestRunner`. The latter is only available in Edit Mode. You can specify these references in the `Assembly Definition References` on the Assembly Definition. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extending.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extending.md new file mode 100644 index 0000000..045c94a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extending.md @@ -0,0 +1,10 @@ +# Extending Unity Test Framework +It is possible to extend the Unity Test Framework (UTF) in many ways, for custom workflows for your projects and for other packages to build on top of UTF. + +These extensions are a supplement to the ones already offered by [NUnit](https://github.com/nunit/docs/wiki/Framework-Extensibility). + +Some workflows for extending UTF include: +* [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run-for-player-mode-tests) +* [How to run tests programmatically](./extension-run-tests.md) +* [How to get test results](./extension-get-test-results.md) +* [How to retrieve the list of tests](./extension-retrieve-test-list.md)  \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-get-test-results.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-get-test-results.md new file mode 100644 index 0000000..8b71d7e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-get-test-results.md @@ -0,0 +1,45 @@ +# How to get test results +You can receive callbacks when the active test run, or individual tests, starts and finishes. You can register callbacks by invoking `RegisterCallbacks` on the [TestRunnerApi](./reference-test-runner-api.md) with an instance of a class that implements [ICallbacks](./reference-icallbacks.md). There are four `ICallbacks` methods for the start and finish of both the whole run and each level of the test tree. + +## Example +An example of how listeners can be set up: + +> **Note**: Listeners receive callbacks from all test runs, regardless of the registered `TestRunnerApi` for that instance. + +``` C# +public void SetupListeners() +{ + var api = ScriptableObject.CreateInstance(); + api.RegisterCallbacks(new MyCallbacks()); +} + +private class MyCallbacks : ICallbacks +{ + public void RunStarted(ITestAdaptor testsToRun) + { + + } + + public void RunFinished(ITestResultAdaptor result) + { + + } + + public void TestStarted(ITestAdaptor test) + { + + } + + public void TestFinished(ITestResultAdaptor result) + { + if (!result.HasChildren && result.ResultState != "Success") + { + Debug.Log(string.Format("Test {0} {1}", result.Test.Name, result.ResultState)); + } + } +} +``` + +> **Note**: The registered callbacks are not persisted on domain reloads. So it is necessary to re-register the callback after a domain reloads, usually with [InitializeOnLoad](https://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html). + +It is possible to provide a `priority` as an integer as the second argument when registering a callback. This influences the invocation order of different callbacks. The default value is zero. It is also possible to provide `RegisterCallbacks` with a class instance that implements [IErrorCallbacks](./reference-ierror-callbacks.md) that is an extended version of `ICallbacks`. `IErrorCallbacks` also has a callback method for `OnError` that invokes if the run fails to start, for example, due to compilation errors or if an [IPrebuildSetup](./reference-setup-and-cleanup.md) throws an exception. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-retrieve-test-list.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-retrieve-test-list.md new file mode 100644 index 0000000..dedc7fa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-retrieve-test-list.md @@ -0,0 +1,13 @@ +# How to retrieve the list of tests +It is possible to use the [TestRunnerApi](./reference-test-runner-api.md) to retrieve the test tree for a given test mode (**Edit Mode** or **Play Mode**). You can retrieve the test tree by invoking `RetrieveTestList` with the desired `TestMode` and a callback action, with an [ITestAdaptor](./reference-itest-adaptor.md) representing the test tree. + +## Example +The following example retrieves the test tree for Edit Mode tests and prints the number of total test cases: +``` C# +var api = ScriptableObject.CreateInstance(); +api.RetrieveTestList(TestMode.EditMode, (testRoot) => +{ + Debug.Log(string.Format("Tree contains {0} tests.", testRoot.TestCaseCount)); +}); +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-run-tests.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-run-tests.md new file mode 100644 index 0000000..60ff3dc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/extension-run-tests.md @@ -0,0 +1,72 @@ +# How to run tests programmatically +## Filters + +Run tests by calling `Execute` on the [TestRunnerApi](./reference-test-runner-api.md), and provide some execution settings that consists of a [Filter](./reference-filter.md). The `Filter` specifies what tests to run. + +### Example + +The following is an example of how to run all **Play Mode** tests in a project: + +``` C# +var testRunnerApi = ScriptableObject.CreateInstance(); +var filter = new Filter() +{ + testMode = TestMode.PlayMode +}; +testRunnerApi.Execute(new ExecutionSettings(filter)); +``` +## Multiple filter values + +It is possible to specify a more specific filter by filling out the fields on the `Filter` class in more detail. + +Many of the fields allow for multiple values. The runner tries to match tests against at least one of the values provided and then runs any tests that match. + +### Example + +In this example, the API runs tests with full names that fit either of the two names provided: + +``` C# +var api = ScriptableObject.CreateInstance(); +api.Execute(new ExecutionSettings(new Filter() +{ + testNames = new[] {"MyTestClass.NameOfMyTest", "SpecificTestFixture.NameOfAnotherTest"} +})); +``` +## Multiple filter fields + +If using multiple different fields on the filter, then it matches against tests that fulfill all the different fields. + +### Example + +In this example, it runs any test that fits either of the two test names, and that also belongs to a test assembly that fits the given name. + +``` C# +var api = ScriptableObject.CreateInstance(); +api.Execute(new ExecutionSettings(new Filter() +{ + assemblyNames = new [] {"MyTestAssembly"}, + testNames = new [] {"MyTestClass.NameOfMyTest", "MyTestClass.AnotherNameOfATest"} +})); +``` +## Multiple constructor filters + +The execution settings take one or more filters in its constructor. If there is no filter provided, then it runs all **Edit Mode** tests by default. If there are multiple filters provided, then a test runs if it matches any of the filters. + +### Example + +In this example, it runs any tests that are either in the assembly named `MyTestAssembly` or if the full name of the test matches either of the two provided test names: + +``` C# +var api = ScriptableObject.CreateInstance(); +api.Execute(new ExecutionSettings( + new Filter() + { + assemblyNames = new[] {"MyTestAssembly"}, + }, + new Filter() + { + testNames = new[] {"MyTestClass.NameOfMyTest", "MyTestClass.AnotherNameOfATest"} + } +)); +``` +> **Note**: Specifying different test modes or platforms in each `Filter` is not currently supported. The test mode and platform is from the first `Filter` only and defaults to Edit Mode, if not supplied. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/getting-started.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/getting-started.md new file mode 100644 index 0000000..a8051f2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/getting-started.md @@ -0,0 +1,18 @@ +# Getting started with Unity Test Framework + +To access the Unity Test Framework (UTF) in the Unity Editor, open the **Test Runner** window; go to **Window** > **General** > **Test Runner**. + +![Unity Test Runner window](./images/test-runner-window.png) + +To get started with UTF, follow the workflows below: + +* [How to create a new test assembly](./workflow-create-test-assembly.md) +* [How to create a test](./workflow-create-test.md) +* [How to run a test](./workflow-run-test.md) +* [How to create a Play Mode test](./workflow-create-playmode-test.md) +* [How to run a Play Mode test as standalone](./workflow-run-playmode-test-standalone.md) + + + +For further information, see the [resources](./resources.md) and [reference](./manual.md#reference) sections. + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-create-test-script.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-create-test-script.png new file mode 100644 index 0000000..fc9af55 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-create-test-script.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-run-test.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-run-test.png new file mode 100644 index 0000000..df1b53c Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-run-test.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-run-tests.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-run-tests.png new file mode 100644 index 0000000..c890d81 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-run-tests.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-tab.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-tab.png new file mode 100644 index 0000000..e1b00d7 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/editmode-tab.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/import-settings.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/import-settings.png new file mode 100644 index 0000000..6a34e92 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/import-settings.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/new-test-script.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/new-test-script.png new file mode 100644 index 0000000..21de081 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/new-test-script.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-enable-all.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-enable-all.png new file mode 100644 index 0000000..961991a Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-enable-all.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-results-standalone.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-results-standalone.png new file mode 100644 index 0000000..de40c03 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-results-standalone.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-run-standalone.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-run-standalone.png new file mode 100644 index 0000000..ded5792 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-run-standalone.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-tab.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-tab.png new file mode 100644 index 0000000..9d315cb Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/playmode-tab.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/test-runner-window.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/test-runner-window.png new file mode 100644 index 0000000..f3023fb Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/test-runner-window.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/test-templates.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/test-templates.png new file mode 100644 index 0000000..753a155 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/test-templates.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/tests-folder-assembly.png b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/tests-folder-assembly.png new file mode 100644 index 0000000..4e63751 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/images/tests-folder-assembly.png differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/index.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/index.md new file mode 100644 index 0000000..604a916 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/index.md @@ -0,0 +1,54 @@ +# About Unity Test Framework + +The Unity Test Framework (UTF) enables Unity users to test their code in both **Edit Mode** and **Play Mode**, and also on target platforms such as [Standalone](https://docs.unity3d.com/Manual/Standalone.html), Android, iOS, etc. + +This package provides a standard test framework for users of Unity and developers at Unity so that both benefit from the same features and can write tests the same way. + +UTF uses a Unity integration of NUnit library, which is an open-source unit testing library for .Net languages. For more information about NUnit, see the [official NUnit website](http://www.nunit.org/) and the [NUnit documentation on GitHub](https://github.com/nunit/docs/wiki/NUnit-Documentation). + +> **Note**: UTF is not a new concept or toolset; it is an adjusted and more descriptive naming for the toolset otherwise known as Unity Test Runner, which is now available as this package. + +# Installing Unity Test Framework + +To install this package, follow the instructions in the [Package Manager documentation](https://docs.unity3d.com/Packages/com.unity.package-manager-ui@latest/index.html). + +> **Note**: Search for the Test Framework package. In Unity 2019.2 and higher, you may need to enable the package before use. + +# Using Unity Test Framework + +To learn how to use the Unity Test Framework package in your project, read the [manual](./manual.md). + +# Technical details + +## Requirements + +This version of the Unity Test Framework is compatible with the following versions of the Unity Editor: + +* 2019.2 and later. + +## Known limitations + +Unity Test Framework version 1.0.18 includes the following known limitations: + +* The `UnityTest` attribute does not support WebGL and WSA platforms. +* The `UnityTest` attribute does not support [Parameterized tests](https://github.com/nunit/docs/wiki/Parameterized-Tests) (except for `ValueSource`). +* The `UnityTest` attribute does not support the `NUnit` [Repeat](https://github.com/nunit/docs/wiki/Repeat-Attribute) attribute. +* Nested test fixture cannot run from the Editor UI. +* When using the `NUnit` [Retry](https://github.com/nunit/docs/wiki/Retry-Attribute) attribute in PlayMode tests, it throws `InvalidCastException`. + +## Package contents + +The following table indicates the root folders in the package where you can find useful resources: + +| Location | Description | +| :----------------------------------------- | :------------------------------------------ | +| _/com.unity.test-framework/Documentation~_ | Contains the documentation for the package. | + +## Document revision history + +| Date | Reason | +| :----------- | :---------------------------------------------------- | +| August 23, 2019 | Applied feedback to the documentation | +| July 25, 2019 | Documentation updated to include features in version 1.1.0 | +| July 11, 2019 | Documentation updated. Matches package version 1.0.18 | +| May 27, 2019 | Documentation created. Matches package version 1.0.14 | diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/manual.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/manual.md new file mode 100644 index 0000000..e50f7ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/manual.md @@ -0,0 +1,80 @@ +# Unity Test Framework manual + +This is the manual for the Unity Test Framework (UTF): + +## **Introduction** + +* [Unity Test Framework overview](./index.md) +* [Edit Mode vs. Play Mode tests](edit-mode-vs-play-mode-tests.md) + +## **Getting started** + +* [Getting started with UTF](./getting-started.md) + * Workflows: + * [How to create a new test assembly](./workflow-create-test-assembly.md) + * [How to create a test](./workflow-create-test.md) + * [How to run a test](workflow-run-test.md) + * [How to create a Play Mode test](./workflow-create-playmode-test.md) + * [How to run a Play Mode test in player](./workflow-run-playmode-test-standalone.md) +* [Resources](./resources.md) + +## Extending UTF + +* [Extending UTF](./extending.md) + * Workflows: + * [How to split the build and run process for standalone Play Mode tests](./reference-attribute-testplayerbuildmodifier.md#split-build-and-run) + * [How to run tests programmatically](./extension-run-tests.md) + * [How to get test results](./extension-get-test-results.md) + * [How to retrieve the list of tests](./extension-retrieve-test-list.md) + +## Reference + +* [Running tests from the command-line](./reference-command-line.md) +* [UnityTest attribute](./reference-attribute-unitytest.md) +* [Setup and cleanup at build time](./reference-setup-and-cleanup.md) + * [IPrebuildSetup](./reference-setup-and-cleanup.md#iprebuildsetup) + * [IPostBuildCleanup](./reference-setup-and-cleanup.md#ipostbuildcleanup) +* [Actions outside of tests](./reference-actions-outside-tests.md) + * [Action execution order](./reference-actions-outside-tests.md#action-execution-order) + * [UnitySetUp and UnityTearDown](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [OuterUnityTestAction](./reference-actions-outside-tests.md#outerunitytestaction) + * [Domain Reloads](./reference-actions-outside-tests.md#domain-reloads) +* [Custom attributes](./reference-custom-attributes.md) + * [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md) + * [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) + * [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md) + * [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md) + * [TestRunCallback attribute](./reference-attribute-testruncallback.md) + * [UnityPlatform attribute](./reference-attribute-unityplatform.md) + * [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) + * [UnityTest attribute](./reference-attribute-unitytest.md) +* [Custom equality comparers](./reference-custom-equality-comparers.md) + * [ColorEqualityComparer](./reference-comparer-color.md) + * [FloatEqualityComparer](./reference-comparer-float.md) + * [QuaternionEqualityComparer](./reference-comparer-quaternion.md) + * [Vector2EqualityComparer](./reference-comparer-vector2.md) + * [Vector3EqualityComparer](./reference-comparer-vector3.md) + * [Vector4EqualityComparer](./reference-comparer-vector4.md) + * [Custom equality comparers with equals operator](./reference-comparer-equals.md) + * [Test Utils](./reference-test-utils.md) +* [Custom yield instructions](./reference-custom-yield-instructions.md) + * [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md#IEditModeTestYieldInstruction) + * [EnterPlayMode](./reference-custom-yield-instructions.md#enterplaymode) + * [ExitPlayMode](./reference-custom-yield-instructions.md#exitplaymode) +* [Custom assertion](./reference-custom-assertion.md) + * [LogAssert](./reference-custom-assertion.md#logassert) +* [Custom constraints](./reference-custom-constraints.md) + * [Is](./reference-custom-constraints.md#is) +* [Parameterized tests](./reference-tests-parameterized.md) +* [MonoBehaviour tests](./reference-tests-monobehaviour.md) + * [MonoBehaviourTest](./reference-tests-monobehaviour.md#monobehaviourtestt) + * [IMonoBehaviourTest](./reference-tests-monobehaviour.md#imonobehaviourtest) + +* [TestRunnerApi](./reference-test-runner-api.md) + * [ExecutionSettings](./reference-execution-settings.md) + * [Filter](./reference-filter.md) + * [ITestRunSettings](./reference-itest-run-settings.md) + * [ICallbacks](./reference-icallbacks.md) + * [IErrorCallbacks](./reference-ierror-callbacks.md) \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-actions-outside-tests.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-actions-outside-tests.md new file mode 100644 index 0000000..0c8a437 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-actions-outside-tests.md @@ -0,0 +1,98 @@ +# Actions outside of tests + +When writing tests, it is possible to avoid duplication of code by using the [SetUp and TearDown](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) methods built into [NUnit](http://www.nunit.org/). The Unity Test Framework has extended these methods with extra functionality, which can yield commands and skip frames, in the same way as [UnityTest](./reference-attribute-unitytest.md). + +## Action execution order + +The actions related to a test run in the following order: + +* Attributes implementing [IApplyToContext](https://github.com/nunit/docs/wiki/IApplyToContext-Interface) +* Any attribute implementing [OuterUnityTestAction](#outerunitytestaction) has its `BeforeTest` invoked +* Tests with [UnitySetUp](#unitysetup-and-unityteardown) methods in their test class. +* Attributes implementing [IWrapSetUpTearDown](https://github.com/nunit/docs/wiki/ICommandWrapper-Interface) +* Any [SetUp](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) attributes +* [Action attributes](https://nunit.org/docs/2.6/actionAttributes.html) have their `BeforeTest` method invoked +* Attributes implementing of [IWrapTestMethod](https://github.com/nunit/docs/wiki/ICommandWrapper-Interface) +* **The test itself runs** +* [Action attributes](https://nunit.org/docs/2.6/actionAttributes.html) have their `AfterTest` method invoked +* Any method with the [TearDown](https://github.com/nunit/docs/wiki/SetUp-and-TearDown) attribute +* Tests with [UnityTearDown](#unitysetup-and-unityteardown) methods in their test class +* Any [OuterUnityTestAction](#outerunitytestaction) has its `AfterTest` invoked + +The list of actions is the same for both `Test` and `UnityTest`. + +## UnitySetUp and UnityTearDown + +The `UnitySetUp` and `UnityTearDown` attributes are identical to the standard `SetUp` and `TearDown` attributes, with the exception that they allow for [yielding instructions](reference-custom-yield-instructions.md). The `UnitySetUp` and `UnityTearDown` attributes expect a return type of [IEnumerator](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerator?view=netframework-4.8). + +### Example + +```c# +public class SetUpTearDownExample +{ + [UnitySetUp] + public IEnumerator SetUp() + { + yield return new EnterPlayMode(); + } + + [Test] + public void MyTest() + { + Debug.Log("This runs inside playmode"); + } + + [UnitySetUp] + public IEnumerator TearDown() + { + + yield return new ExitPlayMode(); + } +} +``` + + + +## OuterUnityTestAction + +`OuterUnityTestAction` is a wrapper outside of the tests, which allows for any tests with this attribute to run code before and after the tests. This method allows for yielding commands in the same way as `UnityTest`. The attribute must inherit the `NUnit` attribute and implement `IOuterUnityTestAction`. + +### Example + +```c# +using System.Collections; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; + +public class MyTestClass +{ + [UnityTest, MyOuterActionAttribute] + public IEnumerator MyTestInsidePlaymode() + { + Assert.IsTrue(Application.isPlaying); + yield return null; + } +} + +public class MyOuterActionAttribute : NUnitAttribute, IOuterUnityTestAction +{ + public IEnumerator BeforeTest(ITest test) + { + yield return new EnterPlayMode(); + } + + public IEnumerator AfterTest(ITest test) + { + yield return new ExitPlayMode(); + } +} + +``` + + + +## Domain Reloads + +In **Edit Mode** tests it is possible to yield instructions that can result in a domain reload, such as entering or exiting **Play Mode** (see [Custom yield instructions](./reference-custom-yield-instructions.md)). When a domain reload happens, all non-Unity actions (such as `OneTimeSetup` and `Setup`) are rerun before the code, which initiated the domain reload, continues. Unity actions (such as `UnitySetup`) are not rerun. If the Unity action is the code that initiated the domain reload, then the rest of the code in the `UnitySetup` method runs after the domain reload. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-conditionalignore.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-conditionalignore.md new file mode 100644 index 0000000..c051e01 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-conditionalignore.md @@ -0,0 +1,39 @@ +# ConditionalIgnore attribute + +This attribute is an alternative to the standard `Ignore` attribute in [NUnit](http://www.nunit.org/). It allows for ignoring tests only under a specified condition. The condition evaluates during `OnLoad`, referenced by ID. + +## Example + +The following example shows a method to use the `ConditionalIgnore` attribute to ignore a test if the Unity Editor is running macOS: + +```C# +using UnityEditor; +using NUnit.Framework; +using UnityEngine.TestTools; + +[InitializeOnLoad] +public class OnLoad +{ + static OnLoad() + { + var editorIsOSX = false; + #if UNITY_EDITOR_OSX + editorIsOSX = true; + #endif + + ConditionalIgnoreAttribute.AddConditionalIgnoreMapping("IgnoreInMacEditor", editorIsOSX); + } +} + +public class MyTestClass +{ + [Test, ConditionalIgnore("IgnoreInMacEditor", "Ignored on Mac editor.")] + public void TestNeverRunningInMacEditor() + { + Assert.Pass(); + } +} + +``` + +> **Note**: You can only use `InitializeOnLoad` in **Edit Mode** tests. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testmustexpectalllogs.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testmustexpectalllogs.md new file mode 100644 index 0000000..f0c4665 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testmustexpectalllogs.md @@ -0,0 +1,11 @@ +# TestMustExpectAllLogs attribute + +The presence of this attribute causes the **Test Runner** to expect every single log. By default, the Test Runner only fails on error logs, but `TestMustExpectAllLogs` fails on warnings and info level messages as well. It is the same as calling the method [LogAssert.NoUnexpectedReceived](./reference-custom-assertion.md#static-methods) at the bottom of every affected test. + +## Assembly-wide usage + +You can apply this attribute to test assemblies (that affects every test in the assembly), fixtures (affects every test in the fixture), or on individual test methods. It is also inherited from base fixtures. + +The `MustExpect` property (`true` by default) lets you enable or disable the higher level value. + +For example when migrating an assembly to this more strict checking method, you might attach `[assembly:TestMustExpectAllLogs]` to the assembly itself, but then whitelist failing fixtures and test methods with `[TestMustExpectAllLogs(MustExpect=false)]` until you have migrated them. This also means new tests in that assembly would have the more strict checking. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testplayerbuildmodifier.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testplayerbuildmodifier.md new file mode 100644 index 0000000..4ab7ccb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testplayerbuildmodifier.md @@ -0,0 +1,105 @@ +# TestPlayerBuildModifier attribute + +You can use the `TestPlayerBuildModifier` attribute to accomplish a couple of different scenarios: + +## Modify the Player build options for Play Mode tests + +It is possible to change the [BuildPlayerOptions](https://docs.unity3d.com/ScriptReference/BuildPlayerOptions.html) for the test **Player**, to achieve custom behavior when running **Play Mode** tests. Modifying the build options allows for changing the target location of the build as well as changing [BuildOptions](https://docs.unity3d.com/ScriptReference/BuildOptions.html). + +To modify the `BuildPlayerOptions`, do the following: + +* Implement the `ITestPlayerBuildModifier` +* Reference the implementation type in a `TestPlayerBuildModifier` attribute on an assembly level. + +### Example + +```c# +using UnityEditor; +using UnityEditor.TestTools; + +[assembly:TestPlayerBuildModifier(typeof(BuildModifier))] +public class BuildModifier : ITestPlayerBuildModifier +{ + public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions) + { + if (playerOptions.target == BuildTarget.iOS) + { + playerOptions.options |= BuildOptions.SymlinkLibraries; // Enable symlink libraries when running on iOS + } + + playerOptions.options |= BuildOptions.AllowDebugging; // Enable allow Debugging flag on the test Player. + return playerOptions; + } +} +``` + +> **Note:** When building the Player, it includes all `TestPlayerBuildModifier` attributes across all loaded assemblies, independent of the currently used test filter. As the implementation references the `UnityEditor` namespace, the code is typically implemented in an Editor only assembly, as the `UnityEditor` namespace is not available otherwise. + +## Split build and run + +It is possible to use the Unity Editor for building the Player with tests, without [running the tests](./workflow-run-playmode-test-standalone.md). This allows for running the Player on e.g. another machine. In this case, it is necessary to modify the Player to build and implement a custom handling of the test result. + +By using `TestPlayerBuildModifier`, you can alter the `BuildOptions` to not start the Player after the build as well as build the Player at a specific location. Combined with [PostBuildCleanup](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup), you can automatically exit the Editor on completion of the build. + +### Example + +```c# +using System; +using System.IO; +using System.Linq; +using Tests; +using UnityEditor; +using UnityEditor.TestTools; +using UnityEngine; +using UnityEngine.TestTools; + +[assembly:TestPlayerBuildModifier(typeof(HeadlessPlayModeSetup))] +[assembly:PostBuildCleanup(typeof(HeadlessPlayModeSetup))] + +namespace Tests +{ + public class HeadlessPlayModeSetup : ITestPlayerBuildModifier, IPostBuildCleanup + { + private static bool s_RunningPlayerTests; + public BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions) + { + // Do not launch the player after the build completes. + playerOptions.options &= ~BuildOptions.AutoRunPlayer; + + // Set the headlessBuildLocation to the output directory you desire. It does not need to be inside the project. + var headlessBuildLocation = Path.GetFullPath(Path.Combine(Application.dataPath, ".//..//PlayModeTestPlayer")); + var fileName = Path.GetFileName(playerOptions.locationPathName); + if (!string.IsNullOrEmpty(fileName)) + { + headlessBuildLocation = Path.Combine(headlessBuildLocation, fileName); + } + playerOptions.locationPathName = headlessBuildLocation; + + // Instruct the cleanup to exit the Editor if the run came from the command line. + // The variable is static because the cleanup is being invoked in a new instance of the class. + s_RunningPlayerTests = true; + return playerOptions; + } + + public void Cleanup() + { + if (s_RunningPlayerTests && IsRunningTestsFromCommandLine()) + { + // Exit the Editor on the next update, allowing for other PostBuildCleanup steps to run. + EditorApplication.update += () => { EditorApplication.Exit(0); }; + } + } + + private static bool IsRunningTestsFromCommandLine() + { + var commandLineArgs = Environment.GetCommandLineArgs(); + return commandLineArgs.Any(value => value == "-runTests"); + } + } +} +``` + +If the Editor is still running after the Play Mode tests have run, the Player tries to report the results back, using [PlayerConnection](https://docs.unity3d.com/ScriptReference/Networking.PlayerConnection.PlayerConnection.html), which has a reference to the IP address of the Editor machine, when built. + +To implement a custom way of reporting the results of the test run, let one of the assemblies in the Player include a [TestRunCallback](./reference-attribute-testruncallback.md). At `RunFinished`, it is possible to get the full test report as XML from the [NUnit](http://www.nunit.org/) test result by calling `result.ToXml(true)`. You can save the result and then save it on the device or send it to another machine as needed. + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testruncallback.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testruncallback.md new file mode 100644 index 0000000..dad865a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-testruncallback.md @@ -0,0 +1,46 @@ +# TestRunCallback attribute + +It is possible for the test framework to invoke callbacks as the current test run progresses. To do this, there is a `TestRunCallback` attribute which takes the type of `ITestRunCallback` implementation. You can invoke the callbacks with [NUnit](http://www.nunit.org/) `ITest` and `ITestResult` classes. + +At the `RunStarted` and `RunFinished` methods, the test and test results are for the whole test tree. These methods invoke at each node in the test tree; first with the whole test assembly, then with the test class, and last with the test method. + +From these callbacks, it is possible to read the partial or the full results, and it is furthermore possible to save the XML version of the result for further processing or continuous integration. + +## Example + +```C# +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestRunner; + +[assembly:TestRunCallback(typeof(MyTestRunCallback))] + +public class MyTestRunCallback : ITestRunCallback +{ + public void RunStarted(ITest testsToRun) + { + + } + + public void RunFinished(ITestResult testResults) + { + + } + + public void TestStarted(ITest test) + { + + } + + public void TestFinished(ITestResult result) + { + if (!result.Test.IsSuite) + { + Debug.Log($"Result of {result.Name}: {result.ResultState.Status}"); + } + } +} + +``` + +> **Note:** The `TestRunCallback` does not need any references to the `UnityEditor` namespace and is thus able to run in standalone Players, on the **Player** side. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-unityplatform.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-unityplatform.md new file mode 100644 index 0000000..931ab87 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-unityplatform.md @@ -0,0 +1,35 @@ +# UnityPlatform attribute + +Use this attribute to define a specific set of platforms you want or do not want your test(s) to run on. + +You can use this attribute on the test method, test class, or test assembly level. Use the supported [RuntimePlatform](https://docs.unity3d.com/ScriptReference/RuntimePlatform.html) enumeration values to specify the platforms. You can also specify which platforms to test by passing one or more `RuntimePlatform` values along with or without the include or exclude properties as parameters to the [Platform](https://github.com/nunit/docs/wiki/Platform-Attribute) attribute constructor. + +The test(s) skips if the current target platform is: + +- Not explicitly specified in the included platforms list +- In the excluded platforms list + +```c# +using UnityEngine; +using UnityEngine.TestTools; +using NUnit.Framework; + +[TestFixture] +public class TestClass +{ + [Test] + [UnityPlatform(RuntimePlatform.WindowsPlayer)] + public void TestMethod() + { + Assert.AreEqual(Application.platform, RuntimePlatform.WindowsPlayer); + } +} +``` + +## Properties + +| Syntax | Description | +| --------------------------- | ------------------------------------------------------------ | +| `RuntimePlatform[] exclude` | List the platforms you do not want to have your tests run on. | +| `RuntimePlatform[] include` | A subset of platforms you need to have your tests run on. | + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-unitytest.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-unitytest.md new file mode 100644 index 0000000..dd002b2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-attribute-unitytest.md @@ -0,0 +1,51 @@ +# UnityTest attribute + +`UnityTest` attribute is the main addition to the standard [NUnit](http://www.nunit.org/) library for the Unity Test Framework. This type of unit test allows you to skip a frame from within a test (so background tasks can finish) or give certain commands to the Unity **Editor**, such as performing a domain reload or entering **Play Mode** from an **Edit Mode** test. + +In Play Mode, the `UnityTest` attribute runs as a [coroutine](https://docs.unity3d.com/Manual/Coroutines.html). Whereas Edit Mode tests run in the [EditorApplication.update](https://docs.unity3d.com/ScriptReference/EditorApplication-update.html) callback loop. + +The `UnityTest` attribute is, in fact, an alternative to the `NUnit` [Test attribute](https://github.com/nunit/docs/wiki/Test-Attribute), which allows yielding instructions back to the framework. Once the instruction is complete, the test run continues. If you `yield return null`, you skip a frame. That might be necessary to ensure that some changes do happen on the next iteration of either the `EditorApplication.update` loop or the [game loop](https://docs.unity3d.com/Manual/ExecutionOrder.html). + +## Edit Mode example + +The most simple example of an Edit Mode test could be the one that yields `null` to skip the current frame and then continues to run: + +```C# +[UnityTest] +public IEnumerator EditorUtility_WhenExecuted_ReturnsSuccess() +{ + var utility = RunEditorUtilityInTheBackgroud(); + + while (utility.isRunning) + { + yield return null; + } + + Assert.IsTrue(utility.isSuccess); +} +``` + +## Play Mode example + +In Play Mode, a test runs as a coroutine attached to a [MonoBehaviour](https://docs.unity3d.com/ScriptReference/MonoBehaviour.html). So all the yield instructions available in coroutines, are also available in your test. + +From a Play Mode test you can use one of Unity’s [Yield Instructions](https://docs.unity3d.com/ScriptReference/YieldInstruction.html): + +- [WaitForFixedUpdate](https://docs.unity3d.com/ScriptReference/WaitForFixedUpdate.html): to ensure changes expected within the next cycle of physics calculations. +- [WaitForSeconds](https://docs.unity3d.com/ScriptReference/WaitForSeconds.html): if you want to pause your test coroutine for a fixed amount of time. Be careful about creating long-running tests. + +The simplest example is to yield to `WaitForFixedUpdate`: + +```c# +[UnityTest] +public IEnumerator GameObject_WithRigidBody_WillBeAffectedByPhysics() +{ + var go = new GameObject(); + go.AddComponent(); + var originalPosition = go.transform.position.y; + + yield return new WaitForFixedUpdate(); + + Assert.AreNotEqual(originalPosition, go.transform.position.y); +} +``` diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-command-line.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-command-line.md new file mode 100644 index 0000000..8a95061 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-command-line.md @@ -0,0 +1,120 @@ +# Running tests from the command line + +It’s pretty simple to run a test project from the command line. Here is an example in Windows: + +```bash +Unity.exe -runTests -batchmode -projectPath PATH_TO_YOUR_PROJECT -testResults C:\temp\results.xml -testPlatform PS4 +``` + +For more information, see [Command line arguments](https://docs.unity3d.com/Manual/CommandLineArguments.html). + +## Commands + +### batchmode + +Runs Unity in batch mode and ensures no pop-up windows appear to eliminate the need for any human intervention. + +### forgetProjectPath + +Don't save your current **Project** into the Unity launcher/hub history. + +### runTests + +Runs tests in the Project. + +### testCategory + +A semicolon-separated list of test categories to include in the run. If using both `testFilter` and `testCategory`, then tests only run that matches both. This argument supports negation using '!'. If using '!MyCategory' then no tests with the 'MyCategory' category will be included in the run. + +### testFilter + +A semicolon-separated list of test names to run, or a regular expression pattern to match tests by their full name. This argument supports negation using '!'. If using the test filter '!MyNamespace.Something.MyTest', then all tests except that test will be run. + +### testPlatform + +The platform you want to run tests on. Available platforms are **EditMode** and **PlayMode**. + +> **Note**: If unspecified, tests run in Edit Mode by default. + +Platform/Type convention is from the [BuildTarget](https://docs.unity3d.com/ScriptReference/BuildTarget.html) enum. Supported platforms are: + +* StandaloneWindows +* StandaloneWindows64 +* StandaloneLinux64 +* StandaloneOSX +* iOS +* Android +* PS4 +* XboxOne + +### assemblyNames + +A semicolon-separated list of test assemblies to include in the run. + +### testResults + +The path where Unity should save the result file. By default, Unity saves it in the Project’s root folder. + +### playerHeartbeatTimeout + +The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes. + +### runSynchronously + +If included, the test run will run tests synchronously, guaranteeing that all tests runs in one editor update call. Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. `[UnityTest]` tests, or tests with `[UnitySetUp]` or `[UnityTearDown]` scaffolding) will be filtered out. + +### testSettingsFile + +Path to a *TestSettings.json* file that allows you to set up extra options for your test run. An example of the *TestSettings.json* file could look like this: + +```json +{ + "scriptingBackend":2, + "Architecture":null, + "apiProfile":0 +} +``` + +#### apiProfile + +The .Net compatibility level. Set to one of the following values: + +- 1 - .Net 2.0 +- 2 - .Net 2.0 Subset +- 3 - .Net 4.6 +- 5 - .Net micro profile (used by Mono scripting backend if **Stripping Level** is set to **Use micro mscorlib**) +- 6 - .Net Standard 2.0 + +#### appleEnableAutomaticSigning + +Sets option for automatic signing of Apple devices. + +#### appleDeveloperTeamID + +Sets the team ID for the apple developer account. + +#### architecture + +Target architecture for Android. Set to one of the following values: + +* None = 0 +* ARMv7 = 1 +* ARM64 = 2 +* X86 = 4 +* All = 4294967295 + +#### iOSManualProvisioningProfileType + +Set to one of the following values: + +* 0 - Automatic +* 1 - Development +* 2 - Distribution iOSManualProvisioningProfileID + +#### scriptingBackend + + Set to one of the following values: + +- Mono2x = 0 +- IL2CPP = 1 +- WinRT DotNET = 2 \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-color.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-color.md new file mode 100644 index 0000000..f4ae57e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-color.md @@ -0,0 +1,47 @@ +# ColorEqualityComparer + +Use this class to compare two `Color` objects. `ColorEqualityComparer.Instance` has default calculation error value set to 0.01f. To set a test specific error value instantiate a comparer instance using the [one argument constructor](#constructors). + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A singleton instance of the comparer with a default error value set to 0.01f. | + +## Constructors + +| Syntax | Description | +| ------------------------------------ | ------------------------------------------------------------ | +| `ColorEqualityComparer(float error)` | Creates an instance of the comparer with a custom error value. | + +## Public methods + +| Syntax | Description | +| -------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(Color expected, Color actual);` | Compares the actual and expected `Color` objects for equality using `Utils.AreFloatsEqualAbsoluteError` to compare the `RGB` and `Alpha` attributes of `Color`. Returns `true` if expected and actual objects are equal otherwise, it returns `false`. | + +## Example + +```c# +[TestFixture] +public class ColorEqualityTest +{ + [Test] + public void GivenColorsAreEqual_WithAllowedCalculationError() + { + // Using default error + var firstColor = new Color(0f, 0f, 0f, 0f); + var secondColor = new Color(0f, 0f, 0f, 0f); + + Assert.That(firstColor, Is.EqualTo(secondColor).Using(ColorEqualityComparer.Instance)); + + // Allowed error 10e-5f + var comparer = new ColorEqualityComparer(10e-5f); + firstColor = new Color(0f, 0f, 0f, 1f); + secondColor = new Color(10e-6f, 0f, 0f, 1f); + + Assert.That(firstColor, Is.EqualTo(secondColor).Using(comparer)); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-equals.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-equals.md new file mode 100644 index 0000000..cc5d4d6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-equals.md @@ -0,0 +1,27 @@ +# Custom equality comparers with equals operator + +If you need to compare Vectors using the overloaded operator == (see [Vector2.operator ==](https://docs.unity3d.com/ScriptReference/Vector2-operator_eq.html), [Vector3.operator ==](https://docs.unity3d.com/ScriptReference/Vector3-operator_eq.html), and [Vector4.operator ==](https://docs.unity3d.com/ScriptReference/Vector4-operator_eq.html)) you should use the respective comparer implementations: + +- Vector2ComparerWithEqualsOperator +- Vector3ComparerWithEqualsOperator +- Vector4ComparerWithEqualsOperator + +The interface is the same as for other [equality comparers](./reference-custom-equality-comparers.md) except the public [constructor](./reference-custom-equality-comparers.md#constructors) `error` parameter is inapplicable in this case. + +## Example + +```c# +[TestFixture] +public class Vector3Test +{ + [Test] + public void VerifyThat_TwoVector3ObjectsAreEqual() + { + var actual = new Vector3(10e-7f, 10e-7f, 10e-7f); + var expected = new Vector3(0f, 0f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector3ComparerWithEqualsOperator.Instance)); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-float.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-float.md new file mode 100644 index 0000000..188d207 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-float.md @@ -0,0 +1,46 @@ +# FloatEqualityComparer + +Use this class to compare two float values for equality with [NUnit](http://www.nunit.org/) constraints. Use `FloatEqualityComparer.Instance` comparer to have the default error value set to 0.0001f. For any other error, use the [one argument constructor](#constructors) to create a comparer. + +## Static Properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A singleton instance of the comparer with a default error value set to 0.0001f. | + +## Constructors + +| Syntax | Description | +| ------------------------------------------- | ------------------------------------------------------------ | +| `FloatEqualityComparer(float allowedError)` | Creates an instance of the comparer with a custom error value. | + +## Public methods + +| Syntax | Description | +| -------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(float expected, float actual);` | Compares the `actual` and `expected` float values for equality using `Utils.AreFloatsEqual`. | + +## Example + +```c# +[TestFixture] +public class FloatsTest +{ + [Test] + public void VerifyThat_TwoFloatsAreEqual() + { + var comparer = new FloatEqualityComparer(10e-6f); + var actual = -0.00009f; + var expected = 0.00009f; + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + // Default relative error 0.0001f + actual = 10e-8f; + expected = 0f; + + Assert.That(actual, Is.EqualTo(expected).Using(FloatEqualityComparer.Instance)); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-quaternion.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-quaternion.md new file mode 100644 index 0000000..5d7abc8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-quaternion.md @@ -0,0 +1,46 @@ +# QuaternionEqualityComparer + +Use this utility to compare two [Quaternion](https://docs.unity3d.com/ScriptReference/Quaternion.html) objects for equality with [NUnit](http://www.nunit.org/) assertion constraints. Use the static instance `QuaternionEqualityComparer.Instance` to have the default calculation error value set to 0.00001f. For any other custom error value, use the [one argument constructor](#constructors). + +## Static properties + +| Syntax | Description | +| ---------- | ---------------------------------------------------------- | +| `Instance` | A comparer instance with the default error value 0.00001f. | + +## Constructors + +| Syntax | Description | +| ------------------------------------------------ | ------------------------------------------------------------ | +| `QuaternionEqualityComparer(float allowedError)` | Creates an instance of the comparer with a custom allowed error value. | + +## Public methods + +| Syntax | Description | +| ----------------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(Quaternion expected, Quaternion actual)` | Compares the `actual` and `expected` `Quaternion` objects for equality using the [Quaternion.Dot](https://docs.unity3d.com/ScriptReference/Quaternion.Dot.html) method. | + +## Example + +```c# +[TestFixture] +public class QuaternionTest +{ + [Test] + public void VerifyThat_TwoQuaternionsAreEqual() + { + var actual = new Quaternion(10f, 0f, 0f, 0f); + var expected = new Quaternion(1f, 10f, 0f, 0f); + var comparer = new QuaternionEqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + //Using default error 0.00001f + actual = new Quaternion(10f, 0f, 0.1f, 0f); + expected = new Quaternion(1f, 10f, 0.1f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(QuaternionEqualityComparer.Instance)); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector2.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector2.md new file mode 100644 index 0000000..977879e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector2.md @@ -0,0 +1,47 @@ +# Vector2EqualityComparer + +Use this class to compare two [Vector2](https://docs.unity3d.com/ScriptReference/Vector2.html) objects for equality with [NUnit](http://www.nunit.org/) constraints. Use the static `Vector2EqualityComparer.Instance` to have the calculation error value set to default 0.0001f. For any other error value, instantiate a new comparer object with the [one argument constructor](#constructors). + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A comparer instance with the default error value set to 0.0001f. | + +## Constructors + +| Syntax | Description | +| -------------------------------------- | ---------------------------------------------- | +| `Vector2EqualityComparer(float error)` | Creates an instance with a custom error value. | + +## Public methods + +| Syntax | Description | +| ------------------------------------------ | ------------------------------------------------------------ | +| `Equals(Vector2 expected, Vector2 actual)` | Compares the `actual` and `expected` `Vector2` objects for equality using the [Utils.AreFloatsEqual](./reference-test-utils.md) method. | + +## Example + +```c# +[TestFixture] +public class Vector2Test +{ + [Test] + public void VerifyThat_TwoVector2ObjectsAreEqual() + { + // Custom calculation error + var actual = new Vector2(10e-7f, 10e-7f); + var expected = new Vector2(0f, 0f); + var comparer = new Vector2EqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + //Default error 0.0001f + actual = new Vector2(0.01f, 0.01f); + expected = new Vector2(0.01f, 0.01f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector2EqualityComparer.Instance)); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector3.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector3.md new file mode 100644 index 0000000..6fe1122 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector3.md @@ -0,0 +1,47 @@ +# Vector3EqualityComparer + +Use this class to compare two [Vector3](https://docs.unity3d.com/ScriptReference/Vector3.html) objects for equality with `NUnit` constraints. Call `Vector3EqualityComparer.Instance` comparer to perform a comparison with the default calculation error value 0.0001f. To specify a different error value, use the [one argument constructor](#constructors) to instantiate a new comparer. + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A comparer instance with the default calculation error value equal to 0.0001f. | + +## Constructors + +| Syntax | Description | +| --------------------------------------------- | ---------------------------------------------- | +| `Vector3EqualityComparer(float allowedError)` | Creates an instance with a custom error value. | + +## Public methods + +| Syntax | Description | +| ----------------------------------------------- | ------------------------------------------------------------ | +| `bool Equals(Vector3 expected, Vector3 actual)` | Compares the `actual` and `expected` `Vector3` objects for equality using [Utils.AreFloatsEqual](http://todo) to compare the `x`, `y`, and `z` attributes of `Vector3`. | + +## Example + +```c# +[TestFixture] +public class Vector3Test +{ + [Test] + public void VerifyThat_TwoVector3ObjectsAreEqual() + { + // Custom error 10e-6f + var actual = new Vector3(10e-8f, 10e-8f, 10e-8f); + var expected = new Vector3(0f, 0f, 0f); + var comparer = new Vector3EqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + //Default error 0.0001f + actual = new Vector3(0.01f, 0.01f, 0f); + expected = new Vector3(0.01f, 0.01f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector3EqualityComparer.Instance)); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector4.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector4.md new file mode 100644 index 0000000..915cd65 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-comparer-vector4.md @@ -0,0 +1,47 @@ +# Vector4EqualityComparer + +Use this class to compare two [Vector4](https://docs.unity3d.com/ScriptReference/Vector4.html) objects for equality with [NUnit](http://www.nunit.org/) constraints. Call `Vector4EqualityComparer.Instance` to perform comparisons using default calculation error value 0.0001f. To set a custom test value, instantiate a new comparer using the [one argument constructor](#constructor). + +## Static Properties + +| Syntax | Description | +| ---------------------------------- | ------------------------------------------------------------ | +| `Vector4EqualityComparer Instance` | A comparer instance with the default calculation error value set to 0.0001f. | + +## Constructors + +| Syntax | Description | +| --------------------------------------------- | ---------------------------------------------- | +| `Vector4EqualityComparer(float allowedError)` | Creates an instance with a custom error value. | + +## Public methods + +| Syntax | Description | +| ------------------------------------------------ | ------------------------------------------------------------ | +| `bool Equals(Vector4 expected, Vector4 actual);` | Compares the `actual` and `expected` `Vector4` objects for equality using [Utils.AreFloatsEqual](http://todo) to compare the `x`, `y`, `z`, and `w` attributes of `Vector4`. | + +## Example + +```c# +[TestFixture] +public class Vector4Test +{ + [Test] + public void VerifyThat_TwoVector4ObjectsAreEqual() + { + // Custom error 10e-6f + var actual = new Vector4(0, 0, 1e-6f, 1e-6f); + var expected = new Vector4(1e-6f, 0f, 0f, 0f); + var comparer = new Vector4EqualityComparer(10e-6f); + + Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + + // Default error 0.0001f + actual = new Vector4(0.01f, 0.01f, 0f, 0f); + expected = new Vector4(0.01f, 0.01f, 0f, 0f); + + Assert.That(actual, Is.EqualTo(expected).Using(Vector4EqualityComparer.Instance)); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-assertion.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-assertion.md new file mode 100644 index 0000000..665597b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-assertion.md @@ -0,0 +1,66 @@ +# Custom assertion + +A test fails if Unity logs a message other than a regular log or warning message. Use [LogAssert](#logassert) to check for an expected message in the log so that the test does not fail when Unity logs the message. + +Use `LogAssert.Expect` before running the code under test, as the check for expected logs runs at the end of each frame. + +A test also reports a failure, if an expected message does not appear, or if Unity does not log any regular log or warning messages. + +## Example + +```c# +[Test] +public void LogAssertExample() +{ + // Expect a regular log message + LogAssert.Expect(LogType.Log, "Log message"); + + // The test fails without the following expected log message + Debug.Log("Log message"); + + // An error log + Debug.LogError("Error message"); + + // Without expecting an error log, the test would fail + LogAssert.Expect(LogType.Error, "Error message"); +} +``` + +## LogAssert + +`LogAssert` lets you expect Unity log messages that would otherwise cause the test to fail. + +### Static properties + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `bool ignoreFailingMessages` | Set this property to `true` to prevent unexpected error log messages from triggering an assertion. By default, it is `false`. | + +### Static Methods + +| Syntax | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `void Expect(LogType type, string message);` `void Expect(LogType type, Regex message);` | Verifies that a log message of a specified type appears in the log. A test won’t fail from an expected error, assertion, or exception log message. It does fail if an expected message does not appear in the log. | +| `void NoUnexpectedReceived();` | Triggers an assertion when receiving any log messages and fails the test if some are unexpected messages. If multiple tests need to check for no received unexpected logs, consider using the [TestMustExpectAllLogs](./reference-attribute-testmustexpectalllogs.md) attribute instead. | + +### Expect string message + +`void Expect(LogType type, string message);` + +#### Parameters + +| Syntax | Description | +| ---------------- | ------------------------------------------------------------ | +| `LogType type` | A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. | +| `string message` | A string value that should equate to the expected message. | + +### Expect Regex message + +`void Expect(LogType type, Regex message);` + +#### Parameters + +| Syntax | Description | +| --------------- | ------------------------------------------------------------ | +| `LogType type` | A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. | +| `Regex message` | A regular expression pattern to match the expected message. | \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-attributes.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-attributes.md new file mode 100644 index 0000000..115e4cb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-attributes.md @@ -0,0 +1,15 @@ +# Custom attributes + +As a part of UTF’s public API we provide the following attributes: + +* [ConditionalIgnore attribute](./reference-attribute-conditionalignore.md) +* [PostBuildCleanup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) +* [PrebuildSetup attribute](./reference-setup-and-cleanup.md#prebuildsetup-and-postbuildcleanup) +* [TestMustExpectAllLogs attribute](./reference-attribute-testmustexpectalllogs.md) +* [TestPlayerBuildModifier attribute](./reference-attribute-testplayerbuildmodifier.md) +* [TestRunCallback attribute](./reference-attribute-testruncallback.md) +* [UnityPlatform attribute](./reference-attribute-unityplatform.md) +* [UnitySetUp attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) +* [UnityTearDown attribute](./reference-actions-outside-tests.md#unitysetup-and-unityteardown) +* [UnityTest attribute](./reference-attribute-unitytest.md) + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-constraints.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-constraints.md new file mode 100644 index 0000000..10b205b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-constraints.md @@ -0,0 +1,31 @@ +# Custom constraints + +`NUnit` allows you to write test assertions in a more descriptive and human readable way using the [Assert.That](https://github.com/nunit/docs/wiki/Assertions) mechanism, where the first parameter is an object under test and the second parameter describes conditions that the object has to meet. + +## Is + +We’ve extended `NUnit` API with a custom constraint type and declared an overlay `Is` class. To resolve ambiguity between the original implementation and the custom one you must explicitly declare it with a using statement or via addressing through the full type name `UnityEngine.TestTools.Constraints.Is`. + +### Static Methods + +| Syntax | Description | +| -------------------- | ------------------------------------------------------------ | +| `AllocatingGCMemory` | A constraint type that invokes the delegate you provide as the parameter of `Assert.That` and checks whether it causes any GC memory allocations. It passes if any GC memory is allocated and fails if not. | + +## Example + +```c# +using Is = UnityEngine.TestTools.Constraints.Is; + +class MyTestClass +{ + [Test] + public void MyTest() + { + Assert.That(() => { + var i = new int[500]; + }, Is.AllocatingGCMemory()); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-equality-comparers.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-equality-comparers.md new file mode 100644 index 0000000..8203a32 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-equality-comparers.md @@ -0,0 +1,32 @@ +# Custom equality comparers + +To enable easier verification of custom Unity type values in your tests we provide you with some custom equality comparers: + +* [ColorEqualityComparer](./reference-comparer-color.md) +* [FloatEqualityComparer](./reference-comparer-float.md) +* [QuaternionEqualityComparer](./reference-comparer-quaternion.md) +* [Vector2EqualityComparer](./reference-comparer-vector2.md) +* [Vector3EqualityComparer](./reference-comparer-vector3.md) +* [Vector4EqualityComparer](./reference-comparer-vector4.md) + +Use these classes to compare two objects of the same type for equality within the range of a given tolerance using [NUnit ](https://github.com/nunit/docs/wiki/Constraints)or [custom constraints](./reference-custom-constraints.md) . Call Instance to apply the default calculation error value to the comparison. To set a specific error value, instantiate a new comparer object using a one argument constructor `ctor(float error)`. + +## Static properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `Instance` | A singleton instance of the comparer with a predefined default error value. | + +## Constructors + +| Syntax | Description | +| ------------------- | ------------------------------------------------------------ | +| `ctor(float error)` | Creates an instance of comparer with a custom error `value.allowedError`. The relative error to be considered while comparing two values. | + +## Public methods + +| Syntax | Description | +| ------------------------------------ | ------------------------------------------------------------ | +| `bool Equals(T expected, T actual);` | Compares the actual and expected objects for equality using a custom comparison mechanism. Returns `true` if expected and actual objects are equal, otherwise it returns `false`. | + + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-yield-instructions.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-yield-instructions.md new file mode 100644 index 0000000..9814ca3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-custom-yield-instructions.md @@ -0,0 +1,60 @@ +# Custom yield instructions + +By implementing this interface below, you can define custom yield instructions in **Edit Mode** tests. + +## IEditModeTestYieldInstruction + +In an Edit Mode test, you can use `IEditModeTestYieldInstruction` interface to implement your own instruction. There are also a couple of commonly used implementations available: + +- [EnterPlayMode](#enterplaymode) +- [ExitPlayMode](#exitplaymode) +- [RecompileScripts](./reference-recompile-scripts.md) +- [WaitForDomainReload](./reference-wait-for-domain-reload.md) + +## Example + +```c# +[UnityTest] + +public IEnumerator PlayOnAwakeDisabled_DoesntPlayWhenEnteringPlayMode() + +{ + var videoPlayer = PrefabUtility.InstantiatePrefab(m_VideoPlayerPrefab.GetComponent()) as VideoPlayer; + + videoPlayer.playOnAwake = false; + + yield return new EnterPlayMode(); + + var videoPlayerGO = GameObject.Find(m_VideoPlayerPrefab.name); + + Assert.IsFalse(videoPlayerGO.GetComponent().isPlaying); + + yield return new ExitPlayMode(); + + Object.DestroyImmediate(GameObject.Find(m_VideoPlayerPrefab.name)); +} +``` + +## Properties + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `bool ExpectDomainReload` | Returns `true` if the instruction expects a domain reload to occur. | +| `bool ExpectedPlaymodeState` | Returns `true` if the instruction expects the Unity Editor to be in **Play Mode**. | + +## Methods + +| Syntax | Description | +| ----------------------- | ------------------------------------------------------------ | +| `IEnumerator Perform()` | Used to define multi-frame operations performed when instantiating a yield instruction. | + +## EnterPlayMode + +* Implements `IEditModeTestYieldInstruction`. Creates a yield instruction to enter Play Mode. +* When creating an Editor test that uses the `UnityTest` attribute, use this to trigger the Editor to enter Play Mode. +* Throws an exception if the Editor is already in Play Mode or if there is a [script compilation error](https://support.unity3d.com/hc/en-us/articles/205930539-How-do-I-interpret-a-compiler-error-). + +## ExitPlayMode + +* Implements `IEditModeTestYieldInstruction`. A new instance of the class is a yield instruction to exit Play Mode. +* Throws an exception if the Editor is not in Play Mode. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-execution-settings.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-execution-settings.md new file mode 100644 index 0000000..e40a333 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-execution-settings.md @@ -0,0 +1,17 @@ +# ExecutionSettings +The `ExecutionSettings` is a set of filters and other settings provided when running a set of tests from the [TestRunnerApi](./reference-test-runner-api.md). + +## Constructors + +| Syntax | Description | +| ----------------------------------------------------- | -------------------------------------------------------- | +| `ExecutionSettings(params Filter[] filtersToExecute)` | Creates an instance with a given set of filters, if any. | + +## Fields + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `Filter[] filters` | A collection of [Filters](./reference-filter.md) to execute tests on. | +| `ITestRunSettings overloadTestRunSettings` | An instance of [ITestRunSettings](./reference-itest-run-settings.md) to set up before running tests on a Player. | +| `bool runSynchronously` | If true, the call to `Execute()` will run tests synchronously, guaranteeing that all tests have finished running by the time the call returns. Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. `[UnityTest]` tests, or tests with `[UnitySetUp]` or `[UnityTearDown]` scaffolding) will be filtered out. | +| 'int playerHeartbeatTimeout' | The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes. | \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-filter.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-filter.md new file mode 100644 index 0000000..8cfa910 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-filter.md @@ -0,0 +1,15 @@ +# Filter +The filter class provides the [TestRunnerApi](./reference-test-runner-api.md) with a specification of what tests to run when [running tests programmatically](./extension-run-tests.md). + +## Fields + +| Syntax | Description | +| ----------------------------- | ------------------------------------------------------------ | +| `TestMode testMode` | An enum flag that specifies if **Edit Mode** or **Play Mode** tests should run. Applying both Edit Mode and Play Mode is currently not supported when running tests from the API. | +| `string[] testNames` | The full name of the tests to match the filter. This is usually in the format `FixtureName.TestName`. If the test has test arguments, then include them in parenthesis. E.g. `MyTestClass2.MyTestWithMultipleValues(1)`. | +| `string[] groupNames` | The same as `testNames`, except that it allows for Regex. This is useful for running specific fixtures or namespaces. E.g. `"^MyNamespace\\."` Runs any tests where the top namespace is `MyNamespace`. | +| `string[] categoryNames` | The name of a [Category](https://nunit.org/docs/2.2.7/category.html) to include in the run. Any test or fixtures runs that have a `Category` matching the string. | +| `string[] assemblyNames` | The name of assemblies included in the run. That is the assembly name, without the .dll file extension. E.g., `MyTestAssembly`. | +| `BuildTarget? targetPlatform` | The [BuildTarget](https://docs.unity3d.com/ScriptReference/BuildTarget.html) platform to run the test on. If set to `null`, then the Editor is the target for the tests. | + + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-icallbacks.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-icallbacks.md new file mode 100644 index 0000000..b04e7e8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-icallbacks.md @@ -0,0 +1,48 @@ +# ICallbacks +An interface for receiving callbacks when running tests. All test runs invoke the callbacks until the next domain reload. + +The `RunStarted` method runs when the whole test run starts. Then the `TestStarted` method runs with information about the tests it is about to run on an assembly level. Afterward, it runs on a test fixture level and then on the individual test. If the test is a [parameterized test](./https://github.com/nunit/docs/wiki/Parameterized-Tests), then it is also invoked for each parameter combination. After each part of the test tree have completed running, the corresponding `TestFinished` method runs with the test result. At the end of the run, the `RunFinished` event runs with the test result. + +An extended version of the callback, [IErrorCallbacks](./reference-ierror-callbacks.md), extends this `ICallbacks` to receive calls when a run fails due to a build error. + +## Public methods + +| Syntax | Description | +| ---------------------------------------------- | ------------------------------------------------------------ | +| `void RunStarted(ITestAdaptor testsToRun)` | Invoked when the test run starts. The [ITestAdaptor](./reference-itest-adaptor.md) represents the tree of tests to run. | +| `void RunFinished(ITestResultAdaptor result)` | Invoked when the test run finishes. The [ITestResultAdaptor](./reference-itest-result-adaptor.md) represents the results of the set of tests that have run. | +| `void TestStarted(ITestAdaptor test)` | Invoked on each node of the test tree, as that part of the tree starts to run. | +| `void TestFinished(ITestResultAdaptor result)` | Invoked on each node of the test tree once that part of the test tree has finished running. The [ITestResultAdaptor](./reference-itest-result-adaptor.md) represents the results of the current node of the test tree. | + +## Example +An example that sets up a listener on the API. The listener prints the number of failed tests after the run has finished: +``` C# +public void SetupListeners() +{ + var api = ScriptableObject.CreateInstance(); + api.RegisterCallbacks(new MyCallbacks()); +} + +private class MyCallbacks : ICallbacks +{ + public void RunStarted(ITestAdaptor testsToRun) + { + + } + + public void RunFinished(ITestResultAdaptor result) + { + Debug.Log(string.Format("Run finished {0} test(s) failed.", result.FailCount)); + } + + public void TestStarted(ITestAdaptor test) + { + + } + + public void TestFinished(ITestResultAdaptor result) + { + + } +} +``` \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-ierror-callbacks.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-ierror-callbacks.md new file mode 100644 index 0000000..bf83309 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-ierror-callbacks.md @@ -0,0 +1,9 @@ +# IErrorCallbacks +An extended version of the [ICallbacks](./reference-icallbacks.md), which get invoked if the test run fails due to a build error or if any [IPrebuildSetup](./reference-setup-and-cleanup.md) has a failure. + +## Public methods + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------------- | +| void OnError(string message) | The error message detailing the reason for the run to fail. | + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-adaptor.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-adaptor.md new file mode 100644 index 0000000..04e72f6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-adaptor.md @@ -0,0 +1,31 @@ +# ITestAdaptor +`ITestAdaptor` is a representation of a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITest.cs) interface. + +## Properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `string Id` | The ID of the test tree node. The ID can change if you add new tests to the suite. Use `UniqueName`, if you want to have a more permanent point of reference. | +| `string Name` | The name of the test. E.g., `MyTest`. | +| `string FullName` | The full name of the test. E.g., `MyNamespace.MyTestClass.MyTest`. | +| `int TestCaseCount` | The total number of test cases in the node and all sub-nodes. | +| `bool HasChildren` | Whether the node has any children. | +| `bool IsSuite` | Whether the node is a test suite/fixture. | +| `IEnumerable Children` | The child nodes. | +| `ITestAdaptor Parent` | The parent node, if any. | +| `int TestCaseTimeout` | The test case timeout in milliseconds. Note that this value is only available on TestFinished. | +| `ITypeInfo TypeInfo` | The type of test class as an `NUnit` [ITypeInfo](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITypeInfo.cs). If the node is not a test class, then the value is `null`. | +| `IMethodInfo Method` | The [Nunit IMethodInfo](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/IMethodInfo.cs) of the test method. If the node is not a test method, then the value is `null`. | +| `string[] Categories` | An array of the categories applied to the test or fixture. | +| `bool IsTestAssembly` | Whether the node represents a test assembly. | +| `RunState RunState` | The run state of the test node. Either `NotRunnable`, `Runnable`, `Explicit`, `Skipped`, or `Ignored`. | +| `string Description` | The description of the test. | +| `string SkipReason` | The skip reason. E.g., if ignoring the test. | +| `string ParentId` | The ID of the parent node. | +| `string ParentFullName` | The full name of the parent node. | +| `string UniqueName` | A unique generated name for the test node. E.g., `Tests.dll/MyNamespace/MyTestClass/[Tests][MyNamespace.MyTestClass.MyTest]`. | +| `string ParentUniqueName` | A unique name of the parent node. E.g., `Tests.dll/MyNamespace/[Tests][MyNamespace.MyTestClass][suite]`. | +| `int ChildIndex` | The child index of the node in its parent. | +| `TestMode TestMode` | The mode of the test. Either **Edit Mode** or **Play Mode**. | + +> **Note**: Some properties are not available when receiving the test tree as a part of a test result coming from a standalone Player, such as `TypeInfo` and `Method`. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-result-adaptor.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-result-adaptor.md new file mode 100644 index 0000000..63280f6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-result-adaptor.md @@ -0,0 +1,25 @@ +# ITestResultAdaptor +The `ITestResultAdaptor` is the representation of the test results for a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITestResults.cs) interface. +## Properties + +| Syntax | Description | +| ---------- | ------------------------------------------------------------ | +| `ITestAdaptor Test` | The test details of the test result tree node as a [TestAdaptor](./reference-itest-adaptor.md). | +| `string Name` | The name of the test node. | +| `string FullName` | Gets the full name of the test result | +| `string ResultState` | The state of the result as a string. E.g., `Success`, `Skipped`, `Failure`, `Explicit`, `Cancelled`. | +| `TestStatus TestStatus` | The status of the test as an enum. Either `Inconclusive`, `Skipped`, `Passed`, or `Failed`. | +| `double Duration` | Gets the elapsed time for running the test in seconds. | +| `DateTime StartTime` | Gets or sets the time the test started running. | +| `DateTime EndTime` | Gets or sets the time the test finished running. | +| `string Message` | Gets the message associated with a test failure or with not running the test | +| `string StackTrace` | Gets any stack trace associated with an error or failure. Not available in the [Compact Framework](https://en.wikipedia.org/wiki/.NET_Compact_Framework) 1.0. | +| `int AssertCount` | Gets the number of asserts that ran during the test and all its children. | +| `int FailCount` | Gets the number of test cases that failed when running the test and all its children. | +| `int PassCount` | Gets the number of test cases that passed when running the test and all its children. | +| `int SkipCount` | Gets the number of test cases skipped when running the test and all its children. | +| `int InconclusiveCount` | Gets the number of test cases that were inconclusive when running the test and all its children. | +| `bool HasChildren` | Indicates whether this result has any child results. Accessing HasChildren should not force the creation of the Children collection in classes implementing this interface. | +| `IEnumerable Children` | Gets the collection of child results. | +| `string Output` | Gets any text output written to this result. | +| `TNode ToXml` | Gets the test results as an `NUnit` XML node. Use this to save the results to an XML file. | diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-run-settings.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-run-settings.md new file mode 100644 index 0000000..79c344b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-itest-run-settings.md @@ -0,0 +1,29 @@ +# ITestRunSettings +`ITestRunSettings` lets you set any of the global settings right before building a Player for a test run and then reverts the settings afterward. +`ITestRunSettings` implements [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable), and runs after building the Player with tests. + +## Public methods + +| Syntax | Description | +| ---------------- | ------------------------------------------------------------ | +| `void Apply()` | A method called before building the Player. | +| `void Dispose()` | A method called after building the Player or if the build failed. | + +## Example +The following example sets the iOS SDK version to be the simulator SDK and resets it to the original value after the run. +``` C# +public class MyTestSettings : ITestRunSettings +{ + private iOSSdkVersion originalSdkVersion; + public void Apply() + { + originalSdkVersion = PlayerSettings.iOS.sdkVersion; + PlayerSettings.iOS.sdkVersion = iOSSdkVersion.SimulatorSDK; + } + + public void Dispose() + { + PlayerSettings.iOS.sdkVersion = originalSdkVersion; + } +} +``` \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-recompile-scripts.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-recompile-scripts.md new file mode 100644 index 0000000..0fb8644 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-recompile-scripts.md @@ -0,0 +1,22 @@ +# RecompileScripts +`RecompileScripts` is an [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md) that you can yield in Edit Mode tests. It lets you trigger a recompilation of scripts in the Unity Editor. + +## Constructors + +| Syntax | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `RecompileScripts(bool expectScriptCompilation = true, bool expectScriptCompilationSuccess = true)` | Creates a new instance of the `RecompileScripts` yield instruction. The parameter `expectScriptCompilation` indicates if you expect a script compilation to start (defaults to true). If a script compilation does not start and `expectScriptCompilation` is `true`, then it throws an exception. | + +## Example +``` C@ +[UnitySetUp] +public IEnumerator SetUp() +{ + using (var file = File.CreateText("Assets/temp/myScript.cs")) + { + file.Write("public class ATempClass { }"); + } + AssetDatabase.Refresh(); + yield return new RecompileScripts(); +} +``` \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-setup-and-cleanup.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-setup-and-cleanup.md new file mode 100644 index 0000000..93e77a5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-setup-and-cleanup.md @@ -0,0 +1,91 @@ +# Setup and cleanup at build time + +In some cases, it is relevant to perform changes to Unity or the file system before building the tests. In the same way, it may be necessary to clean up such changes after the test run. In response to such needs, you can incorporate the pre-build setup and post-build cleanup concepts into your tests in one of the following ways: + +1. Via implementation of `IPrebuildSetup` and `IPostBuildCleanup` interfaces by a test class. +2. Via applying the `PrebuildSetup` attribute and `PostBuildCleanup` attribute on your test class, one of the tests or the test assembly, providing a class name that implements the corresponding interface as an argument (fx `[PrebuildSetup("MyTestSceneSetup")]`). + +## Execution order + +All setups run in a deterministic order one after another. The first to run are the setups defined with attributes. Then any test class implementing the interface runs, in alphabetical order inside their namespace, which is the same order as the tests run. + +> **Note**: Cleanup runs right away for a standalone test run, but only after related tests run in the Unity Editor. + +## PrebuildSetup and PostBuildCleanup + +Both `PrebuildSetup` and `PostBuildCleanup` attributes run if the respective test or test class is in the current test run. The test is included either by running all tests or setting a [filter](./workflow-create-test.md#filters) that includes the test. If multiple tests reference the same pre-built setup or post-build cleanup, then it only runs once. + +## IPrebuildSetup + +Implement this interface if you want to define a set of actions to run as a pre-build step. + +### Public methods + +| Syntax | Description | +| -------------- | ------------------------------------------------------------ | +| `void Setup()` | Implement this method to call actions automatically before the build process. | + +## IPostBuildCleanup + +Implement this interface if you want to define a set of actions to execute as a post-build step. Cleanup runs right away for a standalone test run, but only after all the tests run within the Editor. + +### Public methods + +| Syntax | Description | +| ---------------- | ------------------------------------------------------------ | +| `void Cleanup()` | Implement this method to specify actions that should run as a post-build cleanup step. | + +## Example + +```c# +[TestFixture] +public class CreateSpriteTest : IPrebuildSetup +{ + Texture2D m_Texture; + Sprite m_Sprite; + + public void Setup() + { + +#if UNITY_EDITOR + + var spritePath = "Assets/Resources/Circle.png"; + + var ti = UnityEditor.AssetImporter.GetAtPath(spritePath) as UnityEditor.TextureImporter; + + ti.textureCompression = UnityEditor.TextureImporterCompression.Uncompressed; + + ti.SaveAndReimport(); + +#endif + } + + [SetUp] + public void SetUpTest() + { + m_Texture = Resources.Load("Circle"); + } + + [Test] + public void WhenNullTextureIsPassed_CreateShouldReturnNullSprite() + { + + // Check with Valid Texture. + + LogAssert.Expect(LogType.Log, "Circle Sprite Created"); + + Sprite.Create(m_Texture, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f)); + + Debug.Log("Circle Sprite Created"); + + // Check with NULL Texture. Should return NULL Sprite. + + m_Sprite = Sprite.Create(null, new Rect(0, 0, m_Texture.width, m_Texture.heig`t), new Vector2(0.5f, 0.5f)); + + Assert.That(m_Sprite, Is.Null, "Sprite created with null texture should be null"); + + } +} +``` + +> **Tip**: Use `#if UNITY_EDITOR` if you want to access Editor only APIs, but the setup/cleanup is inside a **Play Mode** assembly. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-test-runner-api.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-test-runner-api.md new file mode 100644 index 0000000..b594f7e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-test-runner-api.md @@ -0,0 +1,23 @@ +# TestRunnerApi +The `TestRunnerApi` retrieves and runs tests programmatically from code inside the project, or inside other packages. `TestRunnerApi` is a [ScriptableObject](https://docs.unity3d.com/ScriptReference/ScriptableObject.html). + +You can initialize the API like this: + +```c# +var testRunnerApi = ScriptableObject.CreateInstance(); +``` +> **Note**: You can subscribe and receive test results in one instance of the API, even if the run starts from another instance. + +The `TestRunnerApi` supports the following workflows: +* [How to run tests programmatically](./extension-run-tests.md) +* [How to get test results](./extension-get-test-results.md) +* [How to retrieve the list of tests](./extension-retrieve-test-list.md) + +## Public methods + +| Syntax | Description | +| ------------------------------------------ | ------------------------------------------------------------ | +| `void Execute(ExecutionSettings executionSettings)` | Starts a test run with a given set of [ExecutionSettings](./reference-execution-settings.md). | +| `void RegisterCallbacks(ICallbacks testCallbacks, int priority = 0)` | Sets up a given instance of [ICallbacks](./reference-icallbacks.md) to be invoked on test runs. | +| `void UnregisterCallbacks(ICallbacks testCallbacks)` | Unregisters an instance of ICallbacks to no longer receive callbacks from test runs. | +| `void RetrieveTestList(TestMode testMode, Action callback)` | Retrieve the full test tree as [ITestAdaptor](./reference-itest-adaptor.md) for a given test mode. | \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-test-utils.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-test-utils.md new file mode 100644 index 0000000..24d4eec --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-test-utils.md @@ -0,0 +1,40 @@ +# Test Utils + +This contains test utility functions for float value comparison and creating primitives. + +## Static Methods + +| Syntax | Description | +| ------------------------------------------------------------ | ------------------------------------------------------------ | +| `bool AreFloatsEqual(float expected, float actual, float allowedRelativeError)` | Relative epsilon comparison of two float values for equality. `allowedRelativeError` is the relative error to be used in relative epsilon comparison. The relative error is the absolute error divided by the magnitude of the exact value. Returns `true` if the actual value is equivalent to the expected value. | +| `bool AreFloatsEqualAbsoluteError(float expected, float actual, float allowedAbsoluteError)` | Compares two floating point numbers for equality under the given absolute tolerance. `allowedAbsoluteError` is the permitted error tolerance. Returns `true` if the actual value is equivalent to the expected value under the given tolerance. | +| `GameObject CreatePrimitive( type)` | Creates a [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html) with a primitive [MeshRenderer](https://docs.unity3d.com/ScriptReference/MeshRenderer.html). This is an analogue to the [GameObject.CreatePrimitive](https://docs.unity3d.com/ScriptReference/GameObject.CreatePrimitive.html), but creates a primitive `MeshRenderer` with a fast [Shader](https://docs.unity3d.com/ScriptReference/Shader.html) instead of the default built-in `Shader`, optimized for testing performance. `type` is the [primitive type](https://docs.unity3d.com/ScriptReference/PrimitiveType.html) of the required `GameObject`. Returns a `GameObject` with primitive `MeshRenderer` and [Collider](https://docs.unity3d.com/ScriptReference/Collider.html). | + +## Example + +```c# +[TestFixture] +class UtilsTests +{ + [Test] + public void CheckThat_FloatsAreEqual() + { + float expected = 10e-8f; + float actual = 0f; + float allowedRelativeError = 10e-6f; + + Assert.That(Utils.AreFloatsEqual(expected, actual, allowedRelativeError), Is.True); + } + + [Test] + public void CheckThat_FloatsAreAbsoluteEqual() + { + float expected = 0f; + float actual = 10e-6f; + float error = 10e-5f; + + Assert.That(Utils.AreFloatsEqualAbsoluteError(expected, actual, error), Is.True); + } +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-tests-monobehaviour.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-tests-monobehaviour.md new file mode 100644 index 0000000..6409333 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-tests-monobehaviour.md @@ -0,0 +1,51 @@ +# MonoBehaviour tests + +`MonoBehaviourTest` is a [coroutine](https://docs.unity3d.com/ScriptReference/Coroutine.html) and a helper for writing [MonoBehaviour](https://docs.unity3d.com/ScriptReference/MonoBehaviour.html) tests. + +Yield a `MonoBehaviourTest` when using the `UnityTest` attribute to instantiate the `MonoBehaviour` you wish to test and wait for it to finish running. Implement the `IMonoBehaviourTest` interface on the `MonoBehaviour` to state when the test completes. + +## Example + +```c# +[UnityTest] +public IEnumerator MonoBehaviourTest_Works() +{ + yield return new MonoBehaviourTest(); +} + +public class MyMonoBehaviourTest : MonoBehaviour, IMonoBehaviourTest +{ + private int frameCount; + public bool IsTestFinished + { + get { return frameCount > 10; } + } + + void Update() + { + frameCount++; + } +} +``` + +## MonoBehaviourTest<T> + +This is a wrapper that allows running tests on `MonoBehaviour` scripts. Inherits from [CustomYieldInstruction](https://docs.unity3d.com/ScriptReference/CustomYieldInstruction.html). + +### Properties + +| Syntax | Description | +| ----------------------- | ------------------------------------------------------------ | +| `T component` | A `MonoBehaviour` component created for the test and attached to the test’s [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html). | +| `GameObject gameObject` | A `GameObject` created as a container for the test component. | +| `bool keepWaiting` | (Inherited) Returns `true` if the test is not finished yet, which keeps the coroutine suspended. | + +## IMonoBehaviourTest + +An interface implemented by a `MonoBehaviour` test. + +### Properties + +| Syntax | Description | +| --------------------- | ----------------------------------------------- | +| `bool IsTestFinished` | Indicates when the test is considered finished. | \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-tests-parameterized.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-tests-parameterized.md new file mode 100644 index 0000000..6182bad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-tests-parameterized.md @@ -0,0 +1,18 @@ +# Parameterized tests + +For data-driven testing, you may want to have your tests parameterized. You may use both the [NUnit](http://www.nunit.org/) attributes [TestCase](https://github.com/nunit/docs/wiki/TestCase-Attribute) and [ValueSource](https://github.com/nunit/docs/wiki/ValueSource-Attribute) with a unit test. + +> **Note**: With `UnityTest` it is recommended to use `ValueSource` since `TestCase` is not supported. + +## Example + +```c# +static int[] values = new int[] { 1, 5, 6 }; + +[UnityTest] +public IEnumerator MyTestWithMultipleValues([ValueSource("values")] int value) +{ + yield return null; +} +``` + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-wait-for-domain-reload.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-wait-for-domain-reload.md new file mode 100644 index 0000000..8d42e70 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/reference-wait-for-domain-reload.md @@ -0,0 +1,19 @@ +# WaitForDomainReload +`WaitForDomainReload` is an [IEditModeTestYieldInstruction](./reference-custom-yield-instructions.md) that you can yield in Edit Mode tests. It delays the execution of scripts until after an incoming domain reload. If the domain reload results in a script compilation failure, then it throws an exception. + +## Constructors + +| Syntax | Description | +| ---------------------------- | ------------------------------------------------------------ | +| `WaitForDomainReload()` | Create a new instance of the `WaitForDomainReload` yield instruction. | + +## Example +``` C@ +[UnitySetUp] +public IEnumerator SetUp() +{ + File.Copy("Resources/MyDll.dll", @"Assets/MyDll.dll", true); // Trigger a domain reload. + AssetDatabase.Refresh(); + yield return new WaitForDomainReload(); +} +``` \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/resources.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/resources.md new file mode 100644 index 0000000..ce261e9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/resources.md @@ -0,0 +1,6 @@ +# Resources + +Here you can find other related resources to the Unity Test Framework: + +* [Performance Benchmarking in Unity: How to Get Started](https://blogs.unity3d.com/2018/09/25/performance-benchmarking-in-unity-how-to-get-started/) [Blog] +* [Testing Test-Driven Development with the Unity Test Runner](https://blogs.unity3d.com/2018/11/02/testing-test-driven-development-with-the-unity-test-runner/) [Blog] \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-playmode-test.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-playmode-test.md new file mode 100644 index 0000000..a21b619 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-playmode-test.md @@ -0,0 +1,28 @@ +# Workflow: How to create a Play Mode test + +To create a **Play Mode** test, you can follow a similar process as when you want to create an **Edit Mode** test. + +1. Start with switching to the **PlayMode** tab in the **Test Runner** window. +2. Create a test assembly folder (see [How to create a new test assembly)](./workflow-create-test-assembly.md). The folder name is *Tests* by default (or *Tests 1*, *Tests 2*, etc. if the preceding name is already in use). + +![PlayMode tab](./images/playmode-tab.png) + +> **Note**: If you don’t see the **Create Play Mode Test Assembly Folder** button enabled, make sure that in the Project window you navigate out of a folder with another .asmdef (such as one for Edit Mode tests). + +3. When you have your Play Mode test assembly folder ready, then [create your Play Mode test](./workflow-create-test.md). + +> **Note**: [Pre-defined Unity assemblies](https://docs.unity3d.com/Manual/ScriptCompileOrderFolders.html) (such as _Assembly-CSharp.dll_) do not reference your new assembly. + +## References and builds + +Unity Test Framework adds a reference to `TestAssemblies` in the [Assembly Definition](https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html) file, but it won't include any other references (e.g., to other scripting assemblies within the Unity project). So you need to add other assemblies yourself if you want to test them too. + +Unity does not include `TestAssemblies` in Player builds, but in the Test Runner window, we have such an option. If you need to test code in pre-defined assemblies, you can reference `TestAssemblies` from other assemblies. You must remove these tests after the test run so that Unity does not add them to the final Player build. + +To do this, in the Test Runner window choose **Enable playmode tests for all assemblies** option from the drop-down menu (to expand, click on the small list item in the top right corner). In the dialog box, click **OK** to manually restart the Editor. + +![Enable Play Mode tests for all assemblies](./images/playmode-enable-all.png) + +> **Note**: **Enabling Play Mode tests for all assemblies** includes additional assemblies in your project build, which can increase the project’s size as well as the build time. + +For more information, see [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md). \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-test-assembly.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-test-assembly.md new file mode 100644 index 0000000..eb35896 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-test-assembly.md @@ -0,0 +1,17 @@ +# Workflow: **How to create a new test assembly** + +Unity Test Framework looks for a test inside any assembly that references [NUnit](http://www.nunit.org/). We refer to such assemblies as `TestAssemblies`. The [Test Runner](./getting-started.md) UI can help you set up `TestAssemblies`. **Play Mode** and **Edit Mode** tests need to be in separate assemblies. + +In the **Test Runner** window, you will see an **EditMode** tab enabled by default, as well as a **Create EditMode Test Assembly Folder** button. + +![Test Runner window EditMode tab](./images/editmode-tab.png) + +Click the button to create a *Tests* folder with a respective .asmdef file by default. Change the name of the new [Assembly Definition](https://docs.unity3d.com/Manual/ScriptCompilationAssemblyDefinitionFiles.html), if necessary, and press Enter to accept it. + +![New Test folder and assembly file](./images/tests-folder-assembly.png) + +In the Inspector window, it should have references to **nunit.framework.dll***,* **UnityEngine.TestRunner,** and **UnityEditor.TestRunner** assemblies, as well as **Editor** preselected as a target platform. + +> **Note**: The **UnityEditor.TestRunner** reference is only available for [Edit Mode tests](./edit-mode-vs-play-mode-tests.md#edit-mode-tests). + +![Assembly definition import settings](./images/import-settings.png) diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-test.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-test.md new file mode 100644 index 0000000..612106e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-create-test.md @@ -0,0 +1,36 @@ +# Workflow: How to create a test + +To create a test, do the following: + +1. Create your *Test* [assembly folder](./workflow-create-test-assembly.md) and select it in the **Project** window. +2. Click the button **Create Test Script in current folder** option in the **Test Runner** window. + +![EditMode create test script](./images/editmode-create-test-script.png) + +3. It creates a *NewTestScript.cs* file in the *Tests* folder. Change the name of the script, if necessary, and press Enter to accept it. + +![NewTestScript.cs](./images/new-test-script.png) + +Now you’ll see two sample tests in the Test Runner window: + +![Test templates](./images/test-templates.png) + +Now you can open the tests in your favorite script editor. + +You can also create test scripts by navigating to **Assets** > **Create > Testing** > **C# Test Script**, unless adding a test script would result in a compilation error. + +> **Note**: Unity does not include `TestAssemblies` ([NUnit](http://www.nunit.org/), Unity Test Framework, and user script assemblies) when using the normal build pipeline, but does include them when using **Run on <Platform>** in the Test Runner window. + +## Filters + +If you have a lot of tests, and you only want to view/run a sub-set of them, you can filter them in three ways (see image above): + +* Type in the search box in the top left + +* Click a test class or fixture (such as **NewTestScript** in the image above) + +* Click one of the test result icon buttons in the top right + + + +For more information, see [Edit Mode vs. Play Mode tests](./edit-mode-vs-play-mode-tests.md). diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-run-playmode-test-standalone.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-run-playmode-test-standalone.md new file mode 100644 index 0000000..0a2fa81 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-run-playmode-test-standalone.md @@ -0,0 +1,21 @@ +# Workflow: How to run a Play Mode test in player + +If you run a **Play Mode** test in the same way as an [Editor test](./workflow-run-test.md), it runs inside the Unity Editor. You can also run Play Mode tests on specific platforms. Click **Run all in the player** to build and run your tests on the currently active target platform. + +![Run PlayMode test in player](./images/playmode-run-standalone.png) + +> **Note**: Your current platform displays in brackets on the button. For example, in the image above, the button reads **Run all in player (StandaloneWindows)**, because the current platform is Windows. The target platform is always the current Platform selected in [Build Settings](https://docs.unity3d.com/Manual/BuildSettings.html) (menu: **File** > **Build Settings**). + +The test result displays in the build once the test completes: + +![Results of PlayMode in player test run](./images/playmode-results-standalone.png) + +The application running on the platform reports back the test results to the Editor UI then displays the executed tests and shuts down. To make sure you receive the test results from the Player on your target platform back into the Editor that’s running the test, both should be on the same network. + +> **Note:** Some platforms do not support shutting down the application with `Application.Quit`, so it will continue running after reporting the test results. + +If Unity cannot instantiate the connection, you can see the tests succeed in the running application. Running tests on platforms with arguments, in this state, does not provide XML test results. + + + +For more information, see [Edit Mode vs Play Mode tests](./edit-mode-vs-play-mode-tests.md). \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-run-test.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-run-test.md new file mode 100644 index 0000000..506194b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/Documentation~/workflow-run-test.md @@ -0,0 +1,19 @@ +# Workflow: How to run a test + +To run a test, you need to double-click on the test or test fixture name in the **Test Runner** window. + +You can also use one of the buttons on the top bar, **Run All** or **Run Selected**. As a result, you’ll see the test status icon changed and a counter in the top right corner updated: + +![EditMode Run Test](./images/editmode-run-test.png) + +You may also use a context menu option **Run**, right-click on any item in the test tree to have it (with all its children if any) run. + +![EditMode Run Tests](./images/editmode-run-tests.png) + + + +## Run tests within Rider + +It is possible to run unit tests in the Unity Test Framework directly from [JetBrains Rider](https://www.jetbrains.com/rider/). + +For more information, see the [JetBrains official documentation](https://www.jetbrains.com/help/rider/Running_and_Debugging_Unity_Tests.html) and their blog post [Run Unity tests in Rider 2018.1](https://blog.jetbrains.com/dotnet/2018/04/18/run-unity-tests-rider-2018-1/). \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/LICENSE.md b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/LICENSE.md new file mode 100644 index 0000000..e6a38bf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/LICENSE.md @@ -0,0 +1,5 @@ +Test Framework copyright © 2020 Unity Technologies ApS + +Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License). + +Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions. diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/LICENSE.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/LICENSE.md.meta new file mode 100644 index 0000000..f6a2ca2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3ec7596410385054a9e0bc90377fbe63 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner.meta new file mode 100644 index 0000000..d1eb573 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95cdf27b47eb82747ba9e51f41e72a35 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api.meta new file mode 100644 index 0000000..2ffb8f9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fa423365b1ce06a4dbdc6fb4a8597bfa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegator.cs new file mode 100644 index 0000000..91f2d4c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegator.cs @@ -0,0 +1,136 @@ +using System; +using System.Linq; +using System.Text; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class CallbacksDelegator : ICallbacksDelegator + { + private static CallbacksDelegator s_instance; + public static CallbacksDelegator instance + { + get + { + if (s_instance == null) + { + s_instance = new CallbacksDelegator(CallbacksHolder.instance.GetAll, new TestAdaptorFactory()); + } + return s_instance; + } + } + + private readonly Func m_CallbacksProvider; + private readonly ITestAdaptorFactory m_AdaptorFactory; + + public CallbacksDelegator(Func callbacksProvider, ITestAdaptorFactory adaptorFactory) + { + m_CallbacksProvider = callbacksProvider; + m_AdaptorFactory = adaptorFactory; + } + + public void RunStarted(ITest testsToRun) + { + m_AdaptorFactory.ClearResultsCache(); + var testRunnerTestsToRun = m_AdaptorFactory.Create(testsToRun); + TryInvokeAllCallbacks(callbacks => callbacks.RunStarted(testRunnerTestsToRun)); + } + + public void RunStartedRemotely(byte[] testsToRunData) + { + var testData = Deserialize(testsToRunData); + var testsToRun = m_AdaptorFactory.BuildTree(testData); + TryInvokeAllCallbacks(callbacks => callbacks.RunStarted(testsToRun)); + } + + public void RunFinished(ITestResult testResults) + { + var testResult = m_AdaptorFactory.Create(testResults); + TryInvokeAllCallbacks(callbacks => callbacks.RunFinished(testResult)); + } + + public void RunFinishedRemotely(byte[] testResultsData) + { + var remoteTestResult = Deserialize(testResultsData); + var testResult = m_AdaptorFactory.Create(remoteTestResult.results.First(), remoteTestResult); + TryInvokeAllCallbacks(callbacks => callbacks.RunFinished(testResult)); + } + + public void RunFailed(string failureMessage) + { + Debug.LogError(failureMessage); + TryInvokeAllCallbacks(callbacks => + { + var errorCallback = callbacks as IErrorCallbacks; + if (errorCallback != null) + { + errorCallback.OnError(failureMessage); + } + }); + } + + public void TestStarted(ITest test) + { + var testRunnerTest = m_AdaptorFactory.Create(test); + TryInvokeAllCallbacks(callbacks => callbacks.TestStarted(testRunnerTest)); + } + + public void TestStartedRemotely(byte[] testStartedData) + { + var testData = Deserialize(testStartedData); + var testsToRun = m_AdaptorFactory.BuildTree(testData); + + TryInvokeAllCallbacks(callbacks => callbacks.TestStarted(testsToRun)); + } + + public void TestFinished(ITestResult result) + { + var testResult = m_AdaptorFactory.Create(result); + TryInvokeAllCallbacks(callbacks => callbacks.TestFinished(testResult)); + } + + public void TestFinishedRemotely(byte[] testResultsData) + { + var remoteTestResult = Deserialize(testResultsData); + var testResult = m_AdaptorFactory.Create(remoteTestResult.results.First(), remoteTestResult); + TryInvokeAllCallbacks(callbacks => callbacks.TestFinished(testResult)); + } + + public void TestTreeRebuild(ITest test) + { + m_AdaptorFactory.ClearTestsCache(); + var testAdaptor = m_AdaptorFactory.Create(test); + TryInvokeAllCallbacks(callbacks => + { + var rebuildCallbacks = callbacks as ITestTreeRebuildCallbacks; + if (rebuildCallbacks != null) + { + rebuildCallbacks.TestTreeRebuild(testAdaptor); + } + }); + } + + private void TryInvokeAllCallbacks(Action callbackAction) + { + foreach (var testRunnerApiCallback in m_CallbacksProvider()) + { + try + { + callbackAction(testRunnerApiCallback); + } + catch (Exception ex) + { + Debug.LogException(ex); + } + } + } + + private static T Deserialize(byte[] data) + { + return JsonUtility.FromJson(Encoding.UTF8.GetString(data)); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta new file mode 100644 index 0000000..89e0904 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0de03ebd74e2b474fa23d05ab42d0cd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs new file mode 100644 index 0000000..c19621d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs @@ -0,0 +1,28 @@ +using UnityEngine; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class CallbacksDelegatorListener : ScriptableObject, ITestRunnerListener + { + public void RunStarted(NUnit.Framework.Interfaces.ITest testsToRun) + { + CallbacksDelegator.instance.RunStarted(testsToRun); + } + + public void RunFinished(NUnit.Framework.Interfaces.ITestResult testResults) + { + CallbacksDelegator.instance.RunFinished(testResults); + } + + public void TestStarted(NUnit.Framework.Interfaces.ITest test) + { + CallbacksDelegator.instance.TestStarted(test); + } + + public void TestFinished(NUnit.Framework.Interfaces.ITestResult result) + { + CallbacksDelegator.instance.TestFinished(result); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta new file mode 100644 index 0000000..c9bb94a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksDelegatorListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3e1b3cbf3fac6a459b1a602167ad311 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksHolder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksHolder.cs new file mode 100644 index 0000000..5df378d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksHolder.cs @@ -0,0 +1,69 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class CallbacksHolder : ScriptableSingleton, ICallbacksHolder + { + private List m_Callbacks = new List(); + public void Add(ICallbacks callback, int priority) + { + m_Callbacks.Add(new CallbackWithPriority(callback, priority)); + } + + public void Remove(ICallbacks callback) + { + m_Callbacks.RemoveAll(callbackWithPriority => callbackWithPriority.Callback == callback); + } + + public ICallbacks[] GetAll() + { + return m_Callbacks.OrderByDescending(callback => callback.Priority).Select(callback => callback.Callback).ToArray(); + } + + public void Clear() + { + m_Callbacks.Clear(); + } + + private struct CallbackWithPriority + { + public ICallbacks Callback; + public int Priority; + public CallbackWithPriority(ICallbacks callback, int priority) + { + Callback = callback; + Priority = priority; + } + } + + // Sometimes - such as when we want to test the test framework itself - it's necessary to launch a test run from + // inside a test. Because callbacks are registered globally, this can cause a lot of confusion (e.g. the in-test + // run will emit UTP messages, utterly confusing UTR). In such circumstances the safest thing to do is to + // temporarily suppress all registered callbacks for the duration of the in-test run. This method can be called + // to set up a using() block which will suppress the callbacks for the scope. + public IDisposable TemporarilySuppressCallbacks() + { + return new Suppressor(this); + } + + private sealed class Suppressor : IDisposable + { + private readonly CallbacksHolder _instance; + private readonly List _suppressed; + + public Suppressor(CallbacksHolder instance) + { + _instance = instance; + _suppressed = new List(instance.m_Callbacks); + instance.m_Callbacks.Clear(); + } + + public void Dispose() + { + _instance.m_Callbacks.AddRange(_suppressed); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta new file mode 100644 index 0000000..7c42028 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/CallbacksHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4884ccc3528cb2e40a0e6f0a19a2b35b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ExecutionSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ExecutionSettings.cs new file mode 100644 index 0000000..283b972 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ExecutionSettings.cs @@ -0,0 +1,75 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// A set of execution settings defining how to run tests, using the . + /// + [Serializable] + public class ExecutionSettings + { + /// + /// Creates an instance with a given set of filters, if any. + /// + /// Set of filters + public ExecutionSettings(params Filter[] filtersToExecute) + { + filters = filtersToExecute; + } + + [SerializeField] + internal BuildTarget? targetPlatform; + + /// + /// An instance of to set up before running tests on a Player. + /// + // Note: Is not available after serialization + public ITestRunSettings overloadTestRunSettings; + + [SerializeField] + internal Filter filter; + ///A collection of to execute tests on. + [SerializeField] + public Filter[] filters; + /// + /// Note that this is only supported for EditMode tests, and that tests which take multiple frames (i.e. [UnityTest] tests, or tests with [UnitySetUp] or [UnityTearDown] scaffolding) will be filtered out. + /// + /// If true, the call to Execute() will run tests synchronously, guaranteeing that all tests have finished running by the time the call returns. + [SerializeField] + public bool runSynchronously; + /// + /// The time, in seconds, the editor should wait for heartbeats after starting a test run on a player. This defaults to 10 minutes. + /// + [SerializeField] + public int playerHeartbeatTimeout = 60*10; + + internal bool EditModeIncluded() + { + return filters.Any(f => IncludesTestMode(f.testMode, TestMode.EditMode)); + } + + internal bool PlayModeInEditorIncluded() + { + return filters.Any(f => IncludesTestMode(f.testMode, TestMode.PlayMode) && targetPlatform == null); + } + + internal bool PlayerIncluded() + { + return filters.Any(f => IncludesTestMode(f.testMode, TestMode.PlayMode) && targetPlatform != null); + } + + private static bool IncludesTestMode(TestMode testMode, TestMode modeToCheckFor) + { + return (testMode & modeToCheckFor) == modeToCheckFor; + } + + internal ITestFilter BuildNUnitFilter() + { + return new OrFilter(filters.Select(f => f.ToRuntimeTestRunnerFilter(runSynchronously).BuildNUnitFilter()).ToArray()); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta new file mode 100644 index 0000000..602a117 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ExecutionSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eea34a28297f9bc4c9f4c573bc8d5d1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/Filter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/Filter.cs new file mode 100644 index 0000000..5961b37 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/Filter.cs @@ -0,0 +1,56 @@ +using System; +using UnityEngine; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// The filter class provides the with a specification of what tests to run when [running tests programmatically](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-run-tests.html). + /// + [Serializable] + public class Filter + { + /// + /// An enum flag that specifies if Edit Mode or Play Mode tests should run. + /// + [SerializeField] + public TestMode testMode; + /// + /// The full name of the tests to match the filter. This is usually in the format FixtureName.TestName. If the test has test arguments, then include them in parenthesis. E.g. MyTestClass2.MyTestWithMultipleValues(1). + /// + [SerializeField] + public string[] testNames; + /// + /// The same as testNames, except that it allows for Regex. This is useful for running specific fixtures or namespaces. E.g. "^MyNamespace\\." Runs any tests where the top namespace is MyNamespace. + /// + [SerializeField] + public string[] groupNames; + /// + /// The name of a [Category](https://nunit.org/docs/2.2.7/category.html) to include in the run. Any test or fixtures runs that have a Category matching the string. + /// + [SerializeField] + public string[] categoryNames; + /// + /// The name of assemblies included in the run. That is the assembly name, without the .dll file extension. E.g., MyTestAssembly + /// + [SerializeField] + public string[] assemblyNames; + /// + /// The platform to run the test on. If set to null, then the Editor is the target for the tests. + /// + [SerializeField] + public BuildTarget? targetPlatform; + + internal RuntimeTestRunnerFilter ToRuntimeTestRunnerFilter(bool synchronousOnly) + { + return new RuntimeTestRunnerFilter() + { + testNames = testNames, + categoryNames = categoryNames, + groupNames = groupNames, + assemblyNames = assemblyNames, + synchronousOnly = synchronousOnly + }; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/Filter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/Filter.cs.meta new file mode 100644 index 0000000..bbb21b5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/Filter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05f92e4a2414cb144a92157752dfa324 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacks.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacks.cs new file mode 100644 index 0000000..b045a39 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacks.cs @@ -0,0 +1,29 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// Callbacks in the for the test stages when running tests. + /// + public interface ICallbacks + { + /// + /// A callback invoked when a test run is started. + /// + /// The full loaded test tree. + void RunStarted(ITestAdaptor testsToRun); + /// + /// A callback invoked when a test run is finished. + /// + /// The result of the test run. + void RunFinished(ITestResultAdaptor result); + /// + /// A callback invoked when each individual node of the test tree has started executing. + /// + /// The test node currently executed. + void TestStarted(ITestAdaptor test); + /// + /// A callback invoked when each individual node of the test tree has finished executing. + /// + /// The result of the test tree node after it had been executed. + void TestFinished(ITestResultAdaptor result); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacks.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacks.cs.meta new file mode 100644 index 0000000..851e3f6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93eea84e53d0226479c9a584f19427b5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs new file mode 100644 index 0000000..9005c46 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs @@ -0,0 +1,18 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ICallbacksDelegator + { + void RunStarted(ITest testsToRun); + void RunStartedRemotely(byte[] testsToRunData); + void RunFinished(ITestResult testResults); + void RunFinishedRemotely(byte[] testResultsData); + void RunFailed(string failureMessage); + void TestStarted(ITest test); + void TestStartedRemotely(byte[] testStartedData); + void TestFinished(ITestResult result); + void TestFinishedRemotely(byte[] testResultsData); + void TestTreeRebuild(ITest test); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta new file mode 100644 index 0000000..fb26459 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8f8f74fe8e363da42875d9cab025d3b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksHolder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksHolder.cs new file mode 100644 index 0000000..ff7128b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksHolder.cs @@ -0,0 +1,10 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ICallbacksHolder + { + void Add(ICallbacks callback, int priority); + void Remove(ICallbacks callback); + ICallbacks[] GetAll(); + void Clear(); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta new file mode 100644 index 0000000..7f11d80 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ICallbacksHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d742f2caefd9f934d9f19dad07a08e6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/IErrorCallbacks.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/IErrorCallbacks.cs new file mode 100644 index 0000000..d56382f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/IErrorCallbacks.cs @@ -0,0 +1,11 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// An extended version of the , which get invoked if the test run fails due to a build error or if any has a failure. + /// The error message detailing the reason for the run to fail. + void OnError(string message); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta new file mode 100644 index 0000000..34728c6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/IErrorCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a06c562b0c5eb046bcb876a29f93c98 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptor.cs new file mode 100644 index 0000000..3837a7d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptor.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// ```ITestAdaptor``` is a representation of a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITest.cs) interface. + /// + public interface ITestAdaptor + { + /// The ID of the test tree node. The ID can change if you add new tests to the suite. Use UniqueName, if you want to have a more permanent point of reference. + string Id { get; } + /// The name of the test. E.g.,```MyTest```. + string Name { get; } + /// The full name of the test. E.g., ```MyNamespace.MyTestClass.MyTest```. + string FullName { get; } + /// The total number of test cases in the node and all sub-nodes. + int TestCaseCount { get; } + /// Whether the node has any children. + bool HasChildren { get; } + /// True if the node is a test suite/fixture, false otherwise. + bool IsSuite { get; } + /// The child nodes. + IEnumerable Children { get; } + /// The parent node, if any. + ITestAdaptor Parent { get; } + /// The test case timeout in milliseconds. Note that this value is only available on TestFinished. + int TestCaseTimeout { get; } + /// The type of test class as an ```NUnit``` . If the node is not a test class, then the value is null. + ITypeInfo TypeInfo { get; } + /// The Nunit of the test method. If the node is not a test method, then the value is null. + IMethodInfo Method { get; } + /// An array of the categories applied to the test or fixture. + string[] Categories { get; } + /// Returns true if the node represents a test assembly, false otherwise. + bool IsTestAssembly { get; } + /// The run state of the test node. Either ```NotRunnable```, ```Runnable```, ```Explicit```, ```Skipped```, or ```Ignored```. + RunState RunState { get; } + /// The description of the test. + string Description { get; } + /// The skip reason. E.g., if ignoring the test. + string SkipReason { get; } + /// The ID of the parent node. + string ParentId { get; } + /// The full name of the parent node. + string ParentFullName { get; } + /// A unique generated name for the test node. E.g., ```Tests.dll/MyNamespace/MyTestClass/[Tests][MyNamespace.MyTestClass.MyTest]```. + string UniqueName { get; } + /// A unique name of the parent node. E.g., ```Tests.dll/MyNamespace/[Tests][MyNamespace.MyTestClass][suite]```. + string ParentUniqueName { get; } + /// The child index of the node in its parent. + int ChildIndex { get; } + /// The mode of the test. Either **Edit Mode** or **Play Mode**. + TestMode TestMode { get; } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta new file mode 100644 index 0000000..2ae45af --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85dd7af03f02aea4aae13a3945e3b313 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs new file mode 100644 index 0000000..021b313 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ITestAdaptorFactory + { + ITestAdaptor Create(ITest test); + ITestAdaptor Create(RemoteTestData testData); + ITestResultAdaptor Create(ITestResult testResult); + ITestResultAdaptor Create(RemoteTestResultData testResult, RemoteTestResultDataWithTestData allData); + ITestAdaptor BuildTree(RemoteTestResultDataWithTestData data); + IEnumerator BuildTreeAsync(RemoteTestResultDataWithTestData data); + void ClearResultsCache(); + void ClearTestsCache(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta new file mode 100644 index 0000000..05dadba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestAdaptorFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 803abab0f7e17044db56f8760186dbd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs new file mode 100644 index 0000000..4cfb7df --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// The `ITestResultAdaptor` is the representation of the test results for a node in the test tree implemented as a wrapper around the [NUnit](http://www.nunit.org/) [ITest](https://github.com/nunit/nunit/blob/master/src/NUnitFramework/framework/Interfaces/ITestResults.cs) interface. + /// + public interface ITestResultAdaptor + { + /// The test details of the test result tree node as a + ITestAdaptor Test { get; } + ///The name of the test node. + string Name { get; } + /// Gets the full name of the test result + /// The name of the test result. + string FullName { get; } + ///Gets the state of the result as a string. + /// It returns one of these values: `Success`, `Skipped`, `Failure`, `Explicit`, `Cancelled` + string ResultState { get; } + ///Gets the status of the test as an enum. + ///It returns one of these values:`Inconclusive`, `Skipped`, `Passed`, or `Failed` + TestStatus TestStatus { get; } + /// Gets the elapsed time for running the test in seconds + /// Time in seconds. + double Duration { get; } + /// Gets or sets the time the test started running. + /// A DataTime object. + DateTime StartTime { get; } + ///Gets or sets the time the test finished running. + /// A DataTime object. + DateTime EndTime { get; } + + /// + /// The message associated with a test + /// failure or with not running the test + /// + string Message { get; } + + /// + /// Any stacktrace associated with an + /// error or failure. Not available in + /// the Compact Framework 1.0. + /// + string StackTrace { get; } + + /// + /// The number of asserts executed + /// when running the test and all its children. + /// + int AssertCount { get; } + + /// + /// The number of test cases that failed + /// when running the test and all its children. + /// + int FailCount { get; } + + /// + /// The number of test cases that passed + /// when running the test and all its children. + /// + int PassCount { get; } + + /// + /// The number of test cases that were skipped + /// when running the test and all its children. + /// + int SkipCount { get; } + + /// + ///The number of test cases that were inconclusive + /// when running the test and all its children. + /// + int InconclusiveCount { get; } + + /// + /// Accessing HasChildren should not force creation of the + /// Children collection in classes implementing this interface. + /// + /// True if this result has any child results. + bool HasChildren { get; } + + /// Gets the the collection of child results. + IEnumerable Children { get; } + + /// Gets any text output written to this result. + string Output { get; } + /// + /// Use this to save the results to an XML file + /// + /// The test results as an `NUnit` XML node. + TNode ToXml(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta new file mode 100644 index 0000000..5ea944f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestResultAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f90cfe4bf5cfb44f84a5b11387f2a42 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunSettings.cs new file mode 100644 index 0000000..0dab931 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunSettings.cs @@ -0,0 +1,16 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// ITestRunSettings lets you set any of the global settings right before building a Player for a test run and then reverts the settings afterward. ITestRunSettings implements + /// [IDisposable](https://docs.microsoft.com/en-us/dotnet/api/system.idisposable?view=netframework-4.8), and runs after building the Player with tests. + /// + public interface ITestRunSettings : IDisposable + { + /// + /// A method called before building the Player. + /// + void Apply(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta new file mode 100644 index 0000000..27a3a33 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2ae2ce6274819484fa8747a28cebdf3a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunnerApi.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunnerApi.cs new file mode 100644 index 0000000..da3ffdd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunnerApi.cs @@ -0,0 +1,12 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ITestRunnerApi + { + string Execute(ExecutionSettings executionSettings); + void RegisterCallbacks(T testCallbacks, int priority = 0) where T : ICallbacks; + void UnregisterCallbacks(T testCallbacks) where T : ICallbacks; + void RetrieveTestList(TestMode testMode, Action callback); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta new file mode 100644 index 0000000..d581ffd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestRunnerApi.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a7842a837a4b13e41ae16193db753418 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs new file mode 100644 index 0000000..cc5a301 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal interface ITestTreeRebuildCallbacks : ICallbacks + { + void TestTreeRebuild(ITestAdaptor test); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta new file mode 100644 index 0000000..eb1117c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/ITestTreeRebuildCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4230e406313f1db43a4b548e7a3ad2e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/RunState.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/RunState.cs new file mode 100644 index 0000000..e2df661 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/RunState.cs @@ -0,0 +1,33 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// The RunState enum indicates whether a test can be executed. + /// + public enum RunState + { + /// + /// The test is not runnable. + /// + NotRunnable, + + /// + /// The test is runnable. + /// + Runnable, + + /// + /// The test can only be run explicitly + /// + Explicit, + + /// + /// The test has been skipped. This value may appear on a Test when certain attributes are used to skip the test. + /// + Skipped, + + /// + /// The test has been ignored. May appear on a Test, when the IgnoreAttribute is used. + /// + Ignored, + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/RunState.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/RunState.cs.meta new file mode 100644 index 0000000..818e3c0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/RunState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bb59cb2f66d156418ca1bd1e2703233 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptor.cs new file mode 100644 index 0000000..556bb0c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptor.cs @@ -0,0 +1,142 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class TestAdaptor : ITestAdaptor + { + internal TestAdaptor(ITest test, ITestAdaptor[] children = null) + { + Id = test.Id; + Name = test.Name; + var childIndex = -1; + if (test.Properties["childIndex"].Count > 0) + { + childIndex = (int)test.Properties["childIndex"][0]; + } + FullName = childIndex != -1 ? GetIndexedTestCaseName(test.FullName, childIndex) : test.FullName; + TestCaseCount = test.TestCaseCount; + HasChildren = test.HasChildren; + IsSuite = test.IsSuite; + if (UnityTestExecutionContext.CurrentContext != null) + { + TestCaseTimeout = UnityTestExecutionContext.CurrentContext.TestCaseTimeout; + } + else + { + TestCaseTimeout = CoroutineRunner.k_DefaultTimeout; + } + + TypeInfo = test.TypeInfo; + Method = test.Method; + Categories = test.GetAllCategoriesFromTest().Distinct().ToArray(); + IsTestAssembly = test is TestAssembly; + RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString()); + Description = (string)test.Properties.Get(PropertyNames.Description); + SkipReason = test.GetSkipReason(); + ParentId = test.GetParentId(); + ParentFullName = test.GetParentFullName(); + UniqueName = test.GetUniqueName(); + ParentUniqueName = test.GetParentUniqueName(); + ChildIndex = childIndex; + + if (test.Parent != null) + { + if (test.Parent.Parent == null) // Assembly level + { + TestMode = (TestMode)Enum.Parse(typeof(TestMode),test.Properties.Get("platform").ToString()); + } + } + + Children = children; + } + + public void SetParent(ITestAdaptor parent) + { + Parent = parent; + if (parent != null) + { + TestMode = parent.TestMode; + } + } + + internal TestAdaptor(RemoteTestData test) + { + Id = test.id; + Name = test.name; + FullName = test.ChildIndex != -1 ? GetIndexedTestCaseName(test.fullName, test.ChildIndex) : test.fullName; + TestCaseCount = test.testCaseCount; + HasChildren = test.hasChildren; + IsSuite = test.isSuite; + m_ChildrenIds = test.childrenIds; + TestCaseTimeout = test.testCaseTimeout; + Categories = test.Categories; + IsTestAssembly = test.IsTestAssembly; + RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString()); + Description = test.Description; + SkipReason = test.SkipReason; + ParentId = test.ParentId; + UniqueName = test.UniqueName; + ParentUniqueName = test.ParentUniqueName; + ParentFullName = test.ParentFullName; + ChildIndex = test.ChildIndex; + TestMode = TestMode.PlayMode; + } + + internal void ApplyChildren(IEnumerable allTests) + { + Children = m_ChildrenIds.Select(id => allTests.First(t => t.Id == id)).ToArray(); + if (!string.IsNullOrEmpty(ParentId)) + { + Parent = allTests.FirstOrDefault(t => t.Id == ParentId); + } + } + + public string Id { get; private set; } + public string Name { get; private set; } + public string FullName { get; private set; } + public int TestCaseCount { get; private set; } + public bool HasChildren { get; private set; } + public bool IsSuite { get; private set; } + public IEnumerable Children { get; private set; } + public ITestAdaptor Parent { get; private set; } + public int TestCaseTimeout { get; private set; } + public ITypeInfo TypeInfo { get; private set; } + public IMethodInfo Method { get; private set; } + private string[] m_ChildrenIds; + public string[] Categories { get; private set; } + public bool IsTestAssembly { get; private set; } + public RunState RunState { get; } + public string Description { get; } + public string SkipReason { get; } + public string ParentId { get; } + public string ParentFullName { get; } + public string UniqueName { get; } + public string ParentUniqueName { get; } + public int ChildIndex { get; } + public TestMode TestMode { get; private set; } + + private static string GetIndexedTestCaseName(string fullName, int index) + { + var generatedTestSuffix = " GeneratedTestCase" + index; + if (fullName.EndsWith(")")) + { + // Test names from generated TestCaseSource look like Test(TestCaseSourceType) + // This inserts a unique test case index in the name, so that it becomes Test(TestCaseSourceType GeneratedTestCase0) + return fullName.Substring(0, fullName.Length - 1) + generatedTestSuffix + fullName[fullName.Length - 1]; + } + + // In some cases there can be tests with duplicate names generated in other ways and they won't have () in their name + // We just append a suffix at the end of the name in that case + return fullName + generatedTestSuffix; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta new file mode 100644 index 0000000..81e39b7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6e0e62db88935c74288c97c907243bd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs new file mode 100644 index 0000000..7a25ec8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs @@ -0,0 +1,91 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class TestAdaptorFactory : ITestAdaptorFactory + { + private Dictionary m_TestAdaptorCache = new Dictionary(); + private Dictionary m_TestResultAdaptorCache = new Dictionary(); + public ITestAdaptor Create(ITest test) + { + var uniqueName = test.GetUniqueName(); + if (m_TestAdaptorCache.ContainsKey(uniqueName)) + { + return m_TestAdaptorCache[uniqueName]; + } + + var adaptor = new TestAdaptor(test, test.Tests.Select(Create).ToArray()); + foreach (var child in adaptor.Children) + { + (child as TestAdaptor).SetParent(adaptor); + } + m_TestAdaptorCache[uniqueName] = adaptor; + return adaptor; + } + + public ITestAdaptor Create(RemoteTestData testData) + { + return new TestAdaptor(testData); + } + + public ITestResultAdaptor Create(ITestResult testResult) + { + var uniqueName = testResult.Test.GetUniqueName(); + if (m_TestResultAdaptorCache.ContainsKey(uniqueName)) + { + return m_TestResultAdaptorCache[uniqueName]; + } + var adaptor = new TestResultAdaptor(testResult, Create(testResult.Test), testResult.Children.Select(Create).ToArray()); + m_TestResultAdaptorCache[uniqueName] = adaptor; + return adaptor; + } + + public ITestResultAdaptor Create(RemoteTestResultData testResult, RemoteTestResultDataWithTestData allData) + { + return new TestResultAdaptor(testResult, allData); + } + + public ITestAdaptor BuildTree(RemoteTestResultDataWithTestData data) + { + var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList(); + + foreach (var test in tests) + { + test.ApplyChildren(tests); + } + + return tests.First(); + } + + public IEnumerator BuildTreeAsync(RemoteTestResultDataWithTestData data) + { + var tests = data.tests.Select(remoteTestData => new TestAdaptor(remoteTestData)).ToList(); + + for (var index = 0; index < tests.Count; index++) + { + var test = tests[index]; + test.ApplyChildren(tests); + if (index % 100 == 0) + { + yield return null; + } + } + + yield return tests.First(); + } + + public void ClearResultsCache() + { + m_TestResultAdaptorCache.Clear(); + } + + public void ClearTestsCache() + { + m_TestAdaptorCache.Clear(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta new file mode 100644 index 0000000..0b1175f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestAdaptorFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0663d520c26b7c48a4135599e66acf8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestMode.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestMode.cs new file mode 100644 index 0000000..e7a365e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestMode.cs @@ -0,0 +1,20 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// A flag indicating whether to run Edit Mode or Play Mode tests. + /// + [Flags] + public enum TestMode + { + /// + /// Run EditMode tests. + /// + EditMode = 1 << 0, + /// + /// Run PlayMode tests. + /// + PlayMode = 1 << 1 + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestMode.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestMode.cs.meta new file mode 100644 index 0000000..e04594b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cad095eccea17b741bc4cd264e7441cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestResultAdaptor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestResultAdaptor.cs new file mode 100644 index 0000000..7374b3f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestResultAdaptor.cs @@ -0,0 +1,87 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + internal class TestResultAdaptor : ITestResultAdaptor + { + private TNode m_Node; + + internal TestResultAdaptor(ITestResult result, ITestAdaptor test, ITestResultAdaptor[] children = null) + { + Test = test; + Name = result.Name; + FullName = result.FullName; + ResultState = result.ResultState.ToString(); + TestStatus = ParseTestStatus(result.ResultState.Status); + Duration = result.Duration; + StartTime = result.StartTime; + EndTime = result.EndTime; + Message = result.Message; + StackTrace = result.StackTrace; + AssertCount = result.AssertCount; + FailCount = result.FailCount; + PassCount = result.PassCount; + SkipCount = result.SkipCount; + InconclusiveCount = result.InconclusiveCount; + HasChildren = result.HasChildren; + Output = result.Output; + Children = children; + m_Node = result.ToXml(true); + } + + internal TestResultAdaptor(RemoteTestResultData result, RemoteTestResultDataWithTestData allData) + { + Test = new TestAdaptor(allData.tests.First(t => t.id == result.testId)); + Name = result.name; + FullName = result.fullName; + ResultState = result.resultState; + TestStatus = ParseTestStatus(result.testStatus); + Duration = result.duration; + StartTime = result.startTime; + EndTime = result.endTime; + Message = result.message; + StackTrace = result.stackTrace; + AssertCount = result.assertCount; + FailCount = result.failCount; + PassCount = result.passCount; + SkipCount = result.skipCount; + InconclusiveCount = result.inconclusiveCount; + HasChildren = result.hasChildren; + Output = result.output; + Children = result.childrenIds.Select(childId => new TestResultAdaptor(allData.results.First(r => r.testId == childId), allData)).ToArray(); + m_Node = TNode.FromXml(result.xml); + } + + public ITestAdaptor Test { get; private set; } + public string Name { get; private set; } + public string FullName { get; private set; } + public string ResultState { get; private set; } + public TestStatus TestStatus { get; private set; } + public double Duration { get; private set; } + public DateTime StartTime { get; private set; } + public DateTime EndTime { get; private set; } + public string Message { get; private set; } + public string StackTrace { get; private set; } + public int AssertCount { get; private set; } + public int FailCount { get; private set; } + public int PassCount { get; private set; } + public int SkipCount { get; private set; } + public int InconclusiveCount { get; private set; } + public bool HasChildren { get; private set; } + public IEnumerable Children { get; private set; } + public string Output { get; private set; } + public TNode ToXml() + { + return m_Node; + } + + private static TestStatus ParseTestStatus(NUnit.Framework.Interfaces.TestStatus testStatus) + { + return (TestStatus)Enum.Parse(typeof(TestStatus), testStatus.ToString()); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta new file mode 100644 index 0000000..c2b119e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestResultAdaptor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d061ada5d3169454daf54243390b5fdb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestRunnerApi.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestRunnerApi.cs new file mode 100644 index 0000000..5f2efa7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestRunnerApi.cs @@ -0,0 +1,147 @@ +using System; +using System.Linq; +using System.Threading; +using UnityEditor.TestTools.TestRunner.CommandLineTest; +using UnityEditor.TestTools.TestRunner.TestRun; +using UnityEngine; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// The TestRunnerApi retrieves and runs tests programmatically from code inside the project, or inside other packages. TestRunnerApi is a [ScriptableObject](https://docs.unity3d.com/ScriptReference/ScriptableObject.html). + ///You can initialize the API like this: + /// ``` + /// var testRunnerApi = ScriptableObject.CreateInstance<TestRunnerApi>(); + /// ``` + /// Note: You can subscribe and receive test results in one instance of the API, even if the run starts from another instance. + /// The TestRunnerApi supports the following workflows: + /// - [How to run tests programmatically](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-run-tests.html) + /// - [How to get test results](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-get-test-results.html) + /// - [How to retrieve the list of tests](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/extension-retrieve-test-list.html) + /// + public class TestRunnerApi : ScriptableObject, ITestRunnerApi + { + internal ICallbacksHolder callbacksHolder; + + private ICallbacksHolder m_CallbacksHolder + { + get + { + if (callbacksHolder == null) + { + return CallbacksHolder.instance; + } + + return callbacksHolder; + } + } + + internal Func ScheduleJob = (executionSettings) => + { + var runner = new TestJobRunner(); + return runner.RunJob(new TestJobData(executionSettings)); + }; + /// + /// Starts a test run with a given set of executionSettings. + /// + /// Set of + /// A GUID that identifies the TestJobData. + public string Execute(ExecutionSettings executionSettings) + { + if (executionSettings == null) + { + throw new ArgumentNullException(nameof(executionSettings)); + } + + if ((executionSettings.filters == null || executionSettings.filters.Length == 0) && executionSettings.filter != null) + { + // Map filter (singular) to filters (plural), for backwards compatibility. + executionSettings.filters = new [] {executionSettings.filter}; + } + + if (executionSettings.targetPlatform == null && executionSettings.filters != null && + executionSettings.filters.Length > 0) + { + executionSettings.targetPlatform = executionSettings.filters[0].targetPlatform; + } + + return ScheduleJob(executionSettings); + } + + /// + /// Sets up a given instance of to be invoked on test runs. + /// + /// The test callbacks to be invoked + public void RegisterCallbacks(T testCallbacks, int priority = 0) where T : ICallbacks + { + if (testCallbacks == null) + { + throw new ArgumentNullException(nameof(testCallbacks)); + } + + m_CallbacksHolder.Add(testCallbacks, priority); + } + /// + /// Unregister an instance of to no longer receive callbacks from test runs. + /// + /// The test callbacks to unregister. + public void UnregisterCallbacks(T testCallbacks) where T : ICallbacks + { + if (testCallbacks == null) + { + throw new ArgumentNullException(nameof(testCallbacks)); + } + + m_CallbacksHolder.Remove(testCallbacks); + } + + internal void RetrieveTestList(ExecutionSettings executionSettings, Action callback) + { + if (executionSettings == null) + { + throw new ArgumentNullException(nameof(executionSettings)); + } + + var firstFilter = executionSettings.filters?.FirstOrDefault() ?? executionSettings.filter; + RetrieveTestList(firstFilter.testMode, callback); + } + /// + /// Retrieve the full test tree as ITestAdaptor for a given test mode. This is obsolete. Use TestRunnerApi.RetrieveTestTree instead. + /// + /// + /// + public void RetrieveTestList(TestMode testMode, Action callback) + { + if (callback == null) + { + throw new ArgumentNullException(nameof(callback)); + } + + var platform = ParseTestMode(testMode); + var testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + var testAdaptorFactory = new TestAdaptorFactory(); + var testListCache = new TestListCache(testAdaptorFactory, new RemoteTestResultDataFactory(), TestListCacheData.instance); + var testListProvider = new TestListProvider(testAssemblyProvider, new UnityTestAssemblyBuilder()); + var cachedTestListProvider = new CachingTestListProvider(testListProvider, testListCache, testAdaptorFactory); + + var job = new TestListJob(cachedTestListProvider, platform, (testRoot) => + { + callback(testRoot); + }); + job.Start(); + } + + internal static bool IsRunActive() + { + return RunData.instance.isRunning; + } + + private static TestPlatform ParseTestMode(TestMode testMode) + { + return (((testMode & TestMode.EditMode) == TestMode.EditMode) ? TestPlatform.EditMode : 0) | (((testMode & TestMode.PlayMode) == TestMode.PlayMode) ? TestPlatform.PlayMode : 0); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta new file mode 100644 index 0000000..7ad5fc1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestRunnerApi.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68993ba529ae04440916cb7c23bf3279 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestStatus.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestStatus.cs new file mode 100644 index 0000000..d88c3da --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestStatus.cs @@ -0,0 +1,28 @@ +namespace UnityEditor.TestTools.TestRunner.Api +{ + /// + /// The TestStatus enum indicates the test result status. + /// + public enum TestStatus + { + /// + /// The test ran with an inconclusive result. + /// + Inconclusive, + + /// + /// The test was skipped. + /// + Skipped, + + /// + /// The test ran and passed. + /// + Passed, + + /// + /// The test ran and failed. + /// + Failed + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestStatus.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestStatus.cs.meta new file mode 100644 index 0000000..38bd6af --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/Api/TestStatus.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ec94545c5b00344c9bd8e691f15d799 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/AssemblyInfo.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/AssemblyInfo.cs new file mode 100644 index 0000000..49b650e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/AssemblyInfo.cs @@ -0,0 +1,15 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyTitle("UnityEditor.TestRunner")] +[assembly: InternalsVisibleTo("Assembly-CSharp-Editor-testable")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] +[assembly: InternalsVisibleTo("Unity.PerformanceTesting.Editor")] +[assembly: InternalsVisibleTo("Unity.IntegrationTests")] +[assembly: InternalsVisibleTo("UnityEditor.TestRunner.Tests")] +[assembly: InternalsVisibleTo("Unity.TestTools.CodeCoverage.Editor")] +[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Develop.Editor")] +[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Develop.EditorTests")] +[assembly: InternalsVisibleTo("Unity.PackageValidationSuite.Editor")] + +[assembly: AssemblyVersion("1.0.0")] diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/AssemblyInfo.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/AssemblyInfo.cs.meta new file mode 100644 index 0000000..5e1b8dd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9db19a04003fca7439552acd4de9baa1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser.meta new file mode 100644 index 0000000..b5a29bd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7602252bdb82b8d45ae3483c3a00d3e1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs new file mode 100644 index 0000000..8582351 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs @@ -0,0 +1,45 @@ +using System; +using System.Linq; + +namespace UnityEditor.TestRunner.CommandLineParser +{ + internal class CommandLineOption : ICommandLineOption + { + Action m_ArgAction; + + public CommandLineOption(string argName, Action action) + { + ArgName = argName; + m_ArgAction = s => action(); + } + + public CommandLineOption(string argName, Action action) + { + ArgName = argName; + m_ArgAction = action; + } + + public CommandLineOption(string argName, Action action) + { + ArgName = argName; + m_ArgAction = s => action(SplitStringToArray(s)); + } + + public string ArgName { get; private set; } + + public void ApplyValue(string value) + { + m_ArgAction(value); + } + + static string[] SplitStringToArray(string value) + { + if (string.IsNullOrEmpty(value)) + { + return null; + } + + return value.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta new file mode 100644 index 0000000..65f3256 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3529368f4cd0424a89aa51080a16b06 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs new file mode 100644 index 0000000..d08c233 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs @@ -0,0 +1,49 @@ +using System; + +namespace UnityEditor.TestRunner.CommandLineParser +{ + internal class CommandLineOptionSet + { + ICommandLineOption[] m_Options; + + public CommandLineOptionSet(params ICommandLineOption[] options) + { + m_Options = options; + } + + public void Parse(string[] args) + { + var i = 0; + while (i < args.Length) + { + var arg = args[i]; + if (!arg.StartsWith("-")) + { + i++; + continue; + } + + string value = null; + if (i + 1 < args.Length && !args[i + 1].StartsWith("-")) + { + value = args[i + 1]; + i++; + } + + ApplyValueToMatchingOptions(arg, value); + i++; + } + } + + private void ApplyValueToMatchingOptions(string argName, string value) + { + foreach (var option in m_Options) + { + if ("-" + option.ArgName == argName) + { + option.ApplyValue(value); + } + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta new file mode 100644 index 0000000..1db24d0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/CommandLineOptionSet.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 139c5eac101a4dc4fb3098e30c29f15e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs new file mode 100644 index 0000000..7f699ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs @@ -0,0 +1,8 @@ +namespace UnityEditor.TestRunner.CommandLineParser +{ + interface ICommandLineOption + { + string ArgName { get; } + void ApplyValue(string value); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta new file mode 100644 index 0000000..613d95f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineParser/ICommandLineOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f445ca0c614a846449fcd8ae648c24e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest.meta new file mode 100644 index 0000000..d005718 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b477d1f29b65a674e9d5cdab4eb72b01 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/Executer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/Executer.cs new file mode 100644 index 0000000..fe0eb3b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/Executer.cs @@ -0,0 +1,134 @@ +using System; +using System.Linq; +using UnityEditor.TestRunner.TestLaunchers; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class Executer + { + private ITestRunnerApi m_TestRunnerApi; + private ISettingsBuilder m_SettingsBuilder; + private Action m_LogErrorFormat; + private Action m_LogException; + private Action m_ExitEditorApplication; + private Func m_ScriptCompilationFailedCheck; + + public Executer(ITestRunnerApi testRunnerApi, ISettingsBuilder settingsBuilder, Action logErrorFormat, Action logException, Action exitEditorApplication, Func scriptCompilationFailedCheck) + { + m_TestRunnerApi = testRunnerApi; + m_SettingsBuilder = settingsBuilder; + m_LogErrorFormat = logErrorFormat; + m_LogException = logException; + m_ExitEditorApplication = exitEditorApplication; + m_ScriptCompilationFailedCheck = scriptCompilationFailedCheck; + } + + internal void InitializeAndExecuteRun(string[] commandLineArgs) + { + Api.ExecutionSettings executionSettings; + try + { + executionSettings = m_SettingsBuilder.BuildApiExecutionSettings(commandLineArgs); + if (executionSettings.targetPlatform.HasValue) + RemotePlayerLogController.instance.SetBuildTarget(executionSettings.targetPlatform.Value); + } + catch (SetupException exception) + { + HandleSetupException(exception); + return; + } + + try + { + Debug.Log("Executing tests with settings: " + ExecutionSettingsToString(executionSettings)); + m_TestRunnerApi.Execute(executionSettings); + } + catch (Exception exception) + { + m_LogException(exception); + m_ExitEditorApplication((int)ReturnCodes.RunError); + } + } + + internal ExecutionSettings BuildExecutionSettings(string[] commandLineArgs) + { + return m_SettingsBuilder.BuildExecutionSettings(commandLineArgs); + } + + internal enum ReturnCodes + { + Ok = 0, + Failed = 2, + RunError = 3, + PlatformNotFoundReturnCode = 4 + } + + internal void SetUpCallbacks(ExecutionSettings executionSettings) + { + RemotePlayerLogController.instance.SetLogsDirectory(executionSettings.DeviceLogsDirectory); + + var resultSavingCallback = ScriptableObject.CreateInstance(); + resultSavingCallback.m_ResultFilePath = executionSettings.TestResultsFile; + + var logSavingCallback = ScriptableObject.CreateInstance(); + + m_TestRunnerApi.RegisterCallbacks(resultSavingCallback); + m_TestRunnerApi.RegisterCallbacks(logSavingCallback); + m_TestRunnerApi.RegisterCallbacks(ScriptableObject.CreateInstance(), -10); + } + + internal void ExitOnCompileErrors() + { + if (m_ScriptCompilationFailedCheck()) + { + var handling = s_ExceptionHandlingMapping.First(h => h.m_ExceptionType == SetupException.ExceptionType.ScriptCompilationFailed); + m_LogErrorFormat(handling.m_Message, new object[0]); + m_ExitEditorApplication(handling.m_ReturnCode); + } + } + + void HandleSetupException(SetupException exception) + { + ExceptionHandling handling = s_ExceptionHandlingMapping.FirstOrDefault(h => h.m_ExceptionType == exception.Type) ?? new ExceptionHandling(exception.Type, "Unknown command line test run error. " + exception.Type, ReturnCodes.RunError); + m_LogErrorFormat(handling.m_Message, exception.Details); + m_ExitEditorApplication(handling.m_ReturnCode); + } + + private class ExceptionHandling + { + internal SetupException.ExceptionType m_ExceptionType; + internal string m_Message; + internal int m_ReturnCode; + public ExceptionHandling(SetupException.ExceptionType exceptionType, string message, ReturnCodes returnCode) + { + m_ExceptionType = exceptionType; + m_Message = message; + m_ReturnCode = (int)returnCode; + } + } + + static ExceptionHandling[] s_ExceptionHandlingMapping = new[] + { + new ExceptionHandling(SetupException.ExceptionType.ScriptCompilationFailed, "Scripts had compilation errors.", ReturnCodes.RunError), + new ExceptionHandling(SetupException.ExceptionType.PlatformNotFound, "Test platform not found ({0}).", ReturnCodes.PlatformNotFoundReturnCode), + new ExceptionHandling(SetupException.ExceptionType.TestSettingsFileNotFound, "Test settings file not found at {0}.", ReturnCodes.RunError) + }; + + private static string ExecutionSettingsToString(Api.ExecutionSettings executionSettings) + { + if (executionSettings == null) + { + return "none"; + } + + if (executionSettings.filters == null || executionSettings.filters.Length == 0) + { + return "no filter"; + } + + return "test mode = " + executionSettings.filters[0].testMode; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta new file mode 100644 index 0000000..e57a010 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/Executer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 083c6a3a5426382449369ddc12b691d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs new file mode 100644 index 0000000..3ff2356 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs @@ -0,0 +1,11 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class ExecutionSettings + { + public string TestResultsFile; + public string DeviceLogsDirectory; + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta new file mode 100644 index 0000000..35edc4c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExecutionSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3a75354f6ceac94ca15ca9d96593290 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs new file mode 100644 index 0000000..30ea6d8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs @@ -0,0 +1,52 @@ +using System; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class ExitCallbacks : ScriptableObject, IErrorCallbacks + { + internal static bool preventExit; + + public void RunFinished(ITestResultAdaptor testResults) + { + if (preventExit) + { + return; + } + + if (!ExitCallbacksDataHolder.instance.AnyTestsExecuted) + { + Debug.LogFormat(LogType.Warning, LogOption.NoStacktrace, null, "No tests were executed"); + } + + EditorApplication.Exit(ExitCallbacksDataHolder.instance.RunFailed ? (int)Executer.ReturnCodes.Failed : (int)Executer.ReturnCodes.Ok); + } + + public void TestStarted(ITestAdaptor test) + { + if (!test.IsSuite) + { + ExitCallbacksDataHolder.instance.AnyTestsExecuted = true; + } + } + + public void TestFinished(ITestResultAdaptor result) + { + if (!result.Test.IsSuite && (result.TestStatus == TestStatus.Failed || result.TestStatus == TestStatus.Inconclusive)) + { + ExitCallbacksDataHolder.instance.RunFailed = true; + } + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + + public void OnError(string message) + { + EditorApplication.Exit((int)Executer.ReturnCodes.RunError); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta new file mode 100644 index 0000000..6296463 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1adaa8dcc4fda3d4cb4d3c8e0cb65d12 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs new file mode 100644 index 0000000..86cf5a8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs @@ -0,0 +1,12 @@ +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class ExitCallbacksDataHolder : ScriptableSingleton + { + [SerializeField] + public bool AnyTestsExecuted; + [SerializeField] + public bool RunFailed; + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs.meta new file mode 100644 index 0000000..7b68ea5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ExitCallbacksDataHolder.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: aab045daa0ad4b01843dcf44013d9653 +timeCreated: 1605189497 \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs new file mode 100644 index 0000000..557195d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs @@ -0,0 +1,10 @@ +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + interface ISettingsBuilder + { + Api.ExecutionSettings BuildApiExecutionSettings(string[] commandLineArgs); + ExecutionSettings BuildExecutionSettings(string[] commandLineArgs); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta new file mode 100644 index 0000000..cc0b248 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ISettingsBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a13cbeb2099aca47bb456f49845f86c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs new file mode 100644 index 0000000..40a185f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs @@ -0,0 +1,29 @@ +using System; +using UnityEditor.TestRunner.TestLaunchers; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class LogSavingCallbacks : ScriptableObject, ICallbacks + { + public void RunStarted(ITestAdaptor testsToRun) + { + RemotePlayerLogController.instance.StartLogWriters(); + } + + public virtual void RunFinished(ITestResultAdaptor testResults) + { + RemotePlayerLogController.instance.StopLogWriters(); + } + + public void TestStarted(ITestAdaptor test) + { + } + + public void TestFinished(ITestResultAdaptor result) + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta new file mode 100644 index 0000000..c968178 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogSavingCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8d20eedbe40f0ce41a4c4f633f225de8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs new file mode 100644 index 0000000..5470fd7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs @@ -0,0 +1,92 @@ +using System; +using System.Collections.Generic; +using System.IO; +using UnityEditor.DeploymentTargets; +using UnityEditor.Utils; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class LogWriter : IDisposable + { + private string m_LogsDirectory; + private string m_DeviceID; + private Dictionary m_LogStreams; + private DeploymentTargetLogger m_Logger; + + internal LogWriter(string logsDirectory, string deviceID, DeploymentTargetLogger logger) + { + m_LogStreams = new Dictionary(); + m_Logger = logger; + m_LogsDirectory = logsDirectory; + m_DeviceID = deviceID; + + logger.logMessage += WriteLogToFile; + } + + private void WriteLogToFile(string id, string logLine) + { + StreamWriter logStream; + var streamExists = m_LogStreams.TryGetValue(id, out logStream); + if (!streamExists) + { + var filePath = GetLogFilePath(m_LogsDirectory, m_DeviceID, id); + logStream = CreateLogFile(filePath); + + m_LogStreams.Add(id, logStream); + } + + try + { + if (logLine != null) + logStream.WriteLine(logLine); + } + catch (Exception ex) + { + Debug.LogError($"Writing {id} log failed."); + Debug.LogException(ex); + } + } + + public void Stop() + { + m_Logger.Stop(); + foreach (var logStream in m_LogStreams) + { + logStream.Value.Close(); + } + } + + public void Dispose() + { + Stop(); + } + + private StreamWriter CreateLogFile(string path) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Creating {0} device log: {1}", m_DeviceID, path); + StreamWriter streamWriter = null; + try + { + if (!Directory.Exists(path)) + Directory.CreateDirectory(Path.GetDirectoryName(path)); + + streamWriter = File.CreateText(path); + } + catch (Exception ex) + { + Debug.LogError($"Creating device log {path} file failed."); + Debug.LogException(ex); + } + + return streamWriter; + } + + private string GetLogFilePath(string lgosDirectory, string deviceID, string logID) + { + var fileName = "Device-" + deviceID + "-" + logID + ".txt"; + fileName = string.Join("_", fileName.Split(Path.GetInvalidFileNameChars())); + return Paths.Combine(lgosDirectory, fileName); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta new file mode 100644 index 0000000..56872b9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/LogWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 05778dd1de4433d418793b6f3d3c18cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs new file mode 100644 index 0000000..a3837bf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs @@ -0,0 +1,50 @@ +using System; +using System.IO; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.Utils; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [Serializable] + internal class ResultsSavingCallbacks : ScriptableObject, ICallbacks + { + [SerializeField] + public string m_ResultFilePath; + + public ResultsSavingCallbacks() + { + this.m_ResultFilePath = GetDefaultResultFilePath(); + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + + public virtual void RunFinished(ITestResultAdaptor testResults) + { + if (string.IsNullOrEmpty(m_ResultFilePath)) + { + m_ResultFilePath = GetDefaultResultFilePath(); + } + + var resultWriter = new ResultsWriter(); + resultWriter.WriteResultToFile(testResults, m_ResultFilePath); + } + + public void TestStarted(ITestAdaptor test) + { + } + + public void TestFinished(ITestResultAdaptor result) + { + } + + private static string GetDefaultResultFilePath() + { + var fileName = "TestResults-" + DateTime.Now.Ticks + ".xml"; + var projectPath = Directory.GetCurrentDirectory(); + return Paths.Combine(projectPath, fileName); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta new file mode 100644 index 0000000..ca06f3a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsSavingCallbacks.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef563c5a6ecf64d4193dc144cb7d472a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs new file mode 100644 index 0000000..e713a6e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs @@ -0,0 +1,103 @@ +using System; +using System.IO; +using System.Xml; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class ResultsWriter + { + private const string k_nUnitVersion = "3.5.0.0"; + + private const string k_TestRunNode = "test-run"; + private const string k_Id = "id"; + private const string k_Testcasecount = "testcasecount"; + private const string k_Result = "result"; + private const string k_Total = "total"; + private const string k_Passed = "passed"; + private const string k_Failed = "failed"; + private const string k_Inconclusive = "inconclusive"; + private const string k_Skipped = "skipped"; + private const string k_Asserts = "asserts"; + private const string k_EngineVersion = "engine-version"; + private const string k_ClrVersion = "clr-version"; + private const string k_StartTime = "start-time"; + private const string k_EndTime = "end-time"; + private const string k_Duration = "duration"; + + private const string k_TimeFormat = "u"; + + public void WriteResultToFile(ITestResultAdaptor result, string filePath) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Saving results to: {0}", filePath); + + try + { + if (!Directory.Exists(filePath)) + { + CreateDirectory(filePath); + } + + using (var fileStream = File.CreateText(filePath)) + { + WriteResultToStream(result, fileStream); + } + } + catch (Exception ex) + { + Debug.LogError("Saving result file failed."); + Debug.LogException(ex); + } + } + + void CreateDirectory(string filePath) + { + var driectoryPath = Path.GetDirectoryName(filePath); + if (!String.IsNullOrEmpty(driectoryPath)) + { + Directory.CreateDirectory(driectoryPath); + } + } + + public void WriteResultToStream(ITestResultAdaptor result, StreamWriter streamWriter, XmlWriterSettings settings = null) + { + settings = settings ?? new XmlWriterSettings(); + settings.Indent = true; + settings.NewLineOnAttributes = false; + + using (var xmlWriter = XmlWriter.Create(streamWriter, settings)) + { + WriteResultsToXml(result, xmlWriter); + } + } + + void WriteResultsToXml(ITestResultAdaptor result, XmlWriter xmlWriter) + { + // XML format as specified at https://github.com/nunit/docs/wiki/Test-Result-XML-Format + + var testRunNode = new TNode(k_TestRunNode); + + testRunNode.AddAttribute(k_Id, "2"); + testRunNode.AddAttribute(k_Testcasecount, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString()); + testRunNode.AddAttribute(k_Result, result.ResultState.ToString()); + testRunNode.AddAttribute(k_Total, (result.PassCount + result.FailCount + result.SkipCount + result.InconclusiveCount).ToString()); + testRunNode.AddAttribute(k_Passed, result.PassCount.ToString()); + testRunNode.AddAttribute(k_Failed, result.FailCount.ToString()); + testRunNode.AddAttribute(k_Inconclusive, result.InconclusiveCount.ToString()); + testRunNode.AddAttribute(k_Skipped, result.SkipCount.ToString()); + testRunNode.AddAttribute(k_Asserts, result.AssertCount.ToString()); + testRunNode.AddAttribute(k_EngineVersion, k_nUnitVersion); + testRunNode.AddAttribute(k_ClrVersion, Environment.Version.ToString()); + testRunNode.AddAttribute(k_StartTime, result.StartTime.ToString(k_TimeFormat)); + testRunNode.AddAttribute(k_EndTime, result.EndTime.ToString(k_TimeFormat)); + testRunNode.AddAttribute(k_Duration, result.Duration.ToString()); + + var resultNode = result.ToXml(); + testRunNode.ChildNodes.Add(resultNode); + + testRunNode.WriteTo(xmlWriter); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta new file mode 100644 index 0000000..074fe65 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/ResultsWriter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29d603e0a726a9043b3503112271844a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunData.cs new file mode 100644 index 0000000..6a469a7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunData.cs @@ -0,0 +1,8 @@ +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class RunData : ScriptableSingleton + { + public bool isRunning; + public ExecutionSettings executionSettings; + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta new file mode 100644 index 0000000..4cfe30e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f8c1075884df0249b80e23a0598f9c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs new file mode 100644 index 0000000..9b914c7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs @@ -0,0 +1,29 @@ +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class RunSettings : ITestRunSettings + { + private ITestSettings m_TestSettings; + public RunSettings(ITestSettings testSettings) + { + this.m_TestSettings = testSettings; + } + + public void Apply() + { + if (m_TestSettings != null) + { + m_TestSettings.SetupProjectParameters(); + } + } + + public void Dispose() + { + if (m_TestSettings != null) + { + m_TestSettings.Dispose(); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta new file mode 100644 index 0000000..0e241ba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/RunSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59d3f5586b341a74c84c8f72144a4568 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs new file mode 100644 index 0000000..16b66e4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs @@ -0,0 +1,188 @@ +using System; +using System.IO; +using UnityEditor.TestRunner.CommandLineParser; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.GUI; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class SettingsBuilder : ISettingsBuilder + { + private ITestSettingsDeserializer m_TestSettingsDeserializer; + private Action m_LogAction; + private Action m_LogWarningAction; + private Func m_FileExistsCheck; + private Func m_ScriptCompilationFailedCheck; + public SettingsBuilder(ITestSettingsDeserializer testSettingsDeserializer, Action logAction, Action logWarningAction, Func fileExistsCheck, Func scriptCompilationFailedCheck) + { + m_LogAction = logAction; + m_LogWarningAction = logWarningAction; + m_FileExistsCheck = fileExistsCheck; + m_ScriptCompilationFailedCheck = scriptCompilationFailedCheck; + m_TestSettingsDeserializer = testSettingsDeserializer; + } + + public Api.ExecutionSettings BuildApiExecutionSettings(string[] commandLineArgs) + { + var quit = false; + string testPlatform = TestMode.EditMode.ToString(); + string[] testFilters = null; + string[] testCategories = null; + string testSettingsFilePath = null; + int testRepetitions = 1; + int? playerHeartbeatTimeout = null; + bool runSynchronously = false; + string[] testAssemblyNames = null; + + var optionSet = new CommandLineOptionSet( + new CommandLineOption("quit", () => { quit = true; }), + new CommandLineOption("testPlatform", platform => { testPlatform = platform; }), + new CommandLineOption("editorTestsFilter", filters => { testFilters = filters; }), + new CommandLineOption("testFilter", filters => { testFilters = filters; }), + new CommandLineOption("editorTestsCategories", catagories => { testCategories = catagories; }), + new CommandLineOption("testCategory", catagories => { testCategories = catagories; }), + new CommandLineOption("testSettingsFile", settingsFilePath => { testSettingsFilePath = settingsFilePath; }), + new CommandLineOption("testRepetitions", reps => { testRepetitions = int.Parse(reps); }), + new CommandLineOption("playerHeartbeatTimeout", timeout => { playerHeartbeatTimeout = int.Parse(timeout); }), + new CommandLineOption("runSynchronously", () => { runSynchronously = true; }), + new CommandLineOption("assemblyNames", assemblyNames => { testAssemblyNames = assemblyNames; }) + ); + optionSet.Parse(commandLineArgs); + + DisplayQuitWarningIfQuitIsGiven(quit); + + CheckForScriptCompilationErrors(); + + LogParametersForRun(testPlatform, testFilters, testCategories, testSettingsFilePath); + + var testSettings = GetTestSettings(testSettingsFilePath); + + var filter = new Filter() + { + groupNames = testFilters, + categoryNames = testCategories, + assemblyNames = testAssemblyNames + }; + + var buildTarget = SetFilterAndGetBuildTarget(testPlatform, filter); + + RerunCallbackData.instance.runFilters = new []{new UITestRunnerFilter() + { + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + testRepetitions = testRepetitions + }}; + + RerunCallbackData.instance.testMode = filter.testMode; + + var settings = new Api.ExecutionSettings() + { + filters = new []{filter}, + overloadTestRunSettings = new RunSettings(testSettings), + targetPlatform = buildTarget, + runSynchronously = runSynchronously + }; + + if (playerHeartbeatTimeout != null) + { + settings.playerHeartbeatTimeout = playerHeartbeatTimeout.Value; + } + + return settings; + } + + public ExecutionSettings BuildExecutionSettings(string[] commandLineArgs) + { + string resultFilePath = null; + string deviceLogsDirectory = null; + + var optionSet = new CommandLineOptionSet( + new CommandLineOption("editorTestsResultFile", filePath => { resultFilePath = filePath; }), + new CommandLineOption("testResults", filePath => { resultFilePath = filePath; }), + new CommandLineOption("deviceLogs", dirPath => { deviceLogsDirectory = dirPath; }) + ); + optionSet.Parse(commandLineArgs); + + return new ExecutionSettings() + { + TestResultsFile = resultFilePath, + DeviceLogsDirectory = deviceLogsDirectory + }; + } + + void DisplayQuitWarningIfQuitIsGiven(bool quitIsGiven) + { + if (quitIsGiven) + { + m_LogWarningAction("Running tests from command line arguments will not work when \"quit\" is specified."); + } + } + + void CheckForScriptCompilationErrors() + { + if (m_ScriptCompilationFailedCheck()) + { + throw new SetupException(SetupException.ExceptionType.ScriptCompilationFailed); + } + } + + void LogParametersForRun(string testPlatform, string[] testFilters, string[] testCategories, string testSettingsFilePath) + { + m_LogAction("Running tests for " + testPlatform); + if (testFilters != null && testFilters.Length > 0) + { + m_LogAction("With test filter: " + string.Join(", ", testFilters)); + } + if (testCategories != null && testCategories.Length > 0) + { + m_LogAction("With test categories: " + string.Join(", ", testCategories)); + } + if (!string.IsNullOrEmpty(testSettingsFilePath)) + { + m_LogAction("With test settings file: " + testSettingsFilePath); + } + } + + ITestSettings GetTestSettings(string testSettingsFilePath) + { + ITestSettings testSettings = null; + if (!string.IsNullOrEmpty(testSettingsFilePath)) + { + if (!m_FileExistsCheck(testSettingsFilePath)) + { + throw new SetupException(SetupException.ExceptionType.TestSettingsFileNotFound, testSettingsFilePath); + } + + testSettings = m_TestSettingsDeserializer.GetSettingsFromJsonFile(testSettingsFilePath); + } + return testSettings; + } + + static BuildTarget? SetFilterAndGetBuildTarget(string testPlatform, Filter filter) + { + BuildTarget? buildTarget = null; + if (testPlatform.ToLower() == "editmode") + { + filter.testMode = TestMode.EditMode; + } + else if (testPlatform.ToLower() == "playmode") + { + filter.testMode = TestMode.PlayMode; + } + else + { + try + { + buildTarget = (BuildTarget)Enum.Parse(typeof(BuildTarget), testPlatform, true); + + filter.testMode = TestMode.PlayMode; + } + catch (ArgumentException) + { + throw new SetupException(SetupException.ExceptionType.PlatformNotFound, testPlatform); + } + } + return buildTarget; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta new file mode 100644 index 0000000..1e2f8c9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SettingsBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7468a027a77337478e133b40b42b4f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SetupException.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SetupException.cs new file mode 100644 index 0000000..3337713 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SetupException.cs @@ -0,0 +1,23 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + internal class SetupException : Exception + { + public ExceptionType Type { get; } + public object[] Details { get; } + + public SetupException(ExceptionType type, params object[] details) + { + Type = type; + Details = details; + } + + public enum ExceptionType + { + ScriptCompilationFailed, + PlatformNotFound, + TestSettingsFileNotFound, + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta new file mode 100644 index 0000000..bdb235c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/SetupException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 63572993f2104574099a48392460b211 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs new file mode 100644 index 0000000..44130b2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs @@ -0,0 +1,82 @@ +using System; +using System.IO; +using UnityEditor.TestRunner.CommandLineParser; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEditor.Compilation; +using System.Linq; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.CommandLineTest +{ + [InitializeOnLoad] + static class TestStarter + { + static TestStarter() + { + if (!ShouldRunTests()) + { + return; + } + + if (EditorApplication.isCompiling) + { + return; + } + + if (RunData.instance.isRunning) + { + executer.ExitOnCompileErrors(); + executer.SetUpCallbacks(RunData.instance.executionSettings); + return; + } + + EditorApplication.update += UpdateWatch; + } + + static void UpdateWatch() + { + EditorApplication.update -= UpdateWatch; + + if (RunData.instance.isRunning) + { + return; + } + + RunData.instance.isRunning = true; + var commandLineArgs = Environment.GetCommandLineArgs(); + RunData.instance.executionSettings = executer.BuildExecutionSettings(commandLineArgs); + executer.SetUpCallbacks(RunData.instance.executionSettings); + executer.InitializeAndExecuteRun(commandLineArgs); + } + + static bool ShouldRunTests() + { + var shouldRunTests = false; + var optionSet = new CommandLineOptionSet( + new CommandLineOption("runTests", () => { shouldRunTests = true; }), + new CommandLineOption("runEditorTests", () => { shouldRunTests = true; }) + ); + optionSet.Parse(Environment.GetCommandLineArgs()); + return shouldRunTests; + } + + static Executer s_Executer; + + static Executer executer + { + get + { + if (s_Executer == null) + { + Func compilationCheck = () => EditorUtility.scriptCompilationFailed; + Action actionLogger = (string msg) => { Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, msg); }; + var apiSettingsBuilder = new SettingsBuilder(new TestSettingsDeserializer(() => new TestSettings()), actionLogger, Debug.LogWarning, File.Exists, compilationCheck); + s_Executer = new Executer(ScriptableObject.CreateInstance(), apiSettingsBuilder, Debug.LogErrorFormat, Debug.LogException, EditorApplication.Exit, compilationCheck); + } + + return s_Executer; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta new file mode 100644 index 0000000..4d5dfdc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/CommandLineTest/TestStarter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4d616d1a494edd144b262cf6cd5e5fda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI.meta new file mode 100644 index 0000000..bc9308a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e609b27ad2caa14c83dd9951b6c13c6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs new file mode 100644 index 0000000..0016142 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs @@ -0,0 +1,11 @@ +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class AssetsDatabaseHelper : IAssetsDatabaseHelper + { + public void OpenAssetInItsDefaultExternalEditor(string assetPath, int line) + { + var asset = AssetDatabase.LoadMainAssetAtPath(assetPath); + AssetDatabase.OpenAsset(asset, line); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta new file mode 100644 index 0000000..4fad1fc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/AssetsDatabaseHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 740b3785866edda4b8d1e1a05570a5f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/GuiHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/GuiHelper.cs new file mode 100644 index 0000000..81770fa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/GuiHelper.cs @@ -0,0 +1,138 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Text.RegularExpressions; +using Unity.CodeEditor; +using UnityEditor.Utils; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class GuiHelper : IGuiHelper + { + public GuiHelper(IMonoCecilHelper monoCecilHelper, IAssetsDatabaseHelper assetsDatabaseHelper) + { + MonoCecilHelper = monoCecilHelper; + AssetsDatabaseHelper = assetsDatabaseHelper; + Editor = new DefaultExternalCodeEditor(); + GetCSFiles = (dirPath, fileExtension) => + { + return Directory.GetFiles(dirPath, $"*{fileExtension}", SearchOption.AllDirectories) + .Select(Paths.UnifyDirectorySeparator); + }; + } + internal Func> GetCSFiles; + protected IMonoCecilHelper MonoCecilHelper { get; private set; } + public IAssetsDatabaseHelper AssetsDatabaseHelper { get; private set; } + public IExternalCodeEditor Editor { get; internal set; } + private const string FileExtension = ".cs"; + + public void OpenScriptInExternalEditor(Type type, MethodInfo method) + { + var fileOpenInfo = GetFileOpenInfo(type, method); + + if (string.IsNullOrEmpty(fileOpenInfo.FilePath)) + { + Debug.LogWarning("Failed to open test method source code in external editor. Inconsistent filename and yield return operator in target method."); + + return; + } + + if (fileOpenInfo.LineNumber == 1) + { + Debug.LogWarning("Failed to get a line number for unity test method. So please find it in opened file in external editor."); + } + + if (!fileOpenInfo.FilePath.Contains("Assets")) + { + Editor.OpenProject(fileOpenInfo.FilePath, fileOpenInfo.LineNumber, 1); + } + else + { + AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(fileOpenInfo.FilePath, fileOpenInfo.LineNumber); + } + + } + + public IFileOpenInfo GetFileOpenInfo(Type type, MethodInfo method) + { + var fileOpenInfo = MonoCecilHelper.TryGetCecilFileOpenInfo(type, method); + if (string.IsNullOrEmpty(fileOpenInfo.FilePath)) + { + var dirPath = Paths.UnifyDirectorySeparator(Application.dataPath); + var allCsFiles = GetCSFiles(dirPath, FileExtension); + + var fileName = allCsFiles.FirstOrDefault(x => + x.Split(Path.DirectorySeparatorChar).Last().Equals(string.Concat(GetTestFileName(type), FileExtension))); + + fileOpenInfo.FilePath = fileName ?? string.Empty; + } + + if (!fileOpenInfo.FilePath.Contains("Assets")) + { + return fileOpenInfo; + } + fileOpenInfo.FilePath = FilePathToAssetsRelativeAndUnified(fileOpenInfo.FilePath); + + return fileOpenInfo; + } + + internal static string GetTestFileName(Type type) + { + //This handles the case of a test in a nested class, getting the name of the base class + if (type.FullName != null && type.Namespace!=null && type.FullName.Contains("+")) + { + var removedNamespace = type.FullName.Substring(type.Namespace.Length+1); + return removedNamespace.Substring(0,removedNamespace.IndexOf("+", StringComparison.Ordinal)); + } + return type.Name; + } + public string FilePathToAssetsRelativeAndUnified(string filePath) + { + if (string.IsNullOrEmpty(filePath)) + return string.Empty; + + filePath = Paths.UnifyDirectorySeparator(filePath); + var length = Paths.UnifyDirectorySeparator(Application.dataPath).Length - "Assets".Length; + + return filePath.Substring(length); + } + + public bool OpenScriptInExternalEditor(string stacktrace) + { + if (string.IsNullOrEmpty(stacktrace)) + return false; + + var regex = new Regex("in (?.*):{1}(?[0-9]+)"); + + var matchingLines = stacktrace.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries).Where(x => regex.IsMatch(x)).ToList(); + if (!matchingLines.Any()) + return false; + + var fileOpenInfos = matchingLines + .Select(x => regex.Match(x)) + .Select(x => + new FileOpenInfo + { + FilePath = x.Groups["path"].Value, + LineNumber = int.Parse(x.Groups["line"].Value) + }).ToList(); + + var fileOpenInfo = fileOpenInfos + .FirstOrDefault(openInfo => !string.IsNullOrEmpty(openInfo.FilePath) && File.Exists(openInfo.FilePath)); + + if (fileOpenInfo == null) + { + return false; + } + + var filePath = FilePathToAssetsRelativeAndUnified(fileOpenInfo.FilePath); + AssetsDatabaseHelper.OpenAssetInItsDefaultExternalEditor(filePath, fileOpenInfo.LineNumber); + + return true; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta new file mode 100644 index 0000000..a1512d0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/GuiHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0138170d24533e47b8e6c250c6d7fbc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs new file mode 100644 index 0000000..3e26c53 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal interface IAssetsDatabaseHelper + { + void OpenAssetInItsDefaultExternalEditor(string assetPath, int line); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta new file mode 100644 index 0000000..622fe68 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IAssetsDatabaseHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 208e46d59ff6e304db0318377d20f5a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IGuiHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IGuiHelper.cs new file mode 100644 index 0000000..a87fb8d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IGuiHelper.cs @@ -0,0 +1,13 @@ +using System; +using System.Reflection; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal interface IGuiHelper + { + bool OpenScriptInExternalEditor(string stacktrace); + void OpenScriptInExternalEditor(Type type, MethodInfo method); + IFileOpenInfo GetFileOpenInfo(Type type, MethodInfo method); + string FilePathToAssetsRelativeAndUnified(string filePath); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta new file mode 100644 index 0000000..9c6e266 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/IGuiHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd57cf917f61bbb42b8f030436426ddd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder.meta new file mode 100644 index 0000000..e682923 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07ea0326ed848fb4489187cb58f96113 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs new file mode 100644 index 0000000..34118d6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs @@ -0,0 +1,12 @@ +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class RenderingOptions + { + public string nameFilter; + public bool showSucceeded; + public bool showFailed; + public bool showIgnored; + public bool showNotRunned; + public string[] categories; + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta new file mode 100644 index 0000000..57e6748 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/RenderingOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 87357ff0dec4ef348a295235835c6ee4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs new file mode 100644 index 0000000..7d7b7ff --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs @@ -0,0 +1,174 @@ +// **************************************************************** +// Based on nUnit 2.6.2 (http://www.nunit.org/) +// **************************************************************** + +using System; +using System.Collections.Generic; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + /// + /// Summary description for ResultSummarizer. + /// + internal class ResultSummarizer + { + private int m_ErrorCount = -1; + private int m_FailureCount; + private int m_IgnoreCount = -1; + private int m_InconclusiveCount = -1; + private int m_NotRunnable = -1; + private int m_ResultCount; + private int m_SkipCount; + private int m_SuccessCount; + private int m_TestsRun; + + private TimeSpan m_Duration = TimeSpan.FromSeconds(0); + + public ResultSummarizer(IEnumerable results) + { + foreach (var result in results) + Summarize(result); + } + + public bool success + { + get { return m_FailureCount == 0; } + } + + /// + /// Returns the number of test cases for which results + /// have been summarized. Any tests excluded by use of + /// Category or Explicit attributes are not counted. + /// + public int ResultCount + { + get { return m_ResultCount; } + } + + /// + /// Returns the number of test cases actually run, which + /// is the same as ResultCount, less any Skipped, Ignored + /// or NonRunnable tests. + /// + public int TestsRun + { + get { return m_TestsRun; } + } + + /// + /// Returns the number of tests that passed + /// + public int Passed + { + get { return m_SuccessCount; } + } + + /// + /// Returns the number of test cases that had an error. + /// + public int errors + { + get { return m_ErrorCount; } + } + + /// + /// Returns the number of test cases that failed. + /// + public int failures + { + get { return m_FailureCount; } + } + + /// + /// Returns the number of test cases that failed. + /// + public int inconclusive + { + get { return m_InconclusiveCount; } + } + + /// + /// Returns the number of test cases that were not runnable + /// due to errors in the signature of the class or method. + /// Such tests are also counted as Errors. + /// + public int notRunnable + { + get { return m_NotRunnable; } + } + + /// + /// Returns the number of test cases that were skipped. + /// + public int Skipped + { + get { return m_SkipCount; } + } + + public int ignored + { + get { return m_IgnoreCount; } + } + + public double duration + { + get { return m_Duration.TotalSeconds; } + } + + public int testsNotRun + { + get { return m_SkipCount + m_IgnoreCount + m_NotRunnable; } + } + + public void Summarize(TestRunnerResult result) + { + m_Duration += TimeSpan.FromSeconds(result.duration); + m_ResultCount++; + + if (result.resultStatus != TestRunnerResult.ResultStatus.NotRun) + { + //TODO implement missing features + // if(result.IsIgnored) + // { + // m_IgnoreCount++; + // return; + // } + + m_SkipCount++; + return; + } + + switch (result.resultStatus) + { + case TestRunnerResult.ResultStatus.Passed: + m_SuccessCount++; + m_TestsRun++; + break; + case TestRunnerResult.ResultStatus.Failed: + m_FailureCount++; + m_TestsRun++; + break; + //TODO implement missing features + // case TestResultState.Error: + // case TestResultState.Cancelled: + // m_ErrorCount++; + // m_TestsRun++; + // break; + // case TestResultState.Inconclusive: + // m_InconclusiveCount++; + // m_TestsRun++; + // break; + // case TestResultState.NotRunnable: + // m_NotRunnable++; + // // errorCount++; + // break; + // case TestResultState.Ignored: + // m_IgnoreCount++; + // break; + default: + m_SkipCount++; + break; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta new file mode 100644 index 0000000..bc4b465 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/ResultSummarizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95a2914724952ef40bb590d0607fc878 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs new file mode 100644 index 0000000..10f96bf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs @@ -0,0 +1,104 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestFilterSettings + { + public bool showSucceeded; + public bool showFailed; + public bool showIgnored; + public bool showNotRun; + + public string filterByName; + public int filterByCategory; + + private GUIContent m_SucceededBtn; + private GUIContent m_FailedBtn; + private GUIContent m_IgnoredBtn; + private GUIContent m_NotRunBtn; + + public string[] availableCategories; + + private readonly string m_PrefsKey; + + public TestFilterSettings(string prefsKey) + { + availableCategories = null; + m_PrefsKey = prefsKey; + Load(); + UpdateCounters(Enumerable.Empty()); + } + + public void Load() + { + showSucceeded = EditorPrefs.GetBool(m_PrefsKey + ".ShowSucceeded", true); + showFailed = EditorPrefs.GetBool(m_PrefsKey + ".ShowFailed", true); + showIgnored = EditorPrefs.GetBool(m_PrefsKey + ".ShowIgnored", true); + showNotRun = EditorPrefs.GetBool(m_PrefsKey + ".ShowNotRun", true); + filterByName = EditorPrefs.GetString(m_PrefsKey + ".FilterByName", string.Empty); + filterByCategory = EditorPrefs.GetInt(m_PrefsKey + ".FilterByCategory", 0); + } + + public void Save() + { + EditorPrefs.SetBool(m_PrefsKey + ".ShowSucceeded", showSucceeded); + EditorPrefs.SetBool(m_PrefsKey + ".ShowFailed", showFailed); + EditorPrefs.SetBool(m_PrefsKey + ".ShowIgnored", showIgnored); + EditorPrefs.SetBool(m_PrefsKey + ".ShowNotRun", showNotRun); + EditorPrefs.SetString(m_PrefsKey + ".FilterByName", filterByName); + EditorPrefs.SetInt(m_PrefsKey + ".FilterByCategory", filterByCategory); + } + + public void UpdateCounters(IEnumerable results) + { + var summary = new ResultSummarizer(results); + + m_SucceededBtn = new GUIContent(summary.Passed.ToString(), Icons.s_SuccessImg, "Show tests that succeeded"); + m_FailedBtn = new GUIContent((summary.errors + summary.failures + summary.inconclusive).ToString(), Icons.s_FailImg, "Show tests that failed"); + m_IgnoredBtn = new GUIContent((summary.ignored + summary.notRunnable).ToString(), Icons.s_IgnoreImg, "Show tests that are ignored"); + m_NotRunBtn = new GUIContent((summary.testsNotRun - summary.ignored - summary.notRunnable).ToString(), Icons.s_UnknownImg, "Show tests that didn't run"); + } + + public string[] GetSelectedCategories() + { + if (availableCategories == null) + return new string[0]; + + return availableCategories.Where((c, i) => (filterByCategory & (1 << i)) != 0).ToArray(); + } + + public void OnGUI() + { + EditorGUI.BeginChangeCheck(); + + filterByName = GUILayout.TextField(filterByName, "ToolbarSeachTextField", GUILayout.MinWidth(100), GUILayout.MaxWidth(250), GUILayout.ExpandWidth(true)); + if (GUILayout.Button(GUIContent.none, string.IsNullOrEmpty(filterByName) ? "ToolbarSeachCancelButtonEmpty" : "ToolbarSeachCancelButton")) + filterByName = string.Empty; + + if (availableCategories != null && availableCategories.Length > 0) + filterByCategory = EditorGUILayout.MaskField(filterByCategory, availableCategories, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(90)); + + showSucceeded = GUILayout.Toggle(showSucceeded, m_SucceededBtn, EditorStyles.toolbarButton); + showFailed = GUILayout.Toggle(showFailed, m_FailedBtn, EditorStyles.toolbarButton); + showIgnored = GUILayout.Toggle(showIgnored, m_IgnoredBtn, EditorStyles.toolbarButton); + showNotRun = GUILayout.Toggle(showNotRun, m_NotRunBtn, EditorStyles.toolbarButton); + + if (EditorGUI.EndChangeCheck()) + Save(); + } + + public RenderingOptions BuildRenderingOptions() + { + var options = new RenderingOptions(); + options.showSucceeded = showSucceeded; + options.showFailed = showFailed; + options.showIgnored = showIgnored; + options.showNotRunned = showNotRun; + options.nameFilter = filterByName; + options.categories = GetSelectedCategories(); + return options; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta new file mode 100644 index 0000000..af8b799 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestFilterSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 046c3854296c5ec48bac50da6ca248ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs new file mode 100644 index 0000000..63965af --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs @@ -0,0 +1,110 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Filters; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestTreeViewBuilder + { + public List results = new List(); + private readonly List m_OldTestResultList; + private readonly TestRunnerUIFilter m_UIFilter; + private readonly ITestAdaptor m_TestListRoot; + + private readonly List m_AvailableCategories = new List(); + + public string[] AvailableCategories + { + get { return m_AvailableCategories.Distinct().OrderBy(a => a).ToArray(); } + } + + public TestTreeViewBuilder(ITestAdaptor tests, List oldTestResultResults, TestRunnerUIFilter uiFilter) + { + m_AvailableCategories.Add(CategoryFilterExtended.k_DefaultCategory); + m_OldTestResultList = oldTestResultResults; + m_TestListRoot = tests; + m_UIFilter = uiFilter; + } + + public TreeViewItem BuildTreeView(TestFilterSettings settings, bool sceneBased, string sceneName) + { + var rootItem = new TreeViewItem(int.MaxValue, 0, null, "Invisible Root Item"); + ParseTestTree(0, rootItem, m_TestListRoot); + return rootItem; + } + + private bool IsFilteredOutByUIFilter(ITestAdaptor test, TestRunnerResult result) + { + if (m_UIFilter.PassedHidden && result.resultStatus == TestRunnerResult.ResultStatus.Passed) + return true; + if (m_UIFilter.FailedHidden && (result.resultStatus == TestRunnerResult.ResultStatus.Failed || result.resultStatus == TestRunnerResult.ResultStatus.Inconclusive)) + return true; + if (m_UIFilter.NotRunHidden && (result.resultStatus == TestRunnerResult.ResultStatus.NotRun || result.resultStatus == TestRunnerResult.ResultStatus.Skipped)) + return true; + if (m_UIFilter.CategoryFilter.Length > 0) + return !test.Categories.Any(category => m_UIFilter.CategoryFilter.Contains(category)); + return false; + } + + private void ParseTestTree(int depth, TreeViewItem rootItem, ITestAdaptor testElement) + { + m_AvailableCategories.AddRange(testElement.Categories); + + var testElementId = testElement.UniqueName; + if (!testElement.HasChildren) + { + var result = m_OldTestResultList.FirstOrDefault(a => a.uniqueId == testElementId); + + if (result != null && + (result.ignoredOrSkipped + || result.notRunnable + || testElement.RunState == RunState.NotRunnable + || testElement.RunState == RunState.Ignored + || testElement.RunState == RunState.Skipped + ) + ) + { + //if the test was or becomes ignored or not runnable, we recreate the result in case it has changed + result = null; + } + if (result == null) + { + result = new TestRunnerResult(testElement); + } + results.Add(result); + + var test = new TestTreeViewItem(testElement, depth, rootItem); + if (!IsFilteredOutByUIFilter(testElement, result)) + rootItem.AddChild(test); + test.SetResult(result); + return; + } + + var groupResult = m_OldTestResultList.FirstOrDefault(a => a.uniqueId == testElementId); + if (groupResult == null) + { + groupResult = new TestRunnerResult(testElement); + } + + results.Add(groupResult); + var group = new TestTreeViewItem(testElement, depth, rootItem); + group.SetResult(groupResult); + + depth++; + foreach (var child in testElement.Children) + { + ParseTestTree(depth, group, child); + } + + + if (testElement.IsTestAssembly && !testElement.HasChildren) + return; + + if (group.hasChildren) + rootItem.AddChild(group); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta new file mode 100644 index 0000000..68a6c25 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListBuilder/TestTreeViewBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e17c88b021c2a4c409b3f15b0d80ac62 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs new file mode 100644 index 0000000..05cadba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs @@ -0,0 +1,135 @@ +using System; +using System.IO; +using System.Linq; +using UnityEditor.ProjectWindowCallback; +using UnityEditor.Scripting.ScriptCompilation; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestListGUIHelper + { + private const string kResourcesTemplatePath = "Resources/ScriptTemplates"; + private const string kAssemblyDefinitionTestTemplate = "92-Assembly Definition-NewTestAssembly.asmdef.txt"; + + private const string kAssemblyDefinitionEditModeTestTemplate = + "92-Assembly Definition-NewEditModeTestAssembly.asmdef.txt"; + + private const string kTestScriptTemplate = "83-C# Script-NewTestScript.cs.txt"; + private const string kNewTestScriptName = "NewTestScript.cs"; + private const string kNunit = "nunit.framework.dll"; + + [MenuItem("Assets/Create/Testing/Tests Assembly Folder", false, 83)] + public static void MenuItemAddFolderAndAsmDefForTesting() + { + AddFolderAndAsmDefForTesting(); + } + + [MenuItem("Assets/Create/Testing/Tests Assembly Folder", true, 83)] + public static bool MenuItemAddFolderAndAsmDefForTestingWithValidation() + { + return !SelectedFolderContainsTestAssembly(); + } + + public static void AddFolderAndAsmDefForTesting(bool isEditorOnly = false) + { + ProjectWindowUtil.CreateFolderWithTemplates("Tests", + isEditorOnly ? kAssemblyDefinitionEditModeTestTemplate : kAssemblyDefinitionTestTemplate); + } + + public static bool SelectedFolderContainsTestAssembly() + { + var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly(); + if (theNearestCustomScriptAssembly != null) + { + return theNearestCustomScriptAssembly.PrecompiledReferences != null && theNearestCustomScriptAssembly.PrecompiledReferences.Any(x => Path.GetFileName(x) == kNunit); + } + + return false; + } + + [MenuItem("Assets/Create/Testing/C# Test Script", false, 83)] + public static void AddTest() + { + var basePath = Path.Combine(EditorApplication.applicationContentsPath, kResourcesTemplatePath); + var destPath = Path.Combine(GetActiveFolderPath(), kNewTestScriptName); + var templatePath = Path.Combine(basePath, kTestScriptTemplate); + var icon = EditorGUIUtility.IconContent("cs Script Icon").image as Texture2D; + ProjectWindowUtil.StartNameEditingIfProjectWindowExists(0, + ScriptableObject.CreateInstance(), destPath, icon, templatePath); + + AssetDatabase.Refresh(); + } + + [MenuItem("Assets/Create/Testing/C# Test Script", true, 83)] + public static bool CanAddScriptAndItWillCompile() + { + return CanAddEditModeTestScriptAndItWillCompile() || CanAddPlayModeTestScriptAndItWillCompile(); + } + + public static bool CanAddEditModeTestScriptAndItWillCompile() + { + var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly(); + if (theNearestCustomScriptAssembly != null) + { + return (theNearestCustomScriptAssembly.AssemblyFlags & AssemblyFlags.EditorOnly) == + AssemblyFlags.EditorOnly; + } + + var activeFolderPath = GetActiveFolderPath(); + return activeFolderPath.ToLower().Contains("/editor"); + } + + public static bool CanAddPlayModeTestScriptAndItWillCompile() + { + if (PlayerSettings.playModeTestRunnerEnabled) + { + return true; + } + + var theNearestCustomScriptAssembly = GetTheNearestCustomScriptAssembly(); + + if (theNearestCustomScriptAssembly == null) + { + return false; + } + + var hasTestAssemblyFlag = theNearestCustomScriptAssembly.PrecompiledReferences != null && theNearestCustomScriptAssembly.PrecompiledReferences.Any(x => Path.GetFileName(x) == kNunit);; + var editorOnlyAssembly = (theNearestCustomScriptAssembly.AssemblyFlags & AssemblyFlags.EditorOnly) != 0; + + return hasTestAssemblyFlag && !editorOnlyAssembly; + } + + public static string GetActiveFolderPath() + { + var path = "Assets"; + + foreach (var obj in Selection.GetFiltered(typeof(UnityEngine.Object), SelectionMode.Assets)) + { + path = AssetDatabase.GetAssetPath(obj); + if (!string.IsNullOrEmpty(path) && File.Exists(path)) + { + path = Path.GetDirectoryName(path); + break; + } + } + return path; + } + + private static CustomScriptAssembly GetTheNearestCustomScriptAssembly() + { + CustomScriptAssembly findCustomScriptAssemblyFromScriptPath; + try + { + findCustomScriptAssemblyFromScriptPath = + EditorCompilationInterface.Instance.FindCustomScriptAssemblyFromScriptPath( + Path.Combine(GetActiveFolderPath(), "Foo.cs")); + } + catch (Exception) + { + return null; + } + return findCustomScriptAssemblyFromScriptPath; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta new file mode 100644 index 0000000..70d8f19 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListGuiHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 97a05971510726f438153cd4987526fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView.meta new file mode 100644 index 0000000..63ce2ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68cb547af0187634aad591a09c01cd5b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs new file mode 100644 index 0000000..52c94a5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal static class Icons + { + public static readonly Texture2D s_FailImg; + public static readonly Texture2D s_IgnoreImg; + public static readonly Texture2D s_SuccessImg; + public static readonly Texture2D s_UnknownImg; + public static readonly Texture2D s_InconclusiveImg; + public static readonly Texture2D s_StopwatchImg; + + static Icons() + { + s_FailImg = EditorGUIUtility.IconContent("TestFailed").image as Texture2D; + s_IgnoreImg = EditorGUIUtility.IconContent("TestIgnored").image as Texture2D; + s_SuccessImg = EditorGUIUtility.IconContent("TestPassed").image as Texture2D; + s_UnknownImg = EditorGUIUtility.IconContent("TestNormal").image as Texture2D; + s_InconclusiveImg = EditorGUIUtility.IconContent("TestInconclusive").image as Texture2D; + s_StopwatchImg = EditorGUIUtility.IconContent("TestStopwatch").image as Texture2D; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta new file mode 100644 index 0000000..3ddb7ee --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/Icons.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27769e9b00b038d47aefe306a4d20bec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs new file mode 100644 index 0000000..454af2a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs @@ -0,0 +1,98 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestListTreeViewDataSource : TreeViewDataSource + { + private bool m_ExpandTreeOnCreation; + private readonly TestListGUI m_TestListGUI; + private ITestAdaptor m_RootTest; + + public TestListTreeViewDataSource(TreeViewController testListTree, TestListGUI testListGUI, ITestAdaptor rootTest) : base(testListTree) + { + showRootItem = false; + rootIsCollapsable = false; + m_TestListGUI = testListGUI; + m_RootTest = rootTest; + } + + public void UpdateRootTest(ITestAdaptor rootTest) + { + m_RootTest = rootTest; + } + + public override void FetchData() + { + var sceneName = SceneManager.GetActiveScene().name; + if (sceneName.StartsWith("InitTestScene")) + sceneName = PlaymodeTestsController.GetController().settings.originalScene; + + var testListBuilder = new TestTreeViewBuilder(m_RootTest, m_TestListGUI.newResultList, m_TestListGUI.m_TestRunnerUIFilter); + + m_RootItem = testListBuilder.BuildTreeView(null, false, sceneName); + SetExpanded(m_RootItem, true); + if (m_RootItem.hasChildren && m_RootItem.children.Count == 1) + SetExpanded(m_RootItem.children[0], true); + + if (m_ExpandTreeOnCreation) + SetExpandedWithChildren(m_RootItem, true); + + m_TestListGUI.newResultList = new List(testListBuilder.results); + m_TestListGUI.m_TestRunnerUIFilter.availableCategories = testListBuilder.AvailableCategories; + m_NeedRefreshRows = true; + } + + public override bool IsRenamingItemAllowed(TreeViewItem item) + { + return false; + } + + public void ExpandTreeOnCreation() + { + m_ExpandTreeOnCreation = true; + } + + public override bool IsExpandable(TreeViewItem item) + { + if (item is TestTreeViewItem) + return ((TestTreeViewItem)item).IsGroupNode; + return base.IsExpandable(item); + } + + protected override List Search(TreeViewItem rootItem, string search) + { + var result = new List(); + + if (rootItem.hasChildren) + { + foreach (var child in rootItem.children) + { + SearchTestTree(child, search, result); + } + } + return result; + } + + protected void SearchTestTree(TreeViewItem item, string search, IList searchResult) + { + var testItem = item as TestTreeViewItem; + if (!testItem.IsGroupNode) + { + if (testItem.FullName.ToLower().Contains(search)) + { + searchResult.Add(item); + } + } + else if (item.children != null) + { + foreach (var child in item.children) + SearchTestTree(child, search, searchResult); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta new file mode 100644 index 0000000..5ec5332 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewDataSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce87c287371edde43a4b5fcfdee7b9ef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs new file mode 100644 index 0000000..6657813 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs @@ -0,0 +1,11 @@ +using UnityEditor.IMGUI.Controls; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class TestListTreeViewGUI : TreeViewGUI + { + public TestListTreeViewGUI(TreeViewController testListTree) : base(testListTree) + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta new file mode 100644 index 0000000..ed09e25 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestListTreeViewGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 52c907c81459f324497af504b84fd557 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs new file mode 100644 index 0000000..3c3f649 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs @@ -0,0 +1,137 @@ +using System; +using System.Reflection; +using System.Text; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal sealed class TestTreeViewItem : TreeViewItem + { + public TestRunnerResult result; + internal ITestAdaptor m_Test; + + public Type type; + public MethodInfo method; + + private const int k_ResultTestMaxLength = 15000; + + public bool IsGroupNode { get { return m_Test.IsSuite; } } + + public string FullName { get { return m_Test.FullName; } } + + public string GetAssemblyName() + { + var test = m_Test; + while (test != null) + { + if (test.IsTestAssembly) + { + return test.FullName; + } + + test = test.Parent; + } + + return null; + } + + public TestTreeViewItem(ITestAdaptor test, int depth, TreeViewItem parent) + : base(GetId(test), depth, parent, test.Name) + { + m_Test = test; + + if (test.TypeInfo != null) + { + type = test.TypeInfo.Type; + } + if (test.Method != null) + { + method = test.Method.MethodInfo; + } + + displayName = test.Name.Replace("\n", ""); + icon = Icons.s_UnknownImg; + } + + private static int GetId(ITestAdaptor test) + { + return test.UniqueName.GetHashCode(); + } + + public void SetResult(TestRunnerResult testResult) + { + result = testResult; + result.SetResultChangedCallback(ResultUpdated); + ResultUpdated(result); + } + + public string GetResultText() + { + if (result.resultStatus == TestRunnerResult.ResultStatus.NotRun) + { + return string.Empty; + } + var durationString = String.Format("{0:0.000}", result.duration); + var sb = new StringBuilder(string.Format("{0} ({1}s)", displayName.Trim(), durationString)); + if (!string.IsNullOrEmpty(result.description)) + { + sb.AppendFormat("\n{0}", result.description); + } + if (!string.IsNullOrEmpty(result.messages)) + { + sb.Append("\n---\n"); + sb.Append(result.messages.Trim()); + } + if (!string.IsNullOrEmpty(result.stacktrace)) + { + sb.Append("\n---\n"); + sb.Append(result.stacktrace.Trim()); + } + if (!string.IsNullOrEmpty(result.output)) + { + sb.Append("\n---\n"); + sb.Append(result.output.Trim()); + } + if (sb.Length > k_ResultTestMaxLength) + { + sb.Length = k_ResultTestMaxLength; + sb.AppendFormat("...\n\n---MESSAGE TRUNCATED AT {0} CHARACTERS---", k_ResultTestMaxLength); + } + return sb.ToString().Trim(); + } + + private void ResultUpdated(TestRunnerResult testResult) + { + switch (testResult.resultStatus) + { + case TestRunnerResult.ResultStatus.Passed: + icon = Icons.s_SuccessImg; + break; + case TestRunnerResult.ResultStatus.Failed: + icon = Icons.s_FailImg; + break; + case TestRunnerResult.ResultStatus.Inconclusive: + icon = Icons.s_InconclusiveImg; + break; + case TestRunnerResult.ResultStatus.Skipped: + icon = Icons.s_IgnoreImg; + break; + default: + if (testResult.ignoredOrSkipped) + { + icon = Icons.s_IgnoreImg; + } + else if (testResult.notRunnable) + { + icon = Icons.s_FailImg; + } + else + { + icon = Icons.s_UnknownImg; + } + break; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta new file mode 100644 index 0000000..1a29abe --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestListTreeView/TestTreeViewItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce567ddbf30368344bc7b80e20cac36e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerResult.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerResult.cs new file mode 100644 index 0000000..717cf37 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerResult.cs @@ -0,0 +1,148 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class TestRunnerResult : UITestRunnerFilter.IClearableResult + { + public string id; + public string uniqueId; + public string name; + public string fullName; + public ResultStatus resultStatus = ResultStatus.NotRun; + public float duration; + public string messages; + public string output; + public string stacktrace; + public bool notRunnable; + public bool ignoredOrSkipped; + public string description; + public bool isSuite; + public List categories; + public string parentId; + public string parentUniqueId; + + //This field is suppose to mark results from before domain reload + //Such result is outdated because the code might haev changed + //This field will get reset every time a domain reload happens + [NonSerialized] + public bool notOutdated; + + protected Action m_OnResultUpdate; + + internal TestRunnerResult(ITestAdaptor test) + { + id = test.Id; + uniqueId = test.UniqueName; + + fullName = test.FullName; + name = test.Name; + description = test.Description; + isSuite = test.IsSuite; + + ignoredOrSkipped = test.RunState == RunState.Ignored || test.RunState == RunState.Skipped; + notRunnable = test.RunState == RunState.NotRunnable; + + if (ignoredOrSkipped) + { + messages = test.SkipReason; + } + if (notRunnable) + { + resultStatus = ResultStatus.Failed; + messages = test.SkipReason; + } + categories = test.Categories.ToList(); + parentId = test.ParentId; + parentUniqueId = test.ParentUniqueName; + } + + internal TestRunnerResult(ITestResultAdaptor testResult) : this(testResult.Test) + { + notOutdated = true; + + messages = testResult.Message; + output = testResult.Output; + stacktrace = testResult.StackTrace; + duration = (float)testResult.Duration; + if (testResult.Test.IsSuite && testResult.ResultState == "Ignored") + { + resultStatus = ResultStatus.Passed; + } + else + { + resultStatus = ParseNUnitResultStatus(testResult.TestStatus); + } + } + + public void Update(TestRunnerResult result) + { + if (ReferenceEquals(result, null)) + return; + resultStatus = result.resultStatus; + duration = result.duration; + messages = result.messages; + output = result.output; + stacktrace = result.stacktrace; + ignoredOrSkipped = result.ignoredOrSkipped; + notRunnable = result.notRunnable; + description = result.description; + notOutdated = result.notOutdated; + if (m_OnResultUpdate != null) + m_OnResultUpdate(this); + } + + public void SetResultChangedCallback(Action resultUpdated) + { + m_OnResultUpdate = resultUpdated; + } + + [Serializable] + internal enum ResultStatus + { + NotRun, + Passed, + Failed, + Inconclusive, + Skipped + } + + private static ResultStatus ParseNUnitResultStatus(TestStatus status) + { + switch (status) + { + case TestStatus.Passed: + return ResultStatus.Passed; + case TestStatus.Failed: + return ResultStatus.Failed; + case TestStatus.Inconclusive: + return ResultStatus.Inconclusive; + case TestStatus.Skipped: + return ResultStatus.Skipped; + default: + return ResultStatus.NotRun; + } + } + + public override string ToString() + { + return string.Format("{0} ({1})", name, fullName); + } + + public string Id { get { return uniqueId; } } + public string FullName { get { return fullName; } } + public string ParentId { get { return parentUniqueId; } } + public bool IsSuite { get { return isSuite; } } + public List Categories { get { return categories; } } + + public void Clear() + { + resultStatus = ResultStatus.NotRun; + if (m_OnResultUpdate != null) + m_OnResultUpdate(this); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta new file mode 100644 index 0000000..771053c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a04a45bbed9e1714f9902fc9443669b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs new file mode 100644 index 0000000..c55c2b3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs @@ -0,0 +1,177 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class TestRunnerUIFilter + { + private int m_PassedCount; + private int m_FailedCount; + private int m_NotRunCount; + private int m_InconclusiveCount; + private int m_SkippedCount; + + public int PassedCount { get { return m_PassedCount; } } + public int FailedCount { get { return m_FailedCount + m_InconclusiveCount; } } + public int NotRunCount { get { return m_NotRunCount + m_SkippedCount; } } + + [SerializeField] + public bool PassedHidden; + [SerializeField] + public bool FailedHidden; + [SerializeField] + public bool NotRunHidden; + + [SerializeField] + private string m_SearchString; + [SerializeField] + private int selectedCategoryMask; + + public string[] availableCategories = new string[0]; + + + private GUIContent m_SucceededBtn; + private GUIContent m_FailedBtn; + private GUIContent m_NotRunBtn; + + public Action RebuildTestList; + public Action SearchStringChanged; + public Action SearchStringCleared; + public bool IsFiltering + { + get + { + return !string.IsNullOrEmpty(m_SearchString) || PassedHidden || FailedHidden || NotRunHidden || + selectedCategoryMask != 0; + } + } + + public string[] CategoryFilter + { + get + { + var list = new List(); + for (int i = 0; i < availableCategories.Length; i++) + { + if ((selectedCategoryMask & (1 << i)) != 0) + { + list.Add(availableCategories[i]); + } + } + return list.ToArray(); + } + } + + public void UpdateCounters(List resultList) + { + m_PassedCount = m_FailedCount = m_NotRunCount = m_InconclusiveCount = m_SkippedCount = 0; + foreach (var result in resultList) + { + if (result.isSuite) + continue; + switch (result.resultStatus) + { + case TestRunnerResult.ResultStatus.Passed: + m_PassedCount++; + break; + case TestRunnerResult.ResultStatus.Failed: + m_FailedCount++; + break; + case TestRunnerResult.ResultStatus.Inconclusive: + m_InconclusiveCount++; + break; + case TestRunnerResult.ResultStatus.Skipped: + m_SkippedCount++; + break; + case TestRunnerResult.ResultStatus.NotRun: + default: + m_NotRunCount++; + break; + } + } + + var succeededTooltip = string.Format("Show tests that succeeded\n{0} succeeded", m_PassedCount); + m_SucceededBtn = new GUIContent(PassedCount.ToString(), Icons.s_SuccessImg, succeededTooltip); + var failedTooltip = string.Format("Show tests that failed\n{0} failed\n{1} inconclusive", m_FailedCount, m_InconclusiveCount); + m_FailedBtn = new GUIContent(FailedCount.ToString(), Icons.s_FailImg, failedTooltip); + var notRunTooltip = string.Format("Show tests that didn't run\n{0} didn't run\n{1} skipped or ignored", m_NotRunCount, m_SkippedCount); + m_NotRunBtn = new GUIContent(NotRunCount.ToString(), Icons.s_UnknownImg, notRunTooltip); + } + + public void Draw() + { + EditorGUI.BeginChangeCheck(); + if (m_SearchString == null) + { + m_SearchString = ""; + } + m_SearchString = EditorGUILayout.ToolbarSearchField(m_SearchString); + if (EditorGUI.EndChangeCheck() && SearchStringChanged != null) + { + SearchStringChanged(m_SearchString); + if (String.IsNullOrEmpty(m_SearchString)) + SearchStringCleared(); + } + + if (availableCategories != null && availableCategories.Any()) + { + EditorGUI.BeginChangeCheck(); + selectedCategoryMask = EditorGUILayout.MaskField(selectedCategoryMask, availableCategories, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(150)); + if (EditorGUI.EndChangeCheck() && RebuildTestList != null) + { + RebuildTestList(); + } + } + else + { + EditorGUILayout.Popup(0, new[] { "" }, EditorStyles.toolbarDropDown, GUILayout.MaxWidth(150)); + } + + EditorGUI.BeginChangeCheck(); + if (m_SucceededBtn != null) + { + PassedHidden = !GUILayout.Toggle(!PassedHidden, m_SucceededBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(PassedCount))); + } + if (m_FailedBtn != null) + { + FailedHidden = !GUILayout.Toggle(!FailedHidden, m_FailedBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(FailedCount))); + } + if (m_NotRunBtn != null) + { + NotRunHidden = !GUILayout.Toggle(!NotRunHidden, m_NotRunBtn, EditorStyles.toolbarButton, GUILayout.MaxWidth(GetMaxWidth(NotRunCount))); + } + + if (EditorGUI.EndChangeCheck() && RebuildTestList != null) + { + RebuildTestList(); + } + } + + private static int GetMaxWidth(int count) + { + if (count < 10) + return 33; + return count < 100 ? 40 : 47; + } + + public void Clear() + { + PassedHidden = false; + FailedHidden = false; + NotRunHidden = false; + selectedCategoryMask = 0; + m_SearchString = ""; + if (SearchStringChanged != null) + { + SearchStringChanged(m_SearchString); + } + if (SearchStringCleared != null) + { + SearchStringCleared(); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta new file mode 100644 index 0000000..e65f91a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/TestRunnerUIFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15f870c6975ad6449b5b52514b90dc2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs new file mode 100644 index 0000000..a557dee --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs @@ -0,0 +1,164 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class UITestRunnerFilter + { +#pragma warning disable 649 + public string[] assemblyNames; + public string[] groupNames; + public string[] categoryNames; + public string[] testNames; + public int testRepetitions = 1; + public bool synchronousOnly = false; + + public static string AssemblyNameFromPath(string path) + { + string output = Path.GetFileName(path); + if (output != null && output.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + return output.Substring(0, output.Length - 4); + return output; + } + + private bool CategoryMatches(IEnumerable categories) + { + if (categoryNames == null || categoryNames.Length == 0) + return true; + + foreach (string category in categories) + { + if (categoryNames.Contains(category)) + return true; + } + + return false; + } + + private bool IDMatchesAssembly(string id) + { + if (AreOptionalFiltersEmpty()) + return true; + + if (assemblyNames == null || assemblyNames.Length == 0) + return true; + + int openingBracket = id.IndexOf('['); + int closingBracket = id.IndexOf(']'); + if (openingBracket >= 0 && openingBracket < id.Length && closingBracket > openingBracket && + openingBracket < id.Length) + { + //Some assemblies are absolute and explicitly part of the test ID e.g. + //"[/path/to/assembly-name.dll][rest of ID ...]" + //While some are minimal assembly names e.g. + //"[assembly-name][rest of ID ...]" + //Strip them down to just the assembly name + string assemblyNameFromID = + AssemblyNameFromPath(id.Substring(openingBracket + 1, closingBracket - openingBracket - 1)); + foreach (string assemblyName in assemblyNames) + { + if (assemblyName.Equals(assemblyNameFromID, StringComparison.OrdinalIgnoreCase)) + return true; + } + } + + return false; + } + + private bool NameMatches(string name) + { + if (AreOptionalFiltersEmpty()) + return true; + + if (groupNames == null || groupNames.Length == 0) + return true; + + foreach (var nameFromFilter in groupNames) + { + //Strict regex match for test group name on its own + if (Regex.IsMatch(name, nameFromFilter)) + return true; + //Match test names that end with parametrized test values and full nunit generated test names that have . separators + var regex = nameFromFilter.TrimEnd('$') + @"[\.|\(.*\)]"; + if (Regex.IsMatch(name, regex)) + return true; + } + + return false; + } + + private bool AreOptionalFiltersEmpty() + { + if (assemblyNames != null && assemblyNames.Length != 0) + return false; + if (groupNames != null && groupNames.Length != 0) + return false; + if (testNames != null && testNames.Length != 0) + return false; + return true; + } + + private bool NameMatchesExactly(string name) + { + if (AreOptionalFiltersEmpty()) + return true; + + if (testNames == null || testNames.Length == 0) + return true; + + foreach (var exactName in testNames) + { + if (name == exactName) + return true; + } + + return false; + } + + private static void ClearAncestors(IEnumerable newResultList, string parentID) + { + if (string.IsNullOrEmpty(parentID)) + return; + foreach (var result in newResultList) + { + if (result.Id == parentID) + { + result.Clear(); + ClearAncestors(newResultList, result.ParentId); + break; + } + } + } + + public void ClearResults(List newResultList) + { + foreach (var result in newResultList) + { + if (!result.IsSuite && CategoryMatches(result.Categories)) + { + if (IDMatchesAssembly(result.Id) && NameMatches(result.FullName) && + NameMatchesExactly(result.FullName)) + { + result.Clear(); + ClearAncestors(newResultList, result.ParentId); + } + } + } + } + + internal interface IClearableResult + { + string Id { get; } + string FullName { get; } + string ParentId { get; } + bool IsSuite { get; } + List Categories { get; } + void Clear(); + } + + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs.meta new file mode 100644 index 0000000..26ef62e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/UITestRunnerFilter.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 8069e1fc631e461ababf11f19a9c0df3 +timeCreated: 1595586126 \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views.meta new file mode 100644 index 0000000..ca14182 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c5535d742ea2e4941850b421f9c70a1f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs new file mode 100644 index 0000000..1a7d906 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs @@ -0,0 +1,92 @@ +using System; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class EditModeTestListGUI : TestListGUI + { + public override TestMode TestMode + { + get { return TestMode.EditMode; } + } + + public override void RenderNoTestsInfo() + { + if (!TestListGUIHelper.SelectedFolderContainsTestAssembly()) + { + var noTestText = "No tests to show"; + + if (!PlayerSettings.playModeTestRunnerEnabled) + { + const string testsArePulledFromCustomAssemblies = + "EditMode tests can be in Editor only Assemblies, either in the editor special folder or Editor only Assembly Definitions that references the \"nunit.framework.dll\" Assembly Reference or any of the Assembly Definition References \"UnityEngine.TestRunner\" or \"UnityEditor.TestRunner\".."; + noTestText += Environment.NewLine + testsArePulledFromCustomAssemblies; + } + + EditorGUILayout.HelpBox(noTestText, MessageType.Info); + if (GUILayout.Button("Create EditMode Test Assembly Folder")) + { + TestListGUIHelper.AddFolderAndAsmDefForTesting(isEditorOnly: true); + } + } + + if (!TestListGUIHelper.CanAddEditModeTestScriptAndItWillCompile()) + { + UnityEngine.GUI.enabled = false; + EditorGUILayout.HelpBox("EditMode test scripts can only be created in editor test assemblies.", MessageType.Warning); + } + if (GUILayout.Button("Create Test Script in current folder")) + { + TestListGUIHelper.AddTest(); + } + UnityEngine.GUI.enabled = true; + } + + public override void PrintHeadPanel() + { + base.PrintHeadPanel(); + DrawFilters(); + } + + protected override void RunTests(params UITestRunnerFilter[] filters) + { + if (EditorUtility.scriptCompilationFailed) + { + Debug.LogError("Fix compilation issues before running tests"); + return; + } + + foreach (var filter in filters) + { + filter.ClearResults(newResultList.OfType().ToList()); + } + + RerunCallbackData.instance.runFilters = filters; + RerunCallbackData.instance.testMode = TestMode.EditMode; + + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new ExecutionSettings() + { + filters = filters.Select(filter => new Filter() + { + assemblyNames = filter.assemblyNames, + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + testMode = TestMode, + testNames = filter.testNames + }).ToArray() + }); + } + + public override TestPlatform TestPlatform { get { return TestPlatform.EditMode; } } + + protected override bool IsBusy() + { + return TestRunnerApi.IsRunActive() || EditorApplication.isCompiling || EditorApplication.isPlaying; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta new file mode 100644 index 0000000..afd4abb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/EditModeTestListGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0336a32a79bfaed43a3fd2d88b91e974 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs new file mode 100644 index 0000000..4f82f47 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs @@ -0,0 +1,241 @@ +using System; +using System.IO; +using System.Linq; +using UnityEditor.SceneManagement; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + [Serializable] + internal class PlayModeTestListGUI : TestListGUI + { + private struct PlayerMenuItem + { + public GUIContent name; + public bool filterSelectedTestsOnly; + public bool buildOnly; + } + + [SerializeField] + private int m_SelectedOption; + + public override TestMode TestMode + { + get { return TestMode.PlayMode; } + } + + private string GetBuildText() + { + switch (EditorUserBuildSettings.activeBuildTarget) + { + case BuildTarget.Android: + if (EditorUserBuildSettings.exportAsGoogleAndroidProject) + return "Export"; + break; + case BuildTarget.iOS: + return "Export"; + } + return "Build"; + } + + private string PickBuildLocation() + { + var target = EditorUserBuildSettings.activeBuildTarget; + var targetGroup = BuildPipeline.GetBuildTargetGroup(target); + var lastLocation = EditorUserBuildSettings.GetBuildLocation(target); + var extension = PostprocessBuildPlayer.GetExtensionForBuildTarget(targetGroup, target, BuildOptions.None); + var defaultName = FileUtil.GetLastPathNameComponent(lastLocation); + lastLocation = string.IsNullOrEmpty(lastLocation) ? string.Empty : Path.GetDirectoryName(lastLocation); + bool updateExistingBuild; + var location = EditorUtility.SaveBuildPanel(target, $"{GetBuildText()} {target}", lastLocation, defaultName, extension, + out updateExistingBuild); + if (!string.IsNullOrEmpty(location)) + EditorUserBuildSettings.SetBuildLocation(target, location); + return location; + } + + private void ExecuteAction(PlayerMenuItem item) + { + var runSettings = new PlayerLauncherTestRunSettings(); + runSettings.buildOnly = item.buildOnly; + if (runSettings.buildOnly) + { + runSettings.buildOnlyLocationPath = PickBuildLocation(); + if (string.IsNullOrEmpty(runSettings.buildOnlyLocationPath)) + { + Debug.LogWarning("Aborting, build selection was canceled."); + return; + } + } + + if (item.filterSelectedTestsOnly) + RunTestsInPlayer(runSettings, SelectedTestsFilter); + else + { + var filter = new UITestRunnerFilter { categoryNames = m_TestRunnerUIFilter.CategoryFilter }; + RunTestsInPlayer(runSettings, filter); + } + } + + public override void PrintHeadPanel() + { + EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(false)); + base.PrintHeadPanel(); + + PlayerMenuItem[] menuItems; + + if (EditorUserBuildSettings.installInBuildFolder) + { + menuItems = new [] + { + // Note: We select here buildOnly = false, so build location dialog won't show up + // The player won't actually be ran when using together with EditorUserBuildSettings.installInBuildFolder + new PlayerMenuItem() + { + name = new GUIContent("Install All Tests In Build Folder"), buildOnly = false, filterSelectedTestsOnly = false + }, + new PlayerMenuItem() + { + name = new GUIContent("Install Selected Tests In Build Folder"), buildOnly = false, filterSelectedTestsOnly = true + } + }; + } + else + { + menuItems = new [] + { + new PlayerMenuItem() + { + name = new GUIContent("Run All Tests"), buildOnly = false, filterSelectedTestsOnly = false + }, + new PlayerMenuItem() + { + name = new GUIContent("Run Selected Tests"), buildOnly = false, filterSelectedTestsOnly = true + }, + new PlayerMenuItem() + { + name = new GUIContent($"{GetBuildText()} All Tests"), buildOnly = true, filterSelectedTestsOnly = false + }, + new PlayerMenuItem() + { + name = new GUIContent($"{GetBuildText()} Selected Tests"), buildOnly = true, filterSelectedTestsOnly = true + }, + }; + } + + m_SelectedOption = Math.Min(m_SelectedOption, menuItems.Length - 1); + var selectedMenuItem = menuItems[m_SelectedOption]; + if (GUILayout.Button( + new GUIContent($"{selectedMenuItem.name.text} ({EditorUserBuildSettings.activeBuildTarget})"), + EditorStyles.toolbarButton)) + { + ExecuteAction(selectedMenuItem); + } + + if (GUILayout.Button(GUIContent.none, EditorStyles.toolbarDropDown)) + { + Vector2 mousePos = Event.current.mousePosition; + EditorUtility.DisplayCustomMenu(new Rect(mousePos.x, mousePos.y, 0, 0), + menuItems.Select(m => m.name).ToArray(), + -1, + (object userData, string[] options, int selected) => m_SelectedOption = selected, + menuItems); + } + + EditorGUILayout.EndHorizontal(); + DrawFilters(); + EditorGUILayout.BeginHorizontal(GUILayout.ExpandHeight(false)); + EditorGUILayout.EndHorizontal(); + } + + public override void RenderNoTestsInfo() + { + if (!TestListGUIHelper.SelectedFolderContainsTestAssembly()) + { + var noTestText = "No tests to show"; + if (!PlayerSettings.playModeTestRunnerEnabled) + { + const string testsArePulledFromCustomAssemblues = "Test Assemblies are defined by Assembly Definitions that references the \"nunit.framework.dll\" Assembly Reference or the Assembly Definition Reference \"UnityEngine.TestRunner\"."; + const string infoTextAboutTestsInAllAssemblies = + "To have tests in all assemblies enable it in the Test Runner window context menu"; + noTestText += Environment.NewLine + testsArePulledFromCustomAssemblues + Environment.NewLine + + infoTextAboutTestsInAllAssemblies; + } + + EditorGUILayout.HelpBox(noTestText, MessageType.Info); + if (GUILayout.Button("Create PlayMode Test Assembly Folder")) + { + TestListGUIHelper.AddFolderAndAsmDefForTesting(); + } + } + + if (!TestListGUIHelper.CanAddPlayModeTestScriptAndItWillCompile()) + { + UnityEngine.GUI.enabled = false; + EditorGUILayout.HelpBox("PlayMode test scripts can only be created in non editor test assemblies.", MessageType.Warning); + } + if (GUILayout.Button("Create Test Script in current folder")) + { + TestListGUIHelper.AddTest(); + } + UnityEngine.GUI.enabled = true; + } + + protected override void RunTests(UITestRunnerFilter[] filters) + { + foreach (var filter in filters) + { + filter.ClearResults(newResultList.OfType().ToList()); + } + + RerunCallbackData.instance.runFilters = filters; + RerunCallbackData.instance.testMode = TestMode.PlayMode; + + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new ExecutionSettings() + { + filters = filters.Select(filter => new Filter() + { + assemblyNames = filter.assemblyNames, + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + testMode = TestMode, + testNames = filter.testNames + }).ToArray() + }); + } + + + protected void RunTestsInPlayer(PlayerLauncherTestRunSettings runSettings, params UITestRunnerFilter[] filters) + { + foreach (var filter in filters) + { + filter.ClearResults(newResultList.OfType().ToList()); + } + + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new ExecutionSettings() + { + overloadTestRunSettings = runSettings, + filters = filters.Select(filter => new Filter() + { + assemblyNames = filter.assemblyNames, + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + testMode = TestMode, + testNames = filter.testNames + }).ToArray(), + targetPlatform = EditorUserBuildSettings.activeBuildTarget + }); + } + + public override TestPlatform TestPlatform { get { return TestPlatform.PlayMode; } } + + protected override bool IsBusy() + { + return TestRunnerApi.IsRunActive() || PlaymodeLauncher.IsRunning || EditorApplication.isCompiling || EditorApplication.isPlaying; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta new file mode 100644 index 0000000..6f0c1d6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/PlayModeTestListGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3efd39f2cfb43a4c830d4fd5689900f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs new file mode 100644 index 0000000..ae633ba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs @@ -0,0 +1,540 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text.RegularExpressions; +using UnityEditor.IMGUI.Controls; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal abstract class TestListGUI + { + private static readonly GUIContent s_GUIRunSelectedTests = EditorGUIUtility.TrTextContent("Run Selected", "Run selected test(s)"); + private static readonly GUIContent s_GUIRunAllTests = EditorGUIUtility.TrTextContent("Run All", "Run all tests"); + private static readonly GUIContent s_GUIRerunFailedTests = EditorGUIUtility.TrTextContent("Rerun Failed", "Rerun all failed tests"); + private static readonly GUIContent s_GUIRun = EditorGUIUtility.TrTextContent("Run"); + private static readonly GUIContent s_GUIRunUntilFailed = EditorGUIUtility.TrTextContent("Run Until Failed"); + private static readonly GUIContent s_GUIRun100Times = EditorGUIUtility.TrTextContent("Run 100 times"); + private static readonly GUIContent s_GUIOpenTest = EditorGUIUtility.TrTextContent("Open source code"); + private static readonly GUIContent s_GUIOpenErrorLine = EditorGUIUtility.TrTextContent("Open error line"); + private static readonly GUIContent s_GUIClearResults = EditorGUIUtility.TrTextContent("Clear Results", "Clear all test results"); + + [SerializeField] + protected TestRunnerWindow m_Window; + [SerializeField] + public List newResultList = new List(); + [SerializeField] + private string m_ResultText; + [SerializeField] + private string m_ResultStacktrace; + + private TreeViewController m_TestListTree; + [SerializeField] + internal TreeViewState m_TestListState; + [SerializeField] + internal TestRunnerUIFilter m_TestRunnerUIFilter = new TestRunnerUIFilter(); + + private Vector2 m_TestInfoScroll, m_TestListScroll; + private string m_PreviousProjectPath; + private List m_QueuedResults = new List(); + + protected TestListGUI() + { + MonoCecilHelper = new MonoCecilHelper(); + AssetsDatabaseHelper = new AssetsDatabaseHelper(); + + GuiHelper = new GuiHelper(MonoCecilHelper, AssetsDatabaseHelper); + } + + protected IMonoCecilHelper MonoCecilHelper { get; private set; } + protected IAssetsDatabaseHelper AssetsDatabaseHelper { get; private set; } + protected IGuiHelper GuiHelper { get; private set; } + protected UITestRunnerFilter[] SelectedTestsFilter => GetSelectedTestsAsFilter(m_TestListTree.GetSelection()); + + public abstract TestMode TestMode { get; } + + public virtual void PrintHeadPanel() + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + using (new EditorGUI.DisabledScope(IsBusy())) + { + if (GUILayout.Button(s_GUIRunAllTests, EditorStyles.toolbarButton)) + { + var filter = new UITestRunnerFilter {categoryNames = m_TestRunnerUIFilter.CategoryFilter}; + RunTests(filter); + GUIUtility.ExitGUI(); + } + } + using (new EditorGUI.DisabledScope(m_TestListTree == null || !m_TestListTree.HasSelection() || IsBusy())) + { + if (GUILayout.Button(s_GUIRunSelectedTests, EditorStyles.toolbarButton)) + { + RunTests(SelectedTestsFilter); + GUIUtility.ExitGUI(); + } + } + using (new EditorGUI.DisabledScope(m_TestRunnerUIFilter.FailedCount == 0 || IsBusy())) + { + if (GUILayout.Button(s_GUIRerunFailedTests, EditorStyles.toolbarButton)) + { + var failedTestnames = new List(); + foreach (var result in newResultList) + { + if (result.isSuite) + continue; + if (result.resultStatus == TestRunnerResult.ResultStatus.Failed || + result.resultStatus == TestRunnerResult.ResultStatus.Inconclusive) + failedTestnames.Add(result.fullName); + } + RunTests(new UITestRunnerFilter() {testNames = failedTestnames.ToArray(), categoryNames = m_TestRunnerUIFilter.CategoryFilter}); + GUIUtility.ExitGUI(); + } + } + using (new EditorGUI.DisabledScope(IsBusy())) + { + if (GUILayout.Button(s_GUIClearResults, EditorStyles.toolbarButton)) + { + foreach (var result in newResultList) + { + result.Clear(); + } + m_TestRunnerUIFilter.UpdateCounters(newResultList); + Reload(); + GUIUtility.ExitGUI(); + } + } + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + } + + protected void DrawFilters() + { + EditorGUILayout.BeginHorizontal(EditorStyles.toolbar); + m_TestRunnerUIFilter.Draw(); + EditorGUILayout.EndHorizontal(); + } + + public bool HasTreeData() + { + return m_TestListTree != null; + } + + public virtual void RenderTestList() + { + if (m_TestListTree == null) + { + GUILayout.Label("Loading..."); + return; + } + + m_TestListScroll = EditorGUILayout.BeginScrollView(m_TestListScroll, + GUILayout.ExpandWidth(true), + GUILayout.MaxWidth(2000)); + + if (m_TestListTree.data.root == null || m_TestListTree.data.rowCount == 0 || (!m_TestListTree.isSearching && !m_TestListTree.data.GetItem(0).hasChildren)) + { + if (m_TestRunnerUIFilter.IsFiltering) + { + if (GUILayout.Button("Clear filters")) + { + m_TestRunnerUIFilter.Clear(); + m_TestListTree.ReloadData(); + m_Window.Repaint(); + } + } + RenderNoTestsInfo(); + } + else + { + var treeRect = EditorGUILayout.GetControlRect(GUILayout.ExpandHeight(true), GUILayout.ExpandWidth(true)); + var treeViewKeyboardControlId = GUIUtility.GetControlID(FocusType.Keyboard); + + m_TestListTree.OnGUI(treeRect, treeViewKeyboardControlId); + } + + EditorGUILayout.EndScrollView(); + } + + public virtual void RenderNoTestsInfo() + { + EditorGUILayout.HelpBox("No tests to show", MessageType.Info); + } + + public void RenderDetails() + { + m_TestInfoScroll = EditorGUILayout.BeginScrollView(m_TestInfoScroll); + var resultTextSize = TestRunnerWindow.Styles.info.CalcSize(new GUIContent(m_ResultText)); + EditorGUILayout.SelectableLabel(m_ResultText, TestRunnerWindow.Styles.info, + GUILayout.ExpandHeight(true), + GUILayout.ExpandWidth(true), + GUILayout.MinWidth(resultTextSize.x), + GUILayout.MinHeight(resultTextSize.y)); + EditorGUILayout.EndScrollView(); + } + + public void Reload() + { + if (m_TestListTree != null) + { + m_TestListTree.ReloadData(); + UpdateQueuedResults(); + } + } + + public void Repaint() + { + if (m_TestListTree == null || m_TestListTree.data.root == null) + { + return; + } + + m_TestListTree.Repaint(); + if (m_TestListTree.data.rowCount == 0) + m_TestListTree.SetSelection(new int[0], false); + TestSelectionCallback(m_TestListState.selectedIDs.ToArray()); + } + + public void Init(TestRunnerWindow window, ITestAdaptor rootTest) + { + if (m_Window == null) + { + m_Window = window; + } + + if (m_TestListTree == null) + { + if (m_TestListState == null) + { + m_TestListState = new TreeViewState(); + } + if (m_TestListTree == null) + m_TestListTree = new TreeViewController(m_Window, m_TestListState); + + m_TestListTree.deselectOnUnhandledMouseDown = false; + + m_TestListTree.selectionChangedCallback += TestSelectionCallback; + m_TestListTree.itemDoubleClickedCallback += TestDoubleClickCallback; + m_TestListTree.contextClickItemCallback += TestContextClickCallback; + + var testListTreeViewDataSource = new TestListTreeViewDataSource(m_TestListTree, this, rootTest); + + if (!newResultList.Any()) + testListTreeViewDataSource.ExpandTreeOnCreation(); + + m_TestListTree.Init(new Rect(), + testListTreeViewDataSource, + new TestListTreeViewGUI(m_TestListTree), + null); + } + + EditorApplication.update += RepaintIfProjectPathChanged; + + m_TestRunnerUIFilter.UpdateCounters(newResultList); + m_TestRunnerUIFilter.RebuildTestList = () => m_TestListTree.ReloadData(); + m_TestRunnerUIFilter.SearchStringChanged = s => m_TestListTree.searchString = s; + m_TestRunnerUIFilter.SearchStringCleared = () => FrameSelection(); + } + + public void UpdateResult(TestRunnerResult result) + { + if (!HasTreeData()) + { + m_QueuedResults.Add(result); + return; + } + + if (newResultList.All(x => x.uniqueId != result.uniqueId)) + { + return; + } + + var testRunnerResult = newResultList.FirstOrDefault(x => x.uniqueId == result.uniqueId); + if (testRunnerResult != null) + { + testRunnerResult.Update(result); + } + + Repaint(); + m_Window.Repaint(); + } + + public void UpdateTestTree(ITestAdaptor test) + { + if (!HasTreeData()) + { + return; + } + + (m_TestListTree.data as TestListTreeViewDataSource).UpdateRootTest(test); + + m_TestListTree.ReloadData(); + Repaint(); + m_Window.Repaint(); + } + + private void UpdateQueuedResults() + { + foreach (var testRunnerResult in m_QueuedResults) + { + var existingResult = newResultList.FirstOrDefault(x => x.uniqueId == testRunnerResult.uniqueId); + if (existingResult != null) + { + existingResult.Update(testRunnerResult); + } + } + m_QueuedResults.Clear(); + TestSelectionCallback(m_TestListState.selectedIDs.ToArray()); + m_TestRunnerUIFilter.UpdateCounters(newResultList); + Repaint(); + m_Window.Repaint(); + } + + internal void TestSelectionCallback(int[] selected) + { + if (m_TestListTree != null && selected.Length == 1) + { + if (m_TestListTree != null) + { + var node = m_TestListTree.FindItem(selected[0]); + if (node is TestTreeViewItem) + { + var test = node as TestTreeViewItem; + m_ResultText = test.GetResultText(); + m_ResultStacktrace = test.result.stacktrace; + } + } + } + else if (selected.Length == 0) + { + m_ResultText = ""; + } + } + + protected virtual void TestDoubleClickCallback(int id) + { + if (IsBusy()) + return; + + RunTests(GetSelectedTestsAsFilter(new List { id })); + GUIUtility.ExitGUI(); + } + + protected virtual void RunTests(params UITestRunnerFilter[] filters) + { + throw new NotImplementedException(); + } + + protected virtual void TestContextClickCallback(int id) + { + if (id == 0) + return; + + var m = new GenericMenu(); + var testFilters = GetSelectedTestsAsFilter(m_TestListState.selectedIDs); + var multilineSelection = m_TestListState.selectedIDs.Count > 1; + + if (!multilineSelection) + { + var testNode = GetSelectedTest(); + var isNotSuite = !testNode.IsGroupNode; + if (isNotSuite) + { + if (!string.IsNullOrEmpty(m_ResultStacktrace)) + { + m.AddItem(s_GUIOpenErrorLine, + false, + data => + { + if (!GuiHelper.OpenScriptInExternalEditor(m_ResultStacktrace)) + { + GuiHelper.OpenScriptInExternalEditor(testNode.type, testNode.method); + } + }, + ""); + } + + m.AddItem(s_GUIOpenTest, + false, + data => GuiHelper.OpenScriptInExternalEditor(testNode.type, testNode.method), + ""); + m.AddSeparator(""); + } + } + + if (!IsBusy()) + { + m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun, + false, + data => RunTests(testFilters), + ""); + + if (EditorPrefs.GetBool("DeveloperMode", false)) + { + m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRunUntilFailed, + false, + data => + { + foreach (var filter in testFilters) + { + filter.testRepetitions = int.MaxValue; + } + + RunTests(testFilters); + }, + ""); + + m.AddItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun100Times, + false, + data => + { + foreach (var filter in testFilters) + { + filter.testRepetitions = 100; + } + + RunTests(testFilters); + }, + ""); + } + } + else + m.AddDisabledItem(multilineSelection ? s_GUIRunSelectedTests : s_GUIRun, false); + + m.ShowAsContext(); + } + + private UITestRunnerFilter[] GetSelectedTestsAsFilter(IEnumerable selectedIDs) + { + var namesToRun = new List(); + var assembliesForNamesToRun = new List(); + var exactNamesToRun = new List(); + var assembliesToRun = new List(); + foreach (var lineId in selectedIDs) + { + var line = m_TestListTree.FindItem(lineId); + if (line is TestTreeViewItem) + { + var testLine = line as TestTreeViewItem; + if (testLine.IsGroupNode && !testLine.FullName.Contains("+")) + { + if (testLine.parent != null && testLine.parent.displayName == "Invisible Root Item") + { + //Root node selected. Use an empty TestRunnerFilter to run every test + return new[] {new UITestRunnerFilter()}; + } + + if (testLine.FullName.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) + { + assembliesToRun.Add(UITestRunnerFilter.AssemblyNameFromPath(testLine.FullName)); + } + else + { + namesToRun.Add($"^{Regex.Escape(testLine.FullName)}$"); + var assembly = UITestRunnerFilter.AssemblyNameFromPath(testLine.GetAssemblyName()); + if (!string.IsNullOrEmpty(assembly) && !assembliesForNamesToRun.Contains(assembly)) + { + assembliesForNamesToRun.Add(assembly); + } + } + } + else + { + exactNamesToRun.Add(testLine.FullName); + } + } + } + + var filters = new List(); + + if (assembliesToRun.Count > 0) + { + filters.Add(new UITestRunnerFilter() + { + assemblyNames = assembliesToRun.ToArray() + }); + } + + if (namesToRun.Count > 0) + { + filters.Add(new UITestRunnerFilter() + { + groupNames = namesToRun.ToArray(), + assemblyNames = assembliesForNamesToRun.ToArray() + }); + } + + if (exactNamesToRun.Count > 0) + { + filters.Add(new UITestRunnerFilter() + { + testNames = exactNamesToRun.ToArray() + }); + } + + if (filters.Count == 0) + { + filters.Add(new UITestRunnerFilter()); + } + + var categories = m_TestRunnerUIFilter.CategoryFilter.ToArray(); + if (categories.Length > 0) + { + foreach (var filter in filters) + { + filter.categoryNames = categories; + } + } + + return filters.ToArray(); + } + + private TestTreeViewItem GetSelectedTest() + { + foreach (var lineId in m_TestListState.selectedIDs) + { + var line = m_TestListTree.FindItem(lineId); + if (line is TestTreeViewItem) + { + return line as TestTreeViewItem; + } + } + return null; + } + + private void FrameSelection() + { + if (m_TestListTree.HasSelection()) + { + var firstClickedID = m_TestListState.selectedIDs.First() == m_TestListState.lastClickedID ? m_TestListState.selectedIDs.Last() : m_TestListState.selectedIDs.First(); + m_TestListTree.Frame(firstClickedID, true, false); + } + } + + public abstract TestPlatform TestPlatform { get; } + + public void RebuildUIFilter() + { + m_TestRunnerUIFilter.UpdateCounters(newResultList); + if (m_TestRunnerUIFilter.IsFiltering) + { + m_TestListTree.ReloadData(); + } + } + + public void RepaintIfProjectPathChanged() + { + var path = TestListGUIHelper.GetActiveFolderPath(); + if (path != m_PreviousProjectPath) + { + m_PreviousProjectPath = path; + TestRunnerWindow.s_Instance.Repaint(); + } + + EditorApplication.update -= RepaintIfProjectPathChanged; + } + + protected abstract bool IsBusy(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta new file mode 100644 index 0000000..3bef151 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/GUI/Views/TestListGUIBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8abb41ceb6f62c45a00197ae59224c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension.meta new file mode 100644 index 0000000..0c99889 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3f9202a39620f51418046c7754f215f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes.meta new file mode 100644 index 0000000..a5930f1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96c503bf059df984c86eecf572370347 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs new file mode 100644 index 0000000..e71b62c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs @@ -0,0 +1,63 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEditor.TestTools +{ + /// + /// Ignore attributes dedicated to Asset Import Pipeline backend version handling. + /// + internal static class AssetPipelineIgnore + { + internal enum AssetPipelineBackend + { + V1, + V2 + } + + /// + /// Ignore the test when running with the legacy Asset Import Pipeline V1 backend. + /// + internal class IgnoreInV1 : AssetPipelineIgnoreAttribute + { + public IgnoreInV1(string ignoreReason) : base(AssetPipelineBackend.V1, ignoreReason) {} + } + + /// + /// Ignore the test when running with the latest Asset Import Pipeline V2 backend. + /// + internal class IgnoreInV2 : AssetPipelineIgnoreAttribute + { + public IgnoreInV2(string ignoreReason) : base(AssetPipelineBackend.V2, ignoreReason) {} + } + + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + internal class AssetPipelineIgnoreAttribute : NUnitAttribute, IApplyToTest + { + readonly string m_IgnoreReason; + readonly AssetPipelineBackend m_IgnoredBackend; + static readonly AssetPipelineBackend k_ActiveBackend = AssetDatabase.IsV2Enabled() + ? AssetPipelineBackend.V2 + : AssetPipelineBackend.V1; + + static string ActiveBackendName = Enum.GetName(typeof(AssetPipelineBackend), k_ActiveBackend); + + public AssetPipelineIgnoreAttribute(AssetPipelineBackend backend, string ignoreReason) + { + m_IgnoredBackend = backend; + m_IgnoreReason = ignoreReason; + } + + public void ApplyToTest(Test test) + { + if (k_ActiveBackend == m_IgnoredBackend) + { + test.RunState = RunState.Ignored; + var skipReason = string.Format("Not supported by asset pipeline {0} backend {1}", ActiveBackendName, m_IgnoreReason); + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta new file mode 100644 index 0000000..5f7207f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/AssetPipelineIgnore.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b88caca58e05ee74486d86fb404c48e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs new file mode 100644 index 0000000..dcc5dae --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs @@ -0,0 +1,15 @@ +namespace UnityEditor.TestTools +{ + /// + /// An interface for a callback modifying the when building a player for running tests in the runtime. + /// + public interface ITestPlayerBuildModifier + { + /// + /// A callback to modify the when building a player for test run. Return the modified version of the provided build options. + /// + /// The unmodified BuildPlayerOptions. + /// The modified BuildPlayerOptions. + BuildPlayerOptions ModifyOptions(BuildPlayerOptions playerOptions); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta new file mode 100644 index 0000000..1bb36a6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/ITestPlayerBuildModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d2f47eae5f447748892c46848956d5f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs new file mode 100644 index 0000000..328e666 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs @@ -0,0 +1,25 @@ +using System; + +namespace UnityEditor.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly)] + public class TestPlayerBuildModifierAttribute : Attribute + { + private Type m_Type; + public TestPlayerBuildModifierAttribute(Type type) + { + var interfaceType = typeof(ITestPlayerBuildModifier); + if (!interfaceType.IsAssignableFrom(type)) + { + throw new ArgumentException(string.Format("Type provided to {0} does not implement {1}", this.GetType().Name, interfaceType.Name)); + } + m_Type = type; + } + + internal ITestPlayerBuildModifier ConstructModifier() + { + return Activator.CreateInstance(m_Type) as ITestPlayerBuildModifier; + } + } +} + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta new file mode 100644 index 0000000..3f9dfe3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/Attributes/TestPlayerBuildModifierAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd57b1176859fc84e93586103d3b5f73 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs new file mode 100644 index 0000000..a24190e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs @@ -0,0 +1,162 @@ +using System; +using System.Reflection; +using System.Text; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.Logging; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class TestRunnerStateSerializer : IStateSerializer + { + private const BindingFlags Flags = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance | BindingFlags.FlattenHierarchy; + + [SerializeField] + private HideFlags m_OriginalHideFlags; + + [SerializeField] + private bool m_ShouldRestore; + + [SerializeField] + private string m_TestObjectTypeName; + + [SerializeField] + private ScriptableObject m_TestObject; + + [SerializeField] + private string m_TestObjectTxt; + + [SerializeField] + private long StartTicks; + + [SerializeField] + private double StartTimeOA; + + [SerializeField] + private string output; + + [SerializeField] + private LogMatch[] m_ExpectedLogs; + + public bool ShouldRestore() + { + return m_ShouldRestore; + } + + public void SaveContext() + { + var currentContext = UnityTestExecutionContext.CurrentContext; + + if (currentContext.TestObject != null) + { + m_TestObjectTypeName = currentContext.TestObject.GetType().AssemblyQualifiedName; + m_TestObject = null; + m_TestObjectTxt = null; + if (currentContext.TestObject is ScriptableObject) + { + m_TestObject = currentContext.TestObject as ScriptableObject; + m_OriginalHideFlags = m_TestObject.hideFlags; + m_TestObject.hideFlags |= HideFlags.DontSave; + } + else + { + m_TestObjectTxt = JsonUtility.ToJson(currentContext.TestObject); + } + } + + output = currentContext.CurrentResult.Output; + StartTicks = currentContext.StartTicks; + StartTimeOA = currentContext.StartTime.ToOADate(); + if (LogScope.HasCurrentLogScope()) + { + m_ExpectedLogs = LogScope.Current.ExpectedLogs.ToArray(); + } + + m_ShouldRestore = true; + } + + public void RestoreContext() + { + var currentContext = UnityTestExecutionContext.CurrentContext; + + var outputProp = currentContext.CurrentResult.GetType().BaseType.GetField("_output", Flags); + (outputProp.GetValue(currentContext.CurrentResult) as StringBuilder).Append(output); + + currentContext.StartTicks = StartTicks; + currentContext.StartTime = DateTime.FromOADate(StartTimeOA); + if (LogScope.HasCurrentLogScope()) + { + LogScope.Current.ExpectedLogs = new Queue(m_ExpectedLogs); + } + + m_ShouldRestore = false; + } + + public bool CanRestoreFromScriptableObject(Type requestedType) + { + if (m_TestObject == null) + { + return false; + } + return m_TestObjectTypeName == requestedType.AssemblyQualifiedName; + } + + public ScriptableObject RestoreScriptableObjectInstance() + { + if (m_TestObject == null) + { + Debug.LogError("No object to restore"); + return null; + } + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + var temp = m_TestObject; + m_TestObject = null; + m_TestObjectTypeName = null; + return temp; + } + + public bool CanRestoreFromJson(Type requestedType) + { + if (string.IsNullOrEmpty(m_TestObjectTxt)) + { + return false; + } + return m_TestObjectTypeName == requestedType.AssemblyQualifiedName; + } + + public void RestoreClassFromJson(ref object instance) + { + if (string.IsNullOrEmpty(m_TestObjectTxt)) + { + Debug.LogWarning("No JSON representation to restore"); + return; + } + JsonUtility.FromJsonOverwrite(m_TestObjectTxt, instance); + m_TestObjectTxt = null; + m_TestObjectTypeName = null; + } + + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (m_TestObject == null) + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + return; + } + + //We set the DontSave flag here because the ScriptableObject would be nulled right before entering EditMode + if (state == PlayModeStateChange.ExitingPlayMode) + { + m_TestObject.hideFlags |= HideFlags.DontSave; + } + else if (state == PlayModeStateChange.EnteredEditMode) + { + m_TestObject.hideFlags = m_OriginalHideFlags; + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta new file mode 100644 index 0000000..7d36e9d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/NUnitExtension/TestRunnerStateSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 124533853216377448d786fd7c725701 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequireApiProfileAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequireApiProfileAttribute.cs new file mode 100644 index 0000000..e99d452 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequireApiProfileAttribute.cs @@ -0,0 +1,32 @@ +using System; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEditor.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + internal class RequireApiProfileAttribute : NUnitAttribute, IApplyToTest + { + public ApiCompatibilityLevel[] apiProfiles { get; private set; } + + public RequireApiProfileAttribute(params ApiCompatibilityLevel[] apiProfiles) + { + this.apiProfiles = apiProfiles; + } + + void IApplyToTest.ApplyToTest(Test test) + { + test.Properties.Add(PropertyNames.Category, string.Format("ApiProfile({0})", string.Join(", ", apiProfiles.Select(p => p.ToString()).OrderBy(p => p).ToArray()))); + ApiCompatibilityLevel testProfile = PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup); + + if (!apiProfiles.Contains(testProfile)) + { + string skipReason = "Skipping test as it requires a compatible api profile set: " + string.Join(", ", apiProfiles.Select(p => p.ToString()).ToArray()); + test.RunState = RunState.Skipped; + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta new file mode 100644 index 0000000..66d03bd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequireApiProfileAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a667f6654ad7a9548b8c8e68b51c8895 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs new file mode 100644 index 0000000..321a0fe --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs @@ -0,0 +1,33 @@ +using System; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEditor.TestTools +{ + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class RequirePlatformSupportAttribute : NUnitAttribute, IApplyToTest + { + public RequirePlatformSupportAttribute(params BuildTarget[] platforms) + { + this.platforms = platforms; + } + + public BuildTarget[] platforms { get; private set; } + + void IApplyToTest.ApplyToTest(Test test) + { + test.Properties.Add(PropertyNames.Category, string.Format("RequirePlatformSupport({0})", string.Join(", ", platforms.Select(p => p.ToString()).OrderBy(p => p).ToArray()))); + + if (!platforms.All(p => BuildPipeline.IsBuildTargetSupported(BuildTargetGroup.Unknown, p))) + { + var missingPlatforms = platforms.Where(p => !BuildPipeline.IsBuildTargetSupported(BuildTargetGroup.Unknown, p)).Select(p => p.ToString()).ToArray(); + string skipReason = "Test cannot be run as it requires support for the following platforms to be installed: " + string.Join(", ", missingPlatforms); + + test.RunState = RunState.Skipped; + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta new file mode 100644 index 0000000..8493058 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/RequirePlatformSupportAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d2146428d3f1ad54eb7326c9a44b3284 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs new file mode 100644 index 0000000..a0947cb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs @@ -0,0 +1,22 @@ +using System.Linq; +using UnityEditor.Build; + +namespace UnityEditor.TestRunner +{ + // This class is invoked from native, during build + internal class TestBuildAssemblyFilter : IFilterBuildAssemblies + { + private const string nunitAssemblyName = "nunit.framework"; + private const string unityTestRunnerAssemblyName = "UnityEngine.TestRunner"; + + public int callbackOrder { get; } + public string[] OnFilterAssemblies(BuildOptions buildOptions, string[] assemblies) + { + if ((buildOptions & BuildOptions.IncludeTestAssemblies) == BuildOptions.IncludeTestAssemblies || PlayerSettings.playModeTestRunnerEnabled) + { + return assemblies; + } + return assemblies.Where(x => !x.Contains(nunitAssemblyName) && !x.Contains(unityTestRunnerAssemblyName)).ToArray(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta new file mode 100644 index 0000000..f3cd3bd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestBuildAssemblyFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3411e19edd44cfd46b548b058c3bc36c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers.meta new file mode 100644 index 0000000..c6a951b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d64d92e4f04a13e4b99ea8d48e9e8ae9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs new file mode 100644 index 0000000..236d6a8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs @@ -0,0 +1,104 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal abstract class AttributeFinderBase : IAttributeFinder + { + public abstract IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform); + } + + internal interface IAttributeFinder + { + IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform); + } + + internal abstract class AttributeFinderBase : AttributeFinderBase where T2 : Attribute + { + private readonly Func m_TypeSelector; + protected AttributeFinderBase(Func typeSelector) + { + m_TypeSelector = typeSelector; + } + + public override IEnumerable Search(ITest tests, ITestFilter filter, RuntimePlatform testTargetPlatform) + { + var selectedTests = new List(); + GetMatchingTests(tests, filter, ref selectedTests, testTargetPlatform); + + var result = new List(); + result.AddRange(GetTypesFromPrebuildAttributes(selectedTests)); + result.AddRange(GetTypesFromInterface(selectedTests, testTargetPlatform)); + + return result.Distinct(); + } + + private static void GetMatchingTests(ITest tests, ITestFilter filter, ref List resultList, RuntimePlatform testTargetPlatform) + { + foreach (var test in tests.Tests) + { + if (IsTestEnabledOnPlatform(test, testTargetPlatform)) + { + if (test.IsSuite) + { + GetMatchingTests(test, filter, ref resultList, testTargetPlatform); + } + else + { + if (filter.Pass(test)) + resultList.Add(test); + } + } + } + } + + private static bool IsTestEnabledOnPlatform(ITest test, RuntimePlatform testTargetPlatform) + { + if (test.Method == null) + { + return true; + } + + var attributesFromMethods = test.Method.GetCustomAttributes(true).Select(attribute => attribute); + var attributesFromTypes = test.Method.TypeInfo.GetCustomAttributes(true).Select(attribute => attribute); + + if (!attributesFromMethods.All(a => a.IsPlatformSupported(testTargetPlatform))) + { + return false; + } + + if (!attributesFromTypes.All(a => a.IsPlatformSupported(testTargetPlatform))) + { + return false; + } + + return true; + } + + private IEnumerable GetTypesFromPrebuildAttributes(IEnumerable tests) + { + var allAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + allAssemblies = allAssemblies.Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEditor.TestRunner")).ToArray(); + var attributesFromAssemblies = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(T2), true).OfType()); + var attributesFromMethods = tests.SelectMany(t => t.Method.GetCustomAttributes(true).Select(attribute => attribute)); + var attributesFromTypes = tests.SelectMany(t => t.Method.TypeInfo.GetCustomAttributes(true).Select(attribute => attribute)); + + var result = new List(); + result.AddRange(attributesFromAssemblies); + result.AddRange(attributesFromMethods); + result.AddRange(attributesFromTypes); + + return result.Select(m_TypeSelector).Where(type => type != null); + } + + private static IEnumerable GetTypesFromInterface(IEnumerable selectedTests, RuntimePlatform testTargetPlatform) + { + var typesWithInterfaces = selectedTests.Where(t => typeof(T1).IsAssignableFrom(t.Method.TypeInfo.Type) && IsTestEnabledOnPlatform(t, testTargetPlatform)); + return typesWithInterfaces.Select(t => t.Method.TypeInfo.Type); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta new file mode 100644 index 0000000..19986f0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/AttributeFinderBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5d4de3d4682a8d641907cc75e4fb950e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs new file mode 100644 index 0000000..b331d15 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs @@ -0,0 +1,44 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class DelayedCallback + { + private System.Action m_Callback; + private double m_CallbackTime; + private double m_Delay; + + public DelayedCallback(System.Action function, double timeFromNow) + { + m_Callback = function; + m_CallbackTime = EditorApplication.timeSinceStartup + timeFromNow; + m_Delay = timeFromNow; + EditorApplication.update += Update; + } + + public void Clear() + { + EditorApplication.update -= Update; + m_CallbackTime = 0.0; + m_Callback = null; + } + + private void Update() + { + if (EditorApplication.timeSinceStartup > m_CallbackTime) + { + // Clear state before firing callback to ensure reset (callback could call ExitGUI) + var callback = m_Callback; + Clear(); + + callback?.Invoke(); + } + } + + public void Reset() + { + if (m_Callback != null) + { + m_CallbackTime = EditorApplication.timeSinceStartup + m_Delay; + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs.meta new file mode 100644 index 0000000..5218c8e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/DelayedCallback.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b9d121df8c444236a5b38ccfadfdd1a7 +timeCreated: 1583140472 \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs new file mode 100644 index 0000000..12683dc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs @@ -0,0 +1,161 @@ +using System; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.SceneManagement; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.GUI; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.Utils; +using UnityEngine.TestTools; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModeLauncher : TestLauncherBase + { + public static bool IsRunning; + internal readonly EditModeRunner m_EditModeRunner; + public bool launchedOutsideApi; + + // provided for backward compatibility with Rider UnitTesting prior to Rider package v.1.1.1 + public EditModeLauncher(UITestRunnerFilter filter, TestPlatform platform) + { + launchedOutsideApi = true; + var apiFilter = new[] + { + new Filter() + { + testMode = TestMode.EditMode, + testNames = filter.testNames, + categoryNames = filter.categoryNames, + groupNames = filter.groupNames, + assemblyNames = filter.assemblyNames + } + }; + + ScriptableObject.CreateInstance().Execute(new ExecutionSettings(apiFilter)); + } + + public EditModeLauncher(Filter[] filters, TestPlatform platform, bool runSynchronously) + { + TestEnumerator.Reset(); + m_EditModeRunner = ScriptableObject.CreateInstance(); + m_EditModeRunner.UnityTestAssemblyRunnerFactory = new UnityTestAssemblyRunnerFactory(); + m_EditModeRunner.Init(filters, platform, runSynchronously); + } + + public override void Run() + { + if (launchedOutsideApi) + { + // Do not use the launcher, as it will be relaunched trough the api. See ctor. + return; + } + + IsRunning = true; + + SceneSetup[] previousSceneSetup; + if (!OpenNewScene(out previousSceneSetup)) + return; + + var callback = AddEventHandler(); + callback.previousSceneSetup = previousSceneSetup; + callback.runner = m_EditModeRunner; + AddEventHandler(); + + m_EditModeRunner.Run(); + AddEventHandler(); + AddEventHandler(); + + if (m_EditModeRunner.RunningSynchronously) + m_EditModeRunner.CompleteSynchronously(); + } + + private static bool OpenNewScene(out SceneSetup[] previousSceneSetup) + { + previousSceneSetup = null; + + var sceneCount = SceneManager.sceneCount; + + var scene = SceneManager.GetSceneAt(0); + var isSceneNotPersisted = string.IsNullOrEmpty(scene.path); + + if (sceneCount == 1 && isSceneNotPersisted) + { + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single); + return true; + } + RemoveUntitledScenes(); + + // In case the user chose not to save the dirty scenes we reload them + ReloadUnsavedDirtyScene(); + + previousSceneSetup = EditorSceneManager.GetSceneManagerSetup(); + + scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Additive); + SceneManager.SetActiveScene(scene); + + return true; + } + + private static void ReloadUnsavedDirtyScene() + { + for (var i = 0; i < SceneManager.sceneCount; i++) + { + var scene = SceneManager.GetSceneAt(i); + var isSceneNotPersisted = string.IsNullOrEmpty(scene.path); + var isSceneDirty = scene.isDirty; + if (isSceneNotPersisted && isSceneDirty) + { + EditorSceneManager.ReloadScene(scene); + } + } + } + + private static void RemoveUntitledScenes() + { + int sceneCount = SceneManager.sceneCount; + + var scenesToClose = new List(); + for (var i = 0; i < sceneCount; i++) + { + var scene = SceneManager.GetSceneAt(i); + var isSceneNotPersisted = string.IsNullOrEmpty(scene.path); + if (isSceneNotPersisted) + { + scenesToClose.Add(scene); + } + } + foreach (Scene scene in scenesToClose) + { + EditorSceneManager.CloseScene(scene, true); + } + } + + public class BackgroundListener : ScriptableObject, ITestRunnerListener + { + public void RunStarted(ITest testsToRun) + { + } + + public void RunFinished(ITestResult testResults) + { + IsRunning = false; + } + + public void TestStarted(ITest test) + { + } + + public void TestFinished(ITestResult result) + { + } + } + + public T AddEventHandler() where T : ScriptableObject, ITestRunnerListener + { + return m_EditModeRunner.AddEventHandler(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta new file mode 100644 index 0000000..694d7d6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac68f5ae37c8957468562b8da42f9984 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs new file mode 100644 index 0000000..e20305c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs @@ -0,0 +1,31 @@ +using System; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModeLauncherContextSettings : IDisposable + { + private bool m_RunInBackground; + + public EditModeLauncherContextSettings() + { + SetupProjectParameters(); + } + + public void Dispose() + { + CleanupProjectParameters(); + } + + private void SetupProjectParameters() + { + m_RunInBackground = Application.runInBackground; + Application.runInBackground = true; + } + + private void CleanupProjectParameters() + { + Application.runInBackground = m_RunInBackground; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta new file mode 100644 index 0000000..2bed8fd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/EditModeLauncherContextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a582090813554df479fb9ca03e9857d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta new file mode 100644 index 0000000..4947382 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ebc4d20cc106cea49b1df1153f0b3b5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs new file mode 100644 index 0000000..e0f7277 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs @@ -0,0 +1,66 @@ +using System; +using UnityEngine; +using System.Net; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class AndroidPlatformSetup : IPlatformSetup + { + private string m_oldApplicationIdentifier; + private string m_oldDeviceSocketAddress; + [SerializeField] + private bool m_Stripping; + + public void Setup() + { + m_oldApplicationIdentifier = PlayerSettings.GetApplicationIdentifier(BuildTargetGroup.Android); + PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, "com.UnityTestRunner.UnityTestRunner"); + + m_oldDeviceSocketAddress = EditorUserBuildSettings.androidDeviceSocketAddress; + var androidDeviceConnection = Environment.GetEnvironmentVariable("ANDROID_DEVICE_CONNECTION"); + EditorUserBuildSettings.waitForPlayerConnection = true; + if (androidDeviceConnection != null) + { + EditorUserBuildSettings.androidDeviceSocketAddress = androidDeviceConnection; + } + m_Stripping = PlayerSettings.stripEngineCode; + PlayerSettings.stripEngineCode = false; + } + + public void PostBuildAction() + { + PlayerSettings.stripEngineCode = m_Stripping; + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + var connectionResult = -1; + var maxTryCount = 10; + var tryCount = maxTryCount; + while (tryCount-- > 0 && connectionResult == -1) + { + connectionResult = EditorConnectionInternal.ConnectPlayerProxy(IPAddress.Loopback.ToString(), 34999); + if (EditorUtility.DisplayCancelableProgressBar("Editor Connection", "Connecting to the player", + 1 - ((float)tryCount / maxTryCount))) + { + EditorUtility.ClearProgressBar(); + throw new TestLaunchFailedException(); + } + } + EditorUtility.ClearProgressBar(); + if (connectionResult == -1) + throw new TestLaunchFailedException( + "Timed out trying to connect to the player. Player failed to launch or crashed soon after launching"); + } + + public void CleanUp() + { + EditorUserBuildSettings.androidDeviceSocketAddress = m_oldDeviceSocketAddress; + PlayerSettings.SetApplicationIdentifier(BuildTargetGroup.Android, m_oldApplicationIdentifier); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta new file mode 100644 index 0000000..6e18a7c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/AndroidPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 961642509dec50b44a293d26240140ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs new file mode 100644 index 0000000..f625eb2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs @@ -0,0 +1,42 @@ +using System; +using System.Diagnostics; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class ApplePlatformSetup : IPlatformSetup + { + [SerializeField] + private bool m_Stripping; + + public ApplePlatformSetup(BuildTarget buildTarget) + { + } + + public void Setup() + { + // Camera and fonts are stripped out and app crashes on iOS when test runner is trying to add a scene with... camera and text + m_Stripping = PlayerSettings.stripEngineCode; + PlayerSettings.stripEngineCode = false; + } + + public void PostBuildAction() + { + // Restoring player setting as early as possible + PlayerSettings.stripEngineCode = m_Stripping; + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta new file mode 100644 index 0000000..36f22a6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/ApplePlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6c189a159d3bde4c964cee562e508ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs new file mode 100644 index 0000000..db76c21 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs @@ -0,0 +1,11 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IPlatformSetup + { + void Setup(); + void PostBuildAction(); + void PostSuccessfulBuildAction(); + void PostSuccessfulLaunchAction(); + void CleanUp(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta new file mode 100644 index 0000000..94405b5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/IPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d614808f9add8a4f8e4860db2c7af0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs new file mode 100644 index 0000000..1a0c4bf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs @@ -0,0 +1,50 @@ +using System; +using System.Threading; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class LuminPlatformSetup : IPlatformSetup + { + private const string kDeviceAddress = "127.0.0.1"; + private const int kDevicePort = 55000; + + public void Setup() + { + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + var connectionResult = -1; + var maxTryCount = 100; + var tryCount = maxTryCount; + while (tryCount-- > 0 && connectionResult == -1) + { + Thread.Sleep(1000); + connectionResult = EditorConnectionInternal.ConnectPlayerProxy(kDeviceAddress, kDevicePort); + if (EditorUtility.DisplayCancelableProgressBar("Editor Connection", "Connecting to the player", + 1 - ((float)tryCount / maxTryCount))) + { + EditorUtility.ClearProgressBar(); + throw new TestLaunchFailedException(); + } + } + EditorUtility.ClearProgressBar(); + if (connectionResult == -1) + throw new TestLaunchFailedException( + "Timed out trying to connect to the player. Player failed to launch or crashed soon after launching"); + } + + public void CleanUp() + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta new file mode 100644 index 0000000..9e4dcc5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/LuminPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c38ae0585d6a55042a2d678330689685 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs new file mode 100644 index 0000000..4c8ae77 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs @@ -0,0 +1,123 @@ +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class PlatformSpecificSetup + { + [SerializeField] + private ApplePlatformSetup m_AppleiOSPlatformSetup = new ApplePlatformSetup(BuildTarget.iOS); + [SerializeField] + private ApplePlatformSetup m_AppleTvOSPlatformSetup = new ApplePlatformSetup(BuildTarget.tvOS); + [SerializeField] + private XboxOnePlatformSetup m_XboxOnePlatformSetup = new XboxOnePlatformSetup(); + [SerializeField] + private AndroidPlatformSetup m_AndroidPlatformSetup = new AndroidPlatformSetup(); + [SerializeField] + private SwitchPlatformSetup m_SwitchPlatformSetup = new SwitchPlatformSetup(); +#if UNITY_2019_3_OR_NEWER + [SerializeField] + private StadiaPlatformSetup m_StadiaPlatformSetup = new StadiaPlatformSetup(); +#endif + [SerializeField] + private UwpPlatformSetup m_UwpPlatformSetup = new UwpPlatformSetup(); + + [SerializeField] + private LuminPlatformSetup m_LuminPlatformSetup = new LuminPlatformSetup(); + + + private IDictionary m_SetupTypes; + + [SerializeField] + private BuildTarget m_Target; + + public PlatformSpecificSetup() + { + } + + public PlatformSpecificSetup(BuildTarget target) + { + m_Target = target; + } + + public void Setup() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].Setup(); + } + + public void PostBuildAction() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].PostBuildAction(); + } + + public void PostSuccessfulBuildAction() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].PostSuccessfulBuildAction(); + } + + public void PostSuccessfulLaunchAction() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].PostSuccessfulLaunchAction(); + } + + public void CleanUp() + { + var dictionary = GetSetup(); + + if (!dictionary.ContainsKey(m_Target)) + { + return; + } + + dictionary[m_Target].CleanUp(); + } + + private IDictionary GetSetup() + { + m_SetupTypes = new Dictionary() + { + {BuildTarget.iOS, m_AppleiOSPlatformSetup}, + {BuildTarget.tvOS, m_AppleTvOSPlatformSetup}, + {BuildTarget.XboxOne, m_XboxOnePlatformSetup}, + {BuildTarget.Android, m_AndroidPlatformSetup}, + {BuildTarget.WSAPlayer, m_UwpPlatformSetup}, + {BuildTarget.Lumin, m_LuminPlatformSetup}, +#if UNITY_2019_3_OR_NEWER + {BuildTarget.Stadia, m_StadiaPlatformSetup}, +#endif + {BuildTarget.Switch, m_SwitchPlatformSetup} + }; + return m_SetupTypes; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta new file mode 100644 index 0000000..a250a1a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/PlatformSpecificSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6cccd50ebf7384242bda4d7bcb282ebf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs new file mode 100644 index 0000000..c62016b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs @@ -0,0 +1,25 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class StadiaPlatformSetup : IPlatformSetup + { + public void Setup() + { + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs.meta new file mode 100644 index 0000000..59e70a4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/StadiaPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fa19b42bd3dc35e40a618448bd330270 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs new file mode 100644 index 0000000..7c1ea36 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs @@ -0,0 +1,41 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class SwitchPlatformSetup : IPlatformSetup + { + public void Setup() + { + EditorUserBuildSettings.switchCreateRomFile = true; + EditorUserBuildSettings.switchNVNGraphicsDebugger = false; +#if UNITY_2020_1_OR_NEWER + EditorUserBuildSettings.switchNVNDrawValidation_Heavy = true; // catches more graphics errors +#else + EditorUserBuildSettings.switchNVNDrawValidation = true; // catches more graphics errors +#endif + EditorUserBuildSettings.development = true; + EditorUserBuildSettings.switchRedirectWritesToHostMount = true; + + // We can use these when more debugging is required: + //EditorUserBuildSettings.switchNVNDrawValidation = false; // cannot be used with shader debug + //EditorUserBuildSettings.switchNVNGraphicsDebugger = true; + //EditorUserBuildSettings.switchNVNShaderDebugging = true; + //EditorUserBuildSettings.switchCreateSolutionFile = true; // for shorter iteration time + //EditorUserBuildSettings.allowDebugging = true; // managed debugger can be attached + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta new file mode 100644 index 0000000..fb9dd05 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/SwitchPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: adf7bea9401c1834380d55601add6cfb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs new file mode 100644 index 0000000..a229c34 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs @@ -0,0 +1,52 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class UwpPlatformSetup : IPlatformSetup + { + private const string k_SettingsBuildConfiguration = "BuildConfiguration"; + private bool m_InternetClientServer; + private bool m_PrivateNetworkClientServer; + + public void Setup() + { + m_InternetClientServer = PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.InternetClientServer); + m_PrivateNetworkClientServer = PlayerSettings.WSA.GetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer); + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.InternetClientServer, true); + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer, true); + + // This setting is initialized only when Window Store App is selected from the Build Settings window, and + // is typically an empty strings when running tests via UTR on the command-line. + bool wsaSettingNotInitialized = string.IsNullOrEmpty(EditorUserBuildSettings.wsaArchitecture); + + // If WSA build settings aren't fully initialized or running from a build machine, specify a default build configuration. + // Otherwise we can use the existing configuration specified by the user in Build Settings. + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("UNITY_THISISABUILDMACHINE")) || wsaSettingNotInitialized) + { + EditorUserBuildSettings.wsaSubtarget = WSASubtarget.PC; + EditorUserBuildSettings.wsaArchitecture = "x64"; + EditorUserBuildSettings.SetPlatformSettings(BuildPipeline.GetBuildTargetName(BuildTarget.WSAPlayer), k_SettingsBuildConfiguration, WSABuildType.Debug.ToString()); + EditorUserBuildSettings.wsaUWPBuildType = WSAUWPBuildType.ExecutableOnly; + PlayerSettings.SetIl2CppCompilerConfiguration(BuildTargetGroup.WSA, Il2CppCompilerConfiguration.Debug); + } + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.InternetClientServer, m_InternetClientServer); + PlayerSettings.WSA.SetCapability(PlayerSettings.WSACapability.PrivateNetworkClientServer, m_PrivateNetworkClientServer); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta new file mode 100644 index 0000000..751ac7e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/UwpPlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 667c6ad86a0b7a548aaa5c287f2c2861 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs new file mode 100644 index 0000000..54c51ed --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs @@ -0,0 +1,47 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class XboxOnePlatformSetup : IPlatformSetup + { + private XboxOneDeployMethod oldXboxOneDeployMethod; + private XboxOneDeployDrive oldXboxOneDeployDrive; + private string oldXboxOneAdditionalDebugPorts; + + public void Setup() + { + oldXboxOneDeployMethod = EditorUserBuildSettings.xboxOneDeployMethod; + oldXboxOneDeployDrive = EditorUserBuildSettings.xboxOneDeployDrive; + oldXboxOneAdditionalDebugPorts = EditorUserBuildSettings.xboxOneAdditionalDebugPorts; + + EditorUserBuildSettings.xboxOneDeployMethod = XboxOneDeployMethod.Package; + EditorUserBuildSettings.xboxOneDeployDrive = XboxOneDeployDrive.Default; + + // This causes the XboxOne post processing systems to open this port in your package manifest. + // In addition it will open the ephemeral range for debug connections as well. + // Failure to do this will cause connection problems. + EditorUserBuildSettings.xboxOneAdditionalDebugPorts = "34999"; + } + + public void PostBuildAction() + { + } + + public void PostSuccessfulBuildAction() + { + } + + public void PostSuccessfulLaunchAction() + { + } + + public void CleanUp() + { + EditorUserBuildSettings.xboxOneDeployMethod = oldXboxOneDeployMethod; + EditorUserBuildSettings.xboxOneDeployDrive = oldXboxOneDeployDrive; + + // This causes the XboxOne post processing systems to open this port in your package manifest. + // In addition it will open the ephemeral range for debug connections as well. + // Failure to do this will cause connection problems. + EditorUserBuildSettings.xboxOneAdditionalDebugPorts = oldXboxOneAdditionalDebugPorts; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta new file mode 100644 index 0000000..771c853 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlatformSetup/XboxOnePlatformSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aed7ab02155e43341a2dbcb7bc17c160 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs new file mode 100644 index 0000000..ea3e596 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs @@ -0,0 +1,251 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using NUnit.Framework.Internal.Filters; +using UnityEditor; +using UnityEditor.TestRunner.TestLaunchers; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.Utils; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.TestRunner.Callbacks; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestLaunchFailedException : Exception + { + public TestLaunchFailedException() {} + public TestLaunchFailedException(string message) : base(message) {} + } + + [Serializable] + internal class PlayerLauncher : RuntimeTestLauncherBase + { + private readonly PlaymodeTestsControllerSettings m_Settings; + private readonly BuildTarget m_TargetPlatform; + private ITestRunSettings m_OverloadTestRunSettings; + private string m_SceneName; + private int m_HeartbeatTimeout; + + public PlayerLauncher(PlaymodeTestsControllerSettings settings, BuildTarget? targetPlatform, ITestRunSettings overloadTestRunSettings, int heartbeatTimeout) + { + m_Settings = settings; + m_TargetPlatform = targetPlatform ?? EditorUserBuildSettings.activeBuildTarget; + m_OverloadTestRunSettings = overloadTestRunSettings; + m_HeartbeatTimeout = heartbeatTimeout; + } + + protected override RuntimePlatform? TestTargetPlatform + { + get { return BuildTargetConverter.TryConvertToRuntimePlatform(m_TargetPlatform); } + } + + public override void Run() + { + var editorConnectionTestCollector = RemoteTestRunController.instance; + editorConnectionTestCollector.hideFlags = HideFlags.HideAndDontSave; + editorConnectionTestCollector.Init(m_TargetPlatform, m_HeartbeatTimeout); + + var remotePlayerLogController = RemotePlayerLogController.instance; + remotePlayerLogController.hideFlags = HideFlags.HideAndDontSave; + + using (var settings = new PlayerLauncherContextSettings(m_OverloadTestRunSettings)) + { + m_SceneName = CreateSceneName(); + var scene = PrepareScene(m_SceneName); + string scenePath = scene.path; + + var filter = m_Settings.BuildNUnitFilter(); + var runner = LoadTests(filter); + var exceptionThrown = ExecutePreBuildSetupMethods(runner.LoadedTest, filter); + if (exceptionThrown) + { + ReopenOriginalScene(m_Settings.originalScene); + AssetDatabase.DeleteAsset(m_SceneName); + CallbacksDelegator.instance.RunFailed("Run Failed: One or more errors in a prebuild setup. See the editor log for details."); + return; + } + + var playerBuildOptions = GetBuildOptions(scenePath); + + var success = BuildAndRunPlayer(playerBuildOptions); + + editorConnectionTestCollector.PostBuildAction(); + ExecutePostBuildCleanupMethods(runner.LoadedTest, filter); + + ReopenOriginalScene(m_Settings.originalScene); + AssetDatabase.DeleteAsset(m_SceneName); + + if (!success) + { + editorConnectionTestCollector.CleanUp(); + ScriptableObject.DestroyImmediate(editorConnectionTestCollector); + Debug.LogError("Player build failed"); + throw new TestLaunchFailedException("Player build failed"); + } + + if ((playerBuildOptions.BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0) + { + editorConnectionTestCollector.PostSuccessfulBuildAction(); + editorConnectionTestCollector.PostSuccessfulLaunchAction(); + } + + var runSettings = m_OverloadTestRunSettings as PlayerLauncherTestRunSettings; + if (success && runSettings != null && runSettings.buildOnly) + { + EditorUtility.RevealInFinder(playerBuildOptions.BuildPlayerOptions.locationPathName); + } + } + } + + public Scene PrepareScene(string sceneName) + { + var scene = CreateBootstrapScene(sceneName, runner => + { + runner.AddEventHandlerMonoBehaviour(); + runner.settings = m_Settings; + var commandLineArgs = Environment.GetCommandLineArgs(); + if (!commandLineArgs.Contains("-doNotReportTestResultsBackToEditor")) + { + runner.AddEventHandlerMonoBehaviour(); + } + runner.AddEventHandlerMonoBehaviour(); + runner.AddEventHandlerScriptableObject(); + }); + return scene; + } + + private static bool BuildAndRunPlayer(PlayerLauncherBuildOptions buildOptions) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "Building player with following options:\n{0}", buildOptions); + + + // Android has to be in listen mode to establish player connection + if (buildOptions.BuildPlayerOptions.target == BuildTarget.Android) + { + buildOptions.BuildPlayerOptions.options &= ~BuildOptions.ConnectToHost; + } + + // For now, so does Lumin + if (buildOptions.BuildPlayerOptions.target == BuildTarget.Lumin) + { + buildOptions.BuildPlayerOptions.options &= ~BuildOptions.ConnectToHost; + } + + var result = BuildPipeline.BuildPlayer(buildOptions.BuildPlayerOptions); + if (result.summary.result != Build.Reporting.BuildResult.Succeeded) + Debug.LogError(result.SummarizeErrors()); + + return result.summary.result == Build.Reporting.BuildResult.Succeeded; + } + + internal PlayerLauncherBuildOptions GetBuildOptions(string scenePath) + { + var buildOnly = false; + var runSettings = m_OverloadTestRunSettings as PlayerLauncherTestRunSettings; + if (runSettings != null) + { + buildOnly = runSettings.buildOnly; + } + + var buildOptions = new BuildPlayerOptions(); + + var scenes = new List() { scenePath }; + scenes.AddRange(EditorBuildSettings.scenes.Select(x => x.path)); + buildOptions.scenes = scenes.ToArray(); + + buildOptions.options |= BuildOptions.Development | BuildOptions.ConnectToHost | BuildOptions.IncludeTestAssemblies | BuildOptions.StrictMode; + buildOptions.target = m_TargetPlatform; + + if (EditorUserBuildSettings.waitForPlayerConnection) + buildOptions.options |= BuildOptions.WaitForPlayerConnection; + + if (EditorUserBuildSettings.allowDebugging) + buildOptions.options |= BuildOptions.AllowDebugging; + + if (EditorUserBuildSettings.installInBuildFolder) + buildOptions.options |= BuildOptions.InstallInBuildFolder; + else if (!buildOnly) + buildOptions.options |= BuildOptions.AutoRunPlayer; + + var buildTargetGroup = EditorUserBuildSettings.activeBuildTargetGroup; + + //Check if Lz4 is supported for the current buildtargetgroup and enable it if need be + if (PostprocessBuildPlayer.SupportsLz4Compression(buildTargetGroup, m_TargetPlatform)) + { + if (EditorUserBuildSettings.GetCompressionType(buildTargetGroup) == Compression.Lz4) + buildOptions.options |= BuildOptions.CompressWithLz4; + else if (EditorUserBuildSettings.GetCompressionType(buildTargetGroup) == Compression.Lz4HC) + buildOptions.options |= BuildOptions.CompressWithLz4HC; + } + + string buildLocation; + if (buildOnly) + { + buildLocation = buildOptions.locationPathName = runSettings.buildOnlyLocationPath; + } + else + { + var reduceBuildLocationPathLength = false; + + //Some platforms hit MAX_PATH limits during the build process, in these cases minimize the path length + if ((m_TargetPlatform == BuildTarget.WSAPlayer) || (m_TargetPlatform == BuildTarget.XboxOne)) + { + reduceBuildLocationPathLength = true; + } + + var uniqueTempPathInProject = FileUtil.GetUniqueTempPathInProject(); + var playerDirectoryName = reduceBuildLocationPathLength ? "PwT" : "PlayerWithTests"; + + if (reduceBuildLocationPathLength) + { + uniqueTempPathInProject = Path.GetTempFileName(); + File.Delete(uniqueTempPathInProject); + Directory.CreateDirectory(uniqueTempPathInProject); + } + + var tempPath = Path.GetFullPath(uniqueTempPathInProject); + buildLocation = Path.Combine(tempPath, playerDirectoryName); + + // iOS builds create a folder with Xcode project instead of an executable, therefore no executable name is added + if (m_TargetPlatform == BuildTarget.iOS) + { + buildOptions.locationPathName = buildLocation; + } + else + { + string extensionForBuildTarget = + PostprocessBuildPlayer.GetExtensionForBuildTarget(buildTargetGroup, buildOptions.target, + buildOptions.options); + var playerExecutableName = "PlayerWithTests"; + playerExecutableName += string.Format(".{0}", extensionForBuildTarget); + buildOptions.locationPathName = Path.Combine(buildLocation, playerExecutableName); + } + } + + return new PlayerLauncherBuildOptions + { + BuildPlayerOptions = ModifyBuildOptions(buildOptions), + PlayerDirectory = buildLocation, + }; + } + + private BuildPlayerOptions ModifyBuildOptions(BuildPlayerOptions buildOptions) + { + var allAssemblies = AppDomain.CurrentDomain.GetAssemblies() + .Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEditor.TestRunner")).ToArray(); + var attributes = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(TestPlayerBuildModifierAttribute), true).OfType()).ToArray(); + var modifiers = attributes.Select(attribute => attribute.ConstructModifier()).ToArray(); + + foreach (var modifier in modifiers) + { + buildOptions = modifier.ModifyOptions(buildOptions); + } + + return buildOptions; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta new file mode 100644 index 0000000..60bb1c7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d973fc1524e4d724081553934c55958c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs new file mode 100644 index 0000000..b498514 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs @@ -0,0 +1,23 @@ +using System.Text; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PlayerLauncherBuildOptions + { + public BuildPlayerOptions BuildPlayerOptions; + public string PlayerDirectory; + + public override string ToString() + { + var str = new StringBuilder(); + str.AppendLine("locationPathName = " + BuildPlayerOptions.locationPathName); + str.AppendLine("target = " + BuildPlayerOptions.target); + str.AppendLine("scenes = " + string.Join(", ", BuildPlayerOptions.scenes)); + str.AppendLine("assetBundleManifestPath = " + BuildPlayerOptions.assetBundleManifestPath); + str.AppendLine("options.Development = " + ((BuildPlayerOptions.options & BuildOptions.Development) != 0)); + str.AppendLine("options.AutoRunPlayer = " + ((BuildPlayerOptions.options & BuildOptions.AutoRunPlayer) != 0)); + str.AppendLine("options.ForceEnableAssertions = " + ((BuildPlayerOptions.options & BuildOptions.ForceEnableAssertions) != 0)); + return str.ToString(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta new file mode 100644 index 0000000..73c1779 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherBuildOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2a0bd678385f98e4d8eabdfc07d62b4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs new file mode 100644 index 0000000..151d8a2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs @@ -0,0 +1,113 @@ +using System; +using System.IO; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PlayerLauncherContextSettings : IDisposable + { + private ITestRunSettings m_OverloadSettings; + + private EditorBuildSettingsScene[] m_EditorBuildSettings; +#pragma warning disable 618 + private ResolutionDialogSetting m_DisplayResolutionDialog; +#pragma warning restore 618 + private bool m_RunInBackground; + private FullScreenMode m_FullScreenMode; + private bool m_ResizableWindow; + private bool m_ShowUnitySplashScreen; + private string m_OldproductName; + private string m_OldAotOptions; +#pragma warning disable 618 + private Lightmapping.GIWorkflowMode m_OldLightmapping; +#pragma warning restore 618 + private bool m_explicitNullChecks; + + private bool m_Disposed; + + public PlayerLauncherContextSettings(ITestRunSettings overloadSettings) + { + m_OverloadSettings = overloadSettings; + SetupProjectParameters(); + + if (overloadSettings != null) + { + overloadSettings.Apply(); + } + } + + public void Dispose() + { + if (!m_Disposed) + { + CleanupProjectParameters(); + if (m_OverloadSettings != null) + { + m_OverloadSettings.Dispose(); + } + + m_Disposed = true; + } + } + + private void SetupProjectParameters() + { + EditorApplication.LockReloadAssemblies(); + + m_EditorBuildSettings = EditorBuildSettings.scenes; + +#pragma warning disable 618 + m_DisplayResolutionDialog = PlayerSettings.displayResolutionDialog; + PlayerSettings.displayResolutionDialog = ResolutionDialogSetting.Disabled; +#pragma warning restore 618 + + m_RunInBackground = PlayerSettings.runInBackground; + PlayerSettings.runInBackground = true; + + m_FullScreenMode = PlayerSettings.fullScreenMode; + PlayerSettings.fullScreenMode = FullScreenMode.Windowed; + + m_OldAotOptions = PlayerSettings.aotOptions; + PlayerSettings.aotOptions = "nimt-trampolines=1024"; + + m_ResizableWindow = PlayerSettings.resizableWindow; + PlayerSettings.resizableWindow = true; + + m_ShowUnitySplashScreen = PlayerSettings.SplashScreen.show; + PlayerSettings.SplashScreen.show = false; + + m_OldproductName = PlayerSettings.productName; + PlayerSettings.productName = string.Join("_", Application.productName.Split(Path.GetInvalidFileNameChars())); + +#pragma warning disable 618 + m_OldLightmapping = Lightmapping.giWorkflowMode; + Lightmapping.giWorkflowMode = Lightmapping.GIWorkflowMode.OnDemand; +#pragma warning restore 618 + + m_explicitNullChecks = EditorUserBuildSettings.explicitNullChecks; + EditorUserBuildSettings.explicitNullChecks = true; + } + + private void CleanupProjectParameters() + { + EditorBuildSettings.scenes = m_EditorBuildSettings; + + PlayerSettings.fullScreenMode = m_FullScreenMode; + PlayerSettings.runInBackground = m_RunInBackground; +#pragma warning disable 618 + PlayerSettings.displayResolutionDialog = m_DisplayResolutionDialog; +#pragma warning restore 618 + PlayerSettings.resizableWindow = m_ResizableWindow; + PlayerSettings.SplashScreen.show = m_ShowUnitySplashScreen; + PlayerSettings.productName = m_OldproductName; + PlayerSettings.aotOptions = m_OldAotOptions; +#pragma warning disable 618 + Lightmapping.giWorkflowMode = m_OldLightmapping; +#pragma warning restore 618 + EditorUserBuildSettings.explicitNullChecks = m_explicitNullChecks; + + EditorApplication.UnlockReloadAssemblies(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta new file mode 100644 index 0000000..29cb891 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherContextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6965880f76f40194593cb53a88f74005 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs new file mode 100644 index 0000000..2183282 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs @@ -0,0 +1,19 @@ +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner +{ + class PlayerLauncherTestRunSettings : ITestRunSettings + { + public bool buildOnly { set; get; } + + public string buildOnlyLocationPath { set; get; } + + public void Dispose() + { + } + + void ITestRunSettings.Apply() + { + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs.meta new file mode 100644 index 0000000..ea71a0c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlayerLauncherTestRunSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c1cba6f3ed484514097080a3bb835958 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs new file mode 100644 index 0000000..223db27 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs @@ -0,0 +1,133 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.Utils; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.TestRunner.Callbacks; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PlaymodeLauncher : RuntimeTestLauncherBase + { + public static bool IsRunning; + private Scene m_Scene; + private bool m_IsTestSetupPerformed; + private readonly PlaymodeTestsControllerSettings m_Settings; + private ITestFilter testFilter; + + [SerializeField] + private List m_EventHandlers = new List(); + + public PlaymodeLauncher(PlaymodeTestsControllerSettings settings) + { + m_Settings = settings; + } + + public override void Run() + { + IsRunning = true; + ConsoleWindow.SetConsoleErrorPause(false); + Application.runInBackground = true; + + var sceneName = CreateSceneName(); + m_Scene = CreateBootstrapScene(sceneName, runner => + { + runner.AddEventHandlerMonoBehaviour(); + runner.AddEventHandlerScriptableObject(); + runner.AddEventHandlerScriptableObject(); + runner.AddEventHandlerScriptableObject(); + + foreach (var eventHandler in m_EventHandlers) + { + var obj = ScriptableObject.CreateInstance(eventHandler); + runner.AddEventHandlerScriptableObject(obj as ITestRunnerListener); + } + + runner.settings = m_Settings; + }); + + if (m_Settings.sceneBased) + { + var newListOfScenes = + new List {new EditorBuildSettingsScene(sceneName, true)}; + newListOfScenes.AddRange(EditorBuildSettings.scenes); + EditorBuildSettings.scenes = newListOfScenes.ToArray(); + } + + EditorApplication.update += UpdateCallback; + } + + public void UpdateCallback() + { + if (m_IsTestSetupPerformed) + { + if (m_Scene.IsValid()) + SceneManager.SetActiveScene(m_Scene); + EditorApplication.update -= UpdateCallback; + EditorApplication.isPlaying = true; + } + else + { + testFilter = m_Settings.BuildNUnitFilter(); + var runner = LoadTests(testFilter); + + var exceptionThrown = ExecutePreBuildSetupMethods(runner.LoadedTest, testFilter); + if (exceptionThrown) + { + EditorApplication.update -= UpdateCallback; + IsRunning = false; + var controller = PlaymodeTestsController.GetController(); + ReopenOriginalScene(controller); + AssetDatabase.DeleteAsset(controller.settings.bootstrapScene); + CallbacksDelegator.instance.RunFailed("Run Failed: One or more errors in a prebuild setup. See the editor log for details."); + return; + } + m_IsTestSetupPerformed = true; + } + } + + [InitializeOnLoad] + public class BackgroundWatcher + { + static BackgroundWatcher() + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + private static void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (!PlaymodeTestsController.IsControllerOnScene()) + return; + var runner = PlaymodeTestsController.GetController(); + if (runner == null) + return; + if (state == PlayModeStateChange.ExitingPlayMode) + { + AssetDatabase.DeleteAsset(runner.settings.bootstrapScene); + ExecutePostBuildCleanupMethods(runner.m_Runner.LoadedTest, runner.settings.BuildNUnitFilter(), Application.platform); + IsRunning = false; + } + else if (state == PlayModeStateChange.EnteredEditMode) + { + //reopen the original scene once we exit playmode + ReopenOriginalScene(runner); + } + } + } + + protected static void ReopenOriginalScene(PlaymodeTestsController runner) + { + ReopenOriginalScene(runner.settings.originalScene); + } + + public void AddEventHandler() where T : ScriptableObject, ITestRunnerListener + { + m_EventHandlers.Add(typeof(T)); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs.meta new file mode 100644 index 0000000..ddb6e1c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PlaymodeLauncher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3217d58bbd1d2b4aaee933e2e8b9195 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs new file mode 100644 index 0000000..32dee2b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs @@ -0,0 +1,9 @@ +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PostbuildCleanupAttributeFinder : AttributeFinderBase + { + public PostbuildCleanupAttributeFinder() : base(attribute => attribute.TargetClass) {} + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs.meta new file mode 100644 index 0000000..454dd10 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PostbuildCleanupAttributeFinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2c2dfcbbb77359547bcaa7cdabd47ebb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs new file mode 100644 index 0000000..b51241f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs @@ -0,0 +1,9 @@ +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class PrebuildSetupAttributeFinder : AttributeFinderBase + { + public PrebuildSetupAttributeFinder() : base((attribute) => attribute.TargetClass) {} + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs.meta new file mode 100644 index 0000000..d524e56 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/PrebuildSetupAttributeFinder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c4ccfb0896bcf44da13e152b267aa49 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs new file mode 100644 index 0000000..abaa219 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using UnityEditor.DeploymentTargets; +using UnityEditor.TestTools.TestRunner.CommandLineTest; +using UnityEngine; + +namespace UnityEditor.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemotePlayerLogController : ScriptableSingleton + { + private List m_LogWriters; + + private Dictionary m_Loggers; + + private string m_DeviceLogsDirectory; + + public void SetBuildTarget(BuildTarget buildTarget) + { + m_Loggers = GetDeploymentTargetLoggers(buildTarget); + + if (m_Loggers == null) + Debug.Log("Deployment target logger could not be created"); + } + + public void SetLogsDirectory(string dir) + { + m_DeviceLogsDirectory = dir; + } + + public void StartLogWriters() + { + if (m_DeviceLogsDirectory == null || m_Loggers == null) + return; + + m_LogWriters = new List(); + + foreach (var logger in m_Loggers) + { + m_LogWriters.Add(new LogWriter(m_DeviceLogsDirectory, logger.Key, logger.Value)); + logger.Value.Start(); + } + } + + public void StopLogWriters() + { + if (m_LogWriters == null) + return; + + foreach (var logWriter in m_LogWriters) + { + logWriter.Stop(); + } + } + + private Dictionary GetDeploymentTargetLoggers(BuildTarget buildTarget) + { + DeploymentTargetManager deploymentTargetManager; + + try + { + deploymentTargetManager = DeploymentTargetManager.CreateInstance(EditorUserBuildSettings.activeBuildTargetGroup, buildTarget); + + if (deploymentTargetManager == null) + return null; + } + catch (NotSupportedException ex) + { + Debug.Log(ex.Message); + Debug.Log("Deployment target logger not initialised"); + return null; + } + + var targets = deploymentTargetManager.GetKnownTargets(); + var loggers = new Dictionary(); + + foreach (var target in targets) + { + if (target.status != DeploymentTargetStatus.Ready) continue; + + var logger = deploymentTargetManager.GetTargetLogger(target.id); + logger.Clear(); + loggers.Add(target.id, logger); + } + + return loggers; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs.meta new file mode 100644 index 0000000..b208419 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerLogController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edd2a1fe1acbbde43aad39862bb3f4a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs new file mode 100644 index 0000000..fc21332 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs @@ -0,0 +1,115 @@ +using System; +using UnityEditor.Networking.PlayerConnection; +using UnityEditor.TestTools.TestRunner; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.UnityTestProtocol; +using UnityEngine; +using UnityEngine.Networking.PlayerConnection; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestRunController : ScriptableSingleton + { + internal const int k_HeartbeatTimeout = 60 * 10; + + [SerializeField] + private RemoteTestResultReciever m_RemoteTestResultReciever; + + [SerializeField] + private PlatformSpecificSetup m_PlatformSpecificSetup; + + [SerializeField] + private bool m_RegisteredConnectionCallbacks; + + [SerializeField] + private int m_HearbeatTimeOut; + + private UnityEditor.TestTools.TestRunner.DelayedCallback m_TimeoutCallback; + + public void Init(BuildTarget buildTarget, int heartbeatTimeout) + { + m_HearbeatTimeOut = heartbeatTimeout; + m_PlatformSpecificSetup = new PlatformSpecificSetup(buildTarget); + m_PlatformSpecificSetup.Setup(); + m_RemoteTestResultReciever = new RemoteTestResultReciever(); + EditorConnection.instance.Initialize(); + if (!m_RegisteredConnectionCallbacks) + { + EditorConnection.instance.Initialize(); + DelegateEditorConnectionEvents(); + } + } + + private void DelegateEditorConnectionEvents() + { + m_RegisteredConnectionCallbacks = true; + //This is needed because RemoteTestResultReceiver is not a ScriptableObject + EditorConnection.instance.Register(PlayerConnectionMessageIds.runStartedMessageId, RunStarted); + EditorConnection.instance.Register(PlayerConnectionMessageIds.runFinishedMessageId, RunFinished); + EditorConnection.instance.Register(PlayerConnectionMessageIds.testStartedMessageId, TestStarted); + EditorConnection.instance.Register(PlayerConnectionMessageIds.testFinishedMessageId, TestFinished); + EditorConnection.instance.Register(PlayerConnectionMessageIds.playerAliveHeartbeat, PlayerAliveHeartbeat); + } + + private void RunStarted(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + m_RemoteTestResultReciever.RunStarted(messageEventArgs); + CallbacksDelegator.instance.RunStartedRemotely(messageEventArgs.data); + } + + private void RunFinished(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Clear(); + m_RemoteTestResultReciever.RunFinished(messageEventArgs); + m_PlatformSpecificSetup.CleanUp(); + + CallbacksDelegator.instance.RunFinishedRemotely(messageEventArgs.data); + } + + private void TestStarted(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + CallbacksDelegator.instance.TestStartedRemotely(messageEventArgs.data); + } + + private void TestFinished(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + CallbacksDelegator.instance.TestFinishedRemotely(messageEventArgs.data); + } + + private void PlayerAliveHeartbeat(MessageEventArgs messageEventArgs) + { + m_TimeoutCallback?.Reset(); + } + + private void TimeoutCallback() + { + CallbacksDelegator.instance.RunFailed($"Test execution timed out. No activity received from the player in {m_HearbeatTimeOut} seconds."); + } + + public void PostBuildAction() + { + m_PlatformSpecificSetup.PostBuildAction(); + } + + public void PostSuccessfulBuildAction() + { + m_PlatformSpecificSetup.PostSuccessfulBuildAction(); + m_TimeoutCallback = new UnityEditor.TestTools.TestRunner.DelayedCallback(TimeoutCallback, m_HearbeatTimeOut); + } + + public void PostSuccessfulLaunchAction() + { + m_PlatformSpecificSetup.PostSuccessfulLaunchAction(); + } + + public void CleanUp() + { + m_PlatformSpecificSetup.CleanUp(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs.meta new file mode 100644 index 0000000..020222b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemotePlayerTestController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d36034e63ad8254b9b2f55280fcc040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs new file mode 100644 index 0000000..75b0712 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs @@ -0,0 +1,22 @@ +using System; +using UnityEditor.Networking.PlayerConnection; +using UnityEngine; +using UnityEngine.Networking.PlayerConnection; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class RemoteTestResultReciever + { + public void RunStarted(MessageEventArgs messageEventArgs) + { + } + + public void RunFinished(MessageEventArgs messageEventArgs) + { + EditorConnection.instance.Send(PlayerConnectionMessageIds.quitPlayerMessageId, null, messageEventArgs.playerId); + EditorConnection.instance.DisconnectAll(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs.meta new file mode 100644 index 0000000..e701015 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RemoteTestResultReciever.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fdb35ef8fc437e14fa4b6c74a0609e86 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs new file mode 100644 index 0000000..87d9672 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs @@ -0,0 +1,92 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEditor.Events; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal abstract class RuntimeTestLauncherBase : TestLauncherBase + { + protected Scene CreateBootstrapScene(string sceneName, Action runnerSetup) + { + var scene = EditorSceneManager.NewScene(NewSceneSetup.EmptyScene, NewSceneMode.Single); + var go = new GameObject(PlaymodeTestsController.kPlaymodeTestControllerName); + + var editorLoadedTestAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + + var runner = go.AddComponent(); + runnerSetup(runner); + runner.settings.bootstrapScene = sceneName; + runner.AssembliesWithTests = editorLoadedTestAssemblyProvider.GetAssembliesGroupedByType(TestPlatform.PlayMode).Select(x => x.Assembly.GetName().Name).ToList(); + + EditorSceneManager.MarkSceneDirty(scene); + AssetDatabase.SaveAssets(); + EditorSceneManager.SaveScene(scene, sceneName, false); + + return scene; + } + + public string CreateSceneName() + { + return "Assets/InitTestScene" + DateTime.Now.Ticks + ".unity"; + } + + protected UnityTestAssemblyRunner LoadTests(ITestFilter filter) + { + var editorLoadedTestAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + var assembliesWithTests = editorLoadedTestAssemblyProvider.GetAssembliesGroupedByType(TestPlatform.PlayMode).Select(x => x.Assembly.GetName().Name).ToList(); + + var nUnitTestAssemblyRunner = new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(), null); + var assemblyProvider = new PlayerTestAssemblyProvider(new AssemblyLoadProxy(), assembliesWithTests); + nUnitTestAssemblyRunner.Load(assemblyProvider.GetUserAssemblies().Select(a => a.Assembly).ToArray(), TestPlatform.PlayMode, UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(TestPlatform.PlayMode)); + return nUnitTestAssemblyRunner; + } + + protected static void ReopenOriginalScene(string originalSceneName) + { + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects); + if (!string.IsNullOrEmpty(originalSceneName)) + { + EditorSceneManager.OpenScene(originalSceneName); + } + } + } + + internal static class PlaymodeTestsControllerExtensions + { + internal static T AddEventHandlerMonoBehaviour(this PlaymodeTestsController controller) where T : MonoBehaviour, ITestRunnerListener + { + var eventHandler = controller.gameObject.AddComponent(); + SetListeners(controller, eventHandler); + return eventHandler; + } + + internal static T AddEventHandlerScriptableObject(this PlaymodeTestsController controller) where T : ScriptableObject, ITestRunnerListener + { + var eventListener = ScriptableObject.CreateInstance(); + AddEventHandlerScriptableObject(controller, eventListener); + return eventListener; + } + + internal static void AddEventHandlerScriptableObject(this PlaymodeTestsController controller, ITestRunnerListener obj) + { + SetListeners(controller, obj); + } + + private static void SetListeners(PlaymodeTestsController controller, ITestRunnerListener eventHandler) + { + UnityEventTools.AddPersistentListener(controller.testStartedEvent, eventHandler.TestStarted); + UnityEventTools.AddPersistentListener(controller.testFinishedEvent, eventHandler.TestFinished); + UnityEventTools.AddPersistentListener(controller.runStartedEvent, eventHandler.RunStarted); + UnityEventTools.AddPersistentListener(controller.runFinishedEvent, eventHandler.RunFinished); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs.meta new file mode 100644 index 0000000..28c7416 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/RuntimeTestLauncherBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0efb23ecb373b6d4bbe5217485785138 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs new file mode 100644 index 0000000..7bfd354 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs @@ -0,0 +1,85 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal abstract class TestLauncherBase + { + public abstract void Run(); + + protected virtual RuntimePlatform? TestTargetPlatform + { + get { return Application.platform; } + } + + protected bool ExecutePreBuildSetupMethods(ITest tests, ITestFilter testRunnerFilter) + { + var attributeFinder = new PrebuildSetupAttributeFinder(); + var logString = "Executing setup for: {0}"; + return ExecuteMethods(tests, testRunnerFilter, attributeFinder, logString, targetClass => targetClass.Setup(), TestTargetPlatform); + } + + public void ExecutePostBuildCleanupMethods(ITest tests, ITestFilter testRunnerFilter) + { + ExecutePostBuildCleanupMethods(tests, testRunnerFilter, TestTargetPlatform); + } + + public static void ExecutePostBuildCleanupMethods(ITest tests, ITestFilter testRunnerFilter, RuntimePlatform? testTargetPlatform) + { + var attributeFinder = new PostbuildCleanupAttributeFinder(); + var logString = "Executing cleanup for: {0}"; + ExecuteMethods(tests, testRunnerFilter, attributeFinder, logString, targetClass => targetClass.Cleanup(), testTargetPlatform); + } + + private static bool ExecuteMethods(ITest tests, ITestFilter testRunnerFilter, AttributeFinderBase attributeFinder, string logString, Action action, RuntimePlatform? testTargetPlatform) + { + var exceptionsThrown = false; + + if (testTargetPlatform == null) + { + Debug.LogError("Could not determine test target platform from build target " + EditorUserBuildSettings.activeBuildTarget); + return true; + } + + foreach (var targetClassType in attributeFinder.Search(tests, testRunnerFilter, testTargetPlatform.Value)) + { + try + { + var targetClass = (T)Activator.CreateInstance(targetClassType); + + Debug.LogFormat(logString, targetClassType.FullName); + + using (var logScope = new LogScope()) + { + action(targetClass); + + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + + if (logScope.ExpectedLogs.Any()) + { + var expectedLogs = logScope.ExpectedLogs.First(); + throw new UnexpectedLogMessageException(expectedLogs); + } + } + } + catch (InvalidCastException) {} + catch (Exception e) + { + Debug.LogException(e); + exceptionsThrown = true; + } + } + + return exceptionsThrown; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs.meta new file mode 100644 index 0000000..c36990c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestLaunchers/TestLauncherBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1cddf785b0d07434d8e0607c97b09135 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestResultSerializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestResultSerializer.cs new file mode 100644 index 0000000..b95f63a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestResultSerializer.cs @@ -0,0 +1,80 @@ +using System; +using System.Reflection; +using System.Text; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine; +using UnityEngine.TestRunner.NUnitExtensions; + +namespace UnityEditor.TestTools.TestRunner +{ + [Serializable] + internal class TestResultSerializer + { + private static readonly BindingFlags flags = BindingFlags.NonPublic | BindingFlags.Public | + BindingFlags.Instance | BindingFlags.FlattenHierarchy; + + [SerializeField] public string id; + + [SerializeField] public string fullName; + + [SerializeField] private double duration; + + [SerializeField] private string label; + + [SerializeField] private string message; + + [SerializeField] private string output; + + [SerializeField] private string site; + + [SerializeField] private string stacktrace; + + [SerializeField] private double startTimeAO; + + [SerializeField] private double endTimeAO; + + [SerializeField] private string status; + + [SerializeField] public string uniqueName; + + public static TestResultSerializer MakeFromTestResult(ITestResult result) + { + var wrapper = new TestResultSerializer(); + wrapper.id = result.Test.Id; + wrapper.fullName = result.FullName; + wrapper.status = result.ResultState.Status.ToString(); + wrapper.label = result.ResultState.Label; + wrapper.site = result.ResultState.Site.ToString(); + wrapper.output = result.Output; + wrapper.duration = result.Duration; + wrapper.stacktrace = result.StackTrace; + wrapper.message = result.Message; + wrapper.startTimeAO = result.StartTime.ToOADate(); + wrapper.endTimeAO = result.EndTime.ToOADate(); + wrapper.uniqueName = result.Test.GetUniqueName(); + return wrapper; + } + + public void RestoreTestResult(TestResult result) + { + var resultState = new ResultState((TestStatus)Enum.Parse(typeof(TestStatus), status), label, + (FailureSite)Enum.Parse(typeof(FailureSite), site)); + var baseType = result.GetType().BaseType; + baseType.GetField("_resultState", flags).SetValue(result, resultState); + baseType.GetField("_output", flags).SetValue(result, new StringBuilder(output)); + baseType.GetField("_duration", flags).SetValue(result, duration); + baseType.GetField("_message", flags).SetValue(result, message); + baseType.GetField("_stackTrace", flags).SetValue(result, stacktrace); + baseType.GetProperty("StartTime", flags) + .SetValue(result, DateTime.FromOADate(startTimeAO), null); + baseType.GetProperty("EndTime", flags) + .SetValue(result, DateTime.FromOADate(endTimeAO), null); + } + + public bool IsPassed() + { + return status == TestStatus.Passed.ToString(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestResultSerializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestResultSerializer.cs.meta new file mode 100644 index 0000000..96f2960 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestResultSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 559482fe33c79e44882d3a6cedc55fb5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun.meta new file mode 100644 index 0000000..6f6e8cf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8721cb2237d4a564a94a51f56243bdac +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks.meta new file mode 100644 index 0000000..bb019b7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6dba53789da15814387fa5b1445e81e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs new file mode 100644 index 0000000..7efaecb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal abstract class BuildActionTaskBase : TestTaskBase + { + private string typeName; + internal IAttributeFinder attributeFinder; + internal RuntimePlatform targetPlatform = Application.platform; + internal Action logAction = Debug.Log; + internal Func logScopeProvider = () => new LogScope(); + internal Func createInstance = Activator.CreateInstance; + + protected BuildActionTaskBase(IAttributeFinder attributeFinder) + { + this.attributeFinder = attributeFinder; + typeName = typeof(T).Name; + } + + protected abstract void Action(T target); + + public override IEnumerator Execute(TestJobData testJobData) + { + if (testJobData.testTree == null) + { + throw new Exception($"Test tree is not available for {GetType().Name}."); + } + + var enumerator = ExecuteMethods(testJobData.testTree, testJobData.executionSettings.BuildNUnitFilter()); + while (enumerator.MoveNext()) + { + yield return null; + } + } + + protected IEnumerator ExecuteMethods(ITest testTree, ITestFilter testRunnerFilter) + { + var exceptions = new List(); + + foreach (var targetClassType in attributeFinder.Search(testTree, testRunnerFilter, targetPlatform)) + { + try + { + var targetClass = (T) createInstance(targetClassType); + + logAction($"Executing {typeName} for: {targetClassType.FullName}."); + + using (var logScope = logScopeProvider()) + { + Action(targetClass); + + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + + if (logScope.ExpectedLogs.Any()) + { + var expectedLogs = logScope.ExpectedLogs.First(); + throw new UnexpectedLogMessageException(expectedLogs); + } + } + } + catch (Exception ex) + { + exceptions.Add(ex); + } + + yield return null; + } + + if (exceptions.Count > 0) + { + throw new AggregateException($"One or more exceptions when executing {typeName}.", exceptions); + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs.meta new file mode 100644 index 0000000..54afd57 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildActionTaskBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2441d353f9c42a44af6e224e4901b52 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs new file mode 100644 index 0000000..b66f507 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs @@ -0,0 +1,61 @@ +using System; +using System.Collections; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class BuildTestTreeTask : TestTaskBase + { + private TestPlatform m_TestPlatform; + + public BuildTestTreeTask(TestPlatform testPlatform) + { + m_TestPlatform = testPlatform; + } + + internal IEditorLoadedTestAssemblyProvider m_testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + internal IAsyncTestAssemblyBuilder m_testAssemblyBuilder = new UnityTestAssemblyBuilder(); + internal ICallbacksDelegator m_CallbacksDelegator = CallbacksDelegator.instance; + + public override IEnumerator Execute(TestJobData testJobData) + { + if (testJobData.testTree != null) + { + yield break; + } + + var assembliesEnumerator = m_testAssemblyProvider.GetAssembliesGroupedByTypeAsync(m_TestPlatform); + while (assembliesEnumerator.MoveNext()) + { + yield return null; + } + + if (assembliesEnumerator.Current == null) + { + throw new Exception("Assemblies not retrieved."); + } + + var assemblies = assembliesEnumerator.Current.Where(pair => m_TestPlatform.IsFlagIncluded(pair.Key)).SelectMany(pair => pair.Value).Select(x => x.Assembly).ToArray(); + var buildSettings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(m_TestPlatform); + var enumerator = m_testAssemblyBuilder.BuildAsync(assemblies, Enumerable.Repeat(m_TestPlatform, assemblies.Length).ToArray(), buildSettings); + while (enumerator.MoveNext()) + { + yield return null; + } + + var testList = enumerator.Current; + if (testList== null) + { + throw new Exception("Test list not retrieved."); + } + + testList.ParseForNameDuplicates(); + testJobData.testTree = testList; + m_CallbacksDelegator.TestTreeRebuild(testList); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs.meta new file mode 100644 index 0000000..b00d7b1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/BuildTestTreeTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0288e1c9324e824bab7e2044a72a434 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs new file mode 100644 index 0000000..cf07f4c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections; +using System.IO; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class CleanupVerificationTask : FileCleanupVerifierTaskBase + { + private const string k_Indent = " "; + + internal Action logAction = Debug.LogWarning; + + public override IEnumerator Execute(TestJobData testJobData) + { + var currentFiles = GetAllFilesInAssetsDirectory(); + var existingFiles = testJobData.existingFiles; + + if (currentFiles.Length != existingFiles.Length) + { + LogWarningForFilesIfAny(currentFiles.Where(file => !testJobData.existingFiles.Contains(file)).ToArray()); + } + + yield return null; + } + + private void LogWarningForFilesIfAny(string[] filePaths) + { + if (!filePaths.Any()) + { + return; + } + + var stringWriter = new StringWriter(); + stringWriter.WriteLine("Files generated by test without cleanup."); + stringWriter.WriteLine(k_Indent + "Found {0} new files.", filePaths.Length); + + foreach (var filePath in filePaths) + { + stringWriter.WriteLine(k_Indent + filePath); + } + + logAction(stringWriter.ToString()); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs.meta new file mode 100644 index 0000000..2ea7cb0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/CleanupVerificationTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93eb6389f4fb6924987867ce0bc339ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs new file mode 100644 index 0000000..35f4aa0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs @@ -0,0 +1,14 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal abstract class FileCleanupVerifierTaskBase : TestTaskBase + { + internal Func GetAllAssetPathsAction = AssetDatabase.GetAllAssetPaths; + + protected string[] GetAllFilesInAssetsDirectory() + { + return GetAllAssetPathsAction(); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs.meta new file mode 100644 index 0000000..617b92d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/FileCleanupVerifierTaskBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad7bb166069f8414e9ad26606b305e66 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs new file mode 100644 index 0000000..30db267 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs @@ -0,0 +1,26 @@ +using System.Collections; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class LegacyEditModeRunTask : TestTaskBase + { + public LegacyEditModeRunTask() : base(true) + { + + } + + public override IEnumerator Execute(TestJobData testJobData) + { + var testLauncher = new EditModeLauncher(testJobData.executionSettings.filters, TestPlatform.EditMode, testJobData.executionSettings.runSynchronously); + testJobData.editModeRunner = testLauncher.m_EditModeRunner; + testLauncher.Run(); + + while (testJobData.editModeRunner != null && !testJobData.editModeRunner.RunFinished) + { + yield return null; + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs.meta new file mode 100644 index 0000000..3a65c88 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyEditModeRunTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4246555189b5ee43b4857220f9fd29b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs new file mode 100644 index 0000000..b0b30df --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs @@ -0,0 +1,26 @@ +using System.Collections; +using System.Linq; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class LegacyPlayModeRunTask : TestTaskBase + { + public LegacyPlayModeRunTask() : base(true) + { + + } + public override IEnumerator Execute(TestJobData testJobData) + { + var settings = PlaymodeTestsControllerSettings.CreateRunnerSettings(testJobData.executionSettings.filters.Select(filter => filter.ToRuntimeTestRunnerFilter(testJobData.executionSettings.runSynchronously)).ToArray()); + var launcher = new PlaymodeLauncher(settings); + + launcher.Run(); + + while (PlaymodeLauncher.IsRunning) + { + yield return null; + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs.meta new file mode 100644 index 0000000..0a75368 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayModeRunTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4769fe1e7475c8843b092338acbcad25 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs new file mode 100644 index 0000000..3f24135 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs @@ -0,0 +1,18 @@ +using System.Collections; +using System.Linq; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class LegacyPlayerRunTask : TestTaskBase + { + public override IEnumerator Execute(TestJobData testJobData) + { + var executionSettings = testJobData.executionSettings; + var settings = PlaymodeTestsControllerSettings.CreateRunnerSettings(executionSettings.filters.Select(filter => filter.ToRuntimeTestRunnerFilter(executionSettings.runSynchronously)).ToArray()); + var launcher = new PlayerLauncher(settings, executionSettings.targetPlatform, executionSettings.overloadTestRunSettings, executionSettings.playerHeartbeatTimeout); + launcher.Run(); + yield return null; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs.meta new file mode 100644 index 0000000..67eea1a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/LegacyPlayerRunTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b93fe5bbea454ae438fcec241c5fa85b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs new file mode 100644 index 0000000..93878cf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs @@ -0,0 +1,39 @@ +using System; +using System.Collections; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class PerformUndoTask : TestTaskBase + { + private const double warningThreshold = 1000; + + internal Action RevertAllDownToGroup = Undo.RevertAllDownToGroup; + internal Action LogWarning = Debug.LogWarning; + internal Action DisplayProgressBar = EditorUtility.DisplayProgressBar; + internal Action ClearProgressBar = EditorUtility.ClearProgressBar; + internal Func TimeNow = () => DateTime.Now; + + public override IEnumerator Execute(TestJobData testJobData) + { + if (testJobData.undoGroup < 0) + { + yield break; + } + + DisplayProgressBar("Undo", "Reverting changes to the scene", 0); + + var undoStartTime = TimeNow(); + + RevertAllDownToGroup(testJobData.undoGroup); + + var timeDelta = TimeNow() - undoStartTime; + if (timeDelta.TotalMilliseconds >= warningThreshold) + { + LogWarning($"Undo after editor test run took {timeDelta.Seconds} second{(timeDelta.Seconds == 1 ? "" : "s")}."); + } + + ClearProgressBar(); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs.meta new file mode 100644 index 0000000..f506742 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PerformUndoTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb1abebffd37bd4458c84e15a5d7ab04 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs new file mode 100644 index 0000000..adec2ae --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs @@ -0,0 +1,20 @@ +using System; +using System.Collections; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class PrebuildSetupTask : BuildActionTaskBase + { + public PrebuildSetupTask() : base(new PrebuildSetupAttributeFinder()) + { + } + + protected override void Action(IPrebuildSetup target) + { + target.Setup(); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs.meta new file mode 100644 index 0000000..5a564af --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/PrebuildSetupTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc039194235714f48a39bd364885e744 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs new file mode 100644 index 0000000..50b4cf6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs @@ -0,0 +1,13 @@ +using System.Collections; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class RegisterFilesForCleanupVerificationTask : FileCleanupVerifierTaskBase + { + public override IEnumerator Execute(TestJobData testJobData) + { + testJobData.existingFiles = GetAllFilesInAssetsDirectory(); + yield return null; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs.meta new file mode 100644 index 0000000..51eb7dd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/RegisterFilesForCleanupVerificationTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a398fde47a0349a40a9bdf8988c392c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs new file mode 100644 index 0000000..d42f7b9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections; +using UnityEditor.SceneManagement; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class SaveModiedSceneTask : TestTaskBase + { + internal Func SaveCurrentModifiedScenesIfUserWantsTo = + EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo; + public override IEnumerator Execute(TestJobData testJobData) + { + var cancelled = !SaveCurrentModifiedScenesIfUserWantsTo(); + if (cancelled) + { + throw new TestRunCanceledException(); + } + + yield break; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs.meta new file mode 100644 index 0000000..7300f3b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveModiedSceneTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c321246872d389b469bd0cb86d3701ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs new file mode 100644 index 0000000..ee6de8f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal class SaveUndoIndexTask : TestTaskBase + { + internal Func GetUndoGroup = Undo.GetCurrentGroup; + public override IEnumerator Execute(TestJobData testJobData) + { + testJobData.undoGroup = GetUndoGroup(); + yield break; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs.meta new file mode 100644 index 0000000..30789a1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/SaveUndoIndexTask.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc0ce06a7515c044bb8db4c75db84114 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs new file mode 100644 index 0000000..81b1849 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs @@ -0,0 +1,16 @@ +using System.Collections; + +namespace UnityEditor.TestTools.TestRunner.TestRun.Tasks +{ + internal abstract class TestTaskBase + { + public bool SupportsResumingEnumerator; + + protected TestTaskBase(bool supportsResumingEnumerator = false) + { + SupportsResumingEnumerator = supportsResumingEnumerator; + } + + public abstract IEnumerator Execute(TestJobData testJobData); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs.meta new file mode 100644 index 0000000..8b54c2e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/Tasks/TestTaskBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 342d9ef4da0a19b49877f576c2deec14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobData.cs new file mode 100644 index 0000000..05ab503 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobData.cs @@ -0,0 +1,49 @@ +using System; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + [Serializable] + internal class TestJobData + { + [SerializeField] + public string guid; + + [SerializeField] + public int taskIndex; + + [SerializeField] + public int taskPC; + + [SerializeField] + public bool isRunning; + + [SerializeField] + public ExecutionSettings executionSettings; + + [SerializeField] + public string[] existingFiles; + + [SerializeField] + public int undoGroup = -1; + + [SerializeField] + public EditModeRunner editModeRunner; + + [NonSerialized] + public bool isHandledByRunner; + + public ITest testTree; + + public TestJobData(ExecutionSettings settings) + { + guid = Guid.NewGuid().ToString(); + executionSettings = settings; + isRunning = false; + taskIndex = 0; + taskPC = 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobData.cs.meta new file mode 100644 index 0000000..5da5662 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80ac8f5b2a7fa904dbc80111be88c8be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs new file mode 100644 index 0000000..7852f73 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs @@ -0,0 +1,28 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + internal class TestJobDataHolder : ScriptableSingleton + { + [SerializeField] + public List TestRuns = new List(); + + [InitializeOnLoadMethod] + private static void ResumeRunningJobs() + { + foreach (var testRun in instance.TestRuns.ToArray()) + { + if (testRun.isRunning) + { + var runner = new TestJobRunner(); + runner.RunJob(testRun); + } + else + { + instance.TestRuns.Remove(testRun); + } + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs.meta new file mode 100644 index 0000000..3612b80 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobDataHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 612b00d793cac3c49808ab3ee5428f16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobRunner.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobRunner.cs new file mode 100644 index 0000000..8a9cd4f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobRunner.cs @@ -0,0 +1,166 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.TestRun.Tasks; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + internal class TestJobRunner + { + private static IEnumerable GetTaskList(ExecutionSettings settings) + { + if (settings == null) + { + yield break; + } + + if (settings.EditModeIncluded() || (PlayerSettings.runPlayModeTestAsEditModeTest && settings.PlayModeInEditorIncluded())) + { + yield return new SaveModiedSceneTask(); + yield return new RegisterFilesForCleanupVerificationTask(); + yield return new SaveUndoIndexTask(); + yield return new BuildTestTreeTask(TestPlatform.EditMode); + yield return new PrebuildSetupTask(); + yield return new LegacyEditModeRunTask(); + yield return new PerformUndoTask(); + yield return new CleanupVerificationTask(); + yield break; + } + + if (settings.PlayModeInEditorIncluded() && !PlayerSettings.runPlayModeTestAsEditModeTest) + { + yield return new SaveModiedSceneTask(); + yield return new LegacyPlayModeRunTask(); + yield break; + } + + if (settings.PlayerIncluded()) + { + yield return new LegacyPlayerRunTask(); + yield break; + } + } + + internal List SavedTestJobData = TestJobDataHolder.instance.TestRuns; + internal Action SubscribeCallback = (callback) => EditorApplication.update += callback; + // ReSharper disable once DelegateSubtraction + internal Action UnsubscribeCallback = (callback) => EditorApplication.update -= callback; + internal TestCommandPcHelper PcHelper = new EditModePcHelper(); + internal Func> GetTasks = GetTaskList; + internal Action LogException = Debug.LogException; + internal Action LogError = Debug.LogError; + internal Action ReportRunFailed = CallbacksDelegator.instance.RunFailed; + + private TestJobData m_JobData; + private TestTaskBase[] Tasks; + private IEnumerator m_Enumerator = null; + + public string RunJob(TestJobData data) + { + if (data == null) + { + throw new ArgumentException(null, nameof(data)); + } + + if (m_JobData != null && m_JobData.isRunning) + { + throw new Exception("TestJobRunner is already running a job."); + } + + if (data.isHandledByRunner) + { + throw new Exception("Test job is already being handled."); + } + + m_JobData = data; + m_JobData.isHandledByRunner = true; + + if (!m_JobData.isRunning) + { + m_JobData.isRunning = true; + SavedTestJobData.Add(m_JobData); + } + + Tasks = GetTasks(data.executionSettings).ToArray(); + if (!data.executionSettings.runSynchronously) + { + SubscribeCallback(ExecuteStep); + } + else + { + while (data.isRunning) + { + ExecuteStep(); + } + } + + return data.guid; + } + + private void ExecuteStep() + { + try + { + if (m_JobData.taskIndex >= Tasks.Length) + { + StopRun(); + return; + } + + if (m_Enumerator == null) + { + var task = Tasks[m_JobData.taskIndex]; + m_Enumerator = task.Execute(m_JobData); + if (task.SupportsResumingEnumerator) + { + PcHelper.SetEnumeratorPC(m_Enumerator, m_JobData.taskPC); + } + } + + if (!m_Enumerator.MoveNext()) + { + m_JobData.taskIndex++; + m_JobData.taskPC = 0; + m_Enumerator = null; + return; + } + + if (Tasks[m_JobData.taskIndex].SupportsResumingEnumerator) + { + m_JobData.taskPC = PcHelper.GetEnumeratorPC(m_Enumerator); + } + } + catch (TestRunCanceledException) + { + StopRun(); + } + catch (AggregateException ex) + { + StopRun(); + LogError(ex.Message); + foreach (var innerException in ex.InnerExceptions) + { + LogException(innerException); + } + ReportRunFailed("Multiple unexpected errors happened while running tests."); + } + catch (Exception ex) + { + StopRun(); + LogException(ex); + ReportRunFailed("An unexpected error happened while running tests."); + } + } + + private void StopRun() + { + m_JobData.isRunning = false; + UnsubscribeCallback(ExecuteStep); + SavedTestJobData.Remove(m_JobData); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobRunner.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobRunner.cs.meta new file mode 100644 index 0000000..df11aa0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestJobRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b677ddfd54046c498a20446baa4f932 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs new file mode 100644 index 0000000..542c501 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs @@ -0,0 +1,9 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner.TestRun +{ + internal class TestRunCanceledException : Exception + { + + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs.meta new file mode 100644 index 0000000..2237e64 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRun/TestRunCanceledException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d45b9d3cf85bee4f99c1492fca8438a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner.meta new file mode 100644 index 0000000..d09886b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 49d4c2ab7ff0f4442af256bad7c9d57c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks.meta new file mode 100644 index 0000000..9e611a4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5d7f0d6acfced954682a89e7002c04d9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs new file mode 100644 index 0000000..a22c798 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModeRunnerCallback : ScriptableObject, ITestRunnerListener + { + private EditModeLauncherContextSettings m_Settings; + public SceneSetup[] previousSceneSetup; + public EditModeRunner runner; + + private bool m_Canceled; + private ITest m_CurrentTest; + private int m_TotalTests; + + [SerializeField] + private List m_PendingTests; + [SerializeField] + private string m_LastCountedTestName; + [SerializeField] + private bool m_RunRestarted; + + public void OnDestroy() + { + CleanUp(); + } + + public void RunStarted(ITest testsToRun) + { + Setup(); + if (m_PendingTests == null) + { + m_PendingTests = GetTestsExpectedToRun(testsToRun, runner.GetFilter()); + m_TotalTests = m_PendingTests.Count; + } + } + + public void OnEnable() + { + if (m_RunRestarted) + { + Setup(); + } + } + + private void Setup() + { + m_Settings = new EditModeLauncherContextSettings(); + Application.logMessageReceivedThreaded += LogReceived; + EditorApplication.playModeStateChanged += WaitForExitPlaymode; + EditorApplication.update += DisplayProgressBar; + AssemblyReloadEvents.beforeAssemblyReload += BeforeAssemblyReload; + } + + private void BeforeAssemblyReload() + { + if (m_CurrentTest != null) + { + m_LastCountedTestName = m_CurrentTest.FullName; + m_RunRestarted = true; + } + } + + private void DisplayProgressBar() + { + if (m_CurrentTest == null) + return; + if (!m_Canceled && EditorUtility.DisplayCancelableProgressBar("Test Runner", "Running test " + m_CurrentTest.Name, Math.Min(1.0f, (float)(m_TotalTests - m_PendingTests.Count) / m_TotalTests))) + { + EditorApplication.update -= DisplayProgressBar; + m_Canceled = true; + EditorUtility.ClearProgressBar(); + runner.OnRunCancel(); + } + } + + private static void LogReceived(string message, string stacktrace, LogType type) + { + if (TestContext.Out != null) + TestContext.Out.WriteLine(message); + } + + private static void WaitForExitPlaymode(PlayModeStateChange state) + { + if (state == PlayModeStateChange.EnteredEditMode) + { + EditorApplication.playModeStateChanged -= WaitForExitPlaymode; + //because logMessage is reset on Enter EditMode + //we remove and add the callback + //because Unity + Application.logMessageReceivedThreaded -= LogReceived; + Application.logMessageReceivedThreaded += LogReceived; + } + } + + public void RunFinished(ITestResult result) + { + if (previousSceneSetup != null && previousSceneSetup.Length > 0) + { + try + { + EditorSceneManager.RestoreSceneManagerSetup(previousSceneSetup); + } + catch (ArgumentException e) + { + Debug.LogWarning(e.Message); + } + } + else + { + foreach (var obj in FindObjectsOfType()) + { + if (obj != null && obj.transform.parent != null && (obj.transform.parent.hideFlags & HideFlags.DontSaveInEditor) == HideFlags.DontSaveInEditor && obj.transform.parent.gameObject != null) + { + DestroyImmediate(obj.transform.parent.gameObject); + } + } + + EditorSceneManager.NewScene(NewSceneSetup.DefaultGameObjects, NewSceneMode.Single); + } + CleanUp(); + } + + private void CleanUp() + { + m_CurrentTest = null; + EditorUtility.ClearProgressBar(); + if (m_Settings != null) + { + m_Settings.Dispose(); + } + Application.logMessageReceivedThreaded -= LogReceived; + EditorApplication.update -= DisplayProgressBar; + } + + public void TestStarted(ITest test) + { + if (test.IsSuite || !(test is TestMethod)) + { + return; + } + + m_CurrentTest = test; + + if (m_RunRestarted) + { + if (test.FullName == m_LastCountedTestName) + m_RunRestarted = false; + } + } + + public void TestFinished(ITestResult result) + { + if (result.Test is TestMethod) + { + m_PendingTests.Remove(result.Test.FullName); + } + } + + private static List GetTestsExpectedToRun(ITest test, ITestFilter filter) + { + var expectedTests = new List(); + + if (filter.Pass(test)) + { + if (test.IsSuite) + { + expectedTests.AddRange(test.Tests.SelectMany(subTest => GetTestsExpectedToRun(subTest, filter))); + } + else + { + expectedTests.Add(test.FullName); + } + } + + return expectedTests; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs.meta new file mode 100644 index 0000000..1a0d71c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/EditModeRunnerCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc456ba93311a3a43ad896449fee9868 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs new file mode 100644 index 0000000..a4976af --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs @@ -0,0 +1,86 @@ +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.CommandLineTest; +using UnityEditor.TestTools.TestRunner.GUI; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class RerunCallback : ScriptableObject, ICallbacks + { + public static bool useMockRunFilter = false; + public static UITestRunnerFilter mockRunFilter = null; + + public void RunFinished(ITestResultAdaptor result) + { + if (RerunCallbackData.instance.runFilters == null || RerunCallbackData.instance.runFilters.Length == 0) + RerunCallbackData.instance.runFilters = new[] {new UITestRunnerFilter()}; + + var runFilter = RerunCallbackData.instance.runFilters[0]; + + if (useMockRunFilter) + { + runFilter = mockRunFilter; + } + + runFilter.testRepetitions--; + if (runFilter.testRepetitions <= 0 || result.TestStatus != TestStatus.Passed) + { + ExitCallbacks.preventExit = false; + return; + } + + ExitCallbacks.preventExit = true; + if (EditorApplication.isPlaying) + { + EditorApplication.playModeStateChanged += WaitForExitPlaymode; + return; + } + + if (!useMockRunFilter) + { + ExecuteTestRunnerAPI(); + } + } + + private static void WaitForExitPlaymode(PlayModeStateChange state) + { + if (state == PlayModeStateChange.EnteredEditMode) + { + ExecuteTestRunnerAPI(); + } + } + + private static void ExecuteTestRunnerAPI() + { + var runFilter = RerunCallbackData.instance.runFilters[0]; + var testMode = RerunCallbackData.instance.testMode; + + var testRunnerApi = ScriptableObject.CreateInstance(); + testRunnerApi.Execute(new Api.ExecutionSettings() + { + filters = new[] + { + new Filter() + { + categoryNames = runFilter.categoryNames, + groupNames = runFilter.groupNames, + testMode = testMode, + testNames = runFilter.testNames + } + } + }); + } + + public void TestStarted(ITestAdaptor test) + { + } + + public void TestFinished(ITestResultAdaptor result) + { + } + + public void RunStarted(ITestAdaptor testsToRun) + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs.meta new file mode 100644 index 0000000..6dae8f2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34d30300ba8eb4959a74ac1f8f413c8d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs new file mode 100644 index 0000000..d6abd3f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs @@ -0,0 +1,15 @@ +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.GUI; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class RerunCallbackData : ScriptableSingleton + { + [SerializeField] + internal UITestRunnerFilter[] runFilters; + + [SerializeField] + internal TestMode testMode; + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs.meta new file mode 100644 index 0000000..8615d9b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5be0e972cb9434b7797b1d37dcd127c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs new file mode 100644 index 0000000..2260d4d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs @@ -0,0 +1,17 @@ +using UnityEngine; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner +{ + [InitializeOnLoad] + static class RerunCallbackInitializer + { + static RerunCallbackInitializer() + { + var testRunnerApi = ScriptableObject.CreateInstance(); + + var rerunCallback = ScriptableObject.CreateInstance(); + testRunnerApi.RegisterCallbacks(rerunCallback); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs.meta new file mode 100644 index 0000000..778b8fc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/RerunCallbackInitializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9cb48d7d0e6784c81ad36cdbfe8e4b6b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs new file mode 100644 index 0000000..4234754 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs @@ -0,0 +1,37 @@ +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestRunnerCallback : ScriptableObject, ITestRunnerListener + { + public void RunStarted(ITest testsToRun) + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + private void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (state == PlayModeStateChange.ExitingPlayMode) + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + //We need to make sure we don't block NUnit thread in case we exit PlayMode earlier + PlaymodeTestsController.TryCleanup(); + } + } + + public void RunFinished(ITestResult testResults) + { + EditorApplication.isPlaying = false; + } + + public void TestStarted(ITest testName) + { + } + + public void TestFinished(ITestResult test) + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs.meta new file mode 100644 index 0000000..1356ff9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/TestRunnerCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d44e6804bc58be84ea71a619b468f150 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs new file mode 100644 index 0000000..05465d8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs @@ -0,0 +1,59 @@ +using System.Linq; +using TestRunner.Callbacks; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.GUI +{ + internal class WindowResultUpdater : ICallbacks, ITestTreeRebuildCallbacks + { + public WindowResultUpdater() + { + var cachedResults = WindowResultUpdaterDataHolder.instance.CachedResults; + var testList = TestRunnerWindow.s_Instance.m_SelectedTestTypes; + foreach (var result in cachedResults) + { + testList.UpdateResult(result); + } + + cachedResults.Clear(); + + } + public void RunStarted(ITestAdaptor testsToRun) + { + } + + public void RunFinished(ITestResultAdaptor testResults) + { + if (TestRunnerWindow.s_Instance != null) + { + TestRunnerWindow.s_Instance.RebuildUIFilter(); + } + } + + public void TestStarted(ITestAdaptor testName) + { + } + + public void TestFinished(ITestResultAdaptor test) + { + var result = new TestRunnerResult(test); + if (TestRunnerWindow.s_Instance == null) + { + WindowResultUpdaterDataHolder.instance.CachedResults.Add(result); + return; + } + + TestRunnerWindow.s_Instance.m_SelectedTestTypes.UpdateResult(result); + } + + public void TestTreeRebuild(ITestAdaptor test) + { + if (TestRunnerWindow.s_Instance == null) + { + return; + } + + TestRunnerWindow.s_Instance.m_SelectedTestTypes.UpdateTestTree(test); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs.meta new file mode 100644 index 0000000..d9e35df --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdater.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d468ee3657be7a43a2ef2178ec14239 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdaterDataHolder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdaterDataHolder.cs new file mode 100644 index 0000000..a1fd48d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdaterDataHolder.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.TestTools.TestRunner.GUI; + +namespace TestRunner.Callbacks +{ + internal class WindowResultUpdaterDataHolder : ScriptableSingleton + { + public List CachedResults = new List(); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdaterDataHolder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdaterDataHolder.cs.meta new file mode 100644 index 0000000..aed0d8c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Callbacks/WindowResultUpdaterDataHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 82075836be5e0c64bbe84e1f9436682e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs new file mode 100644 index 0000000..8776887 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs @@ -0,0 +1,32 @@ +using System.Collections; +using System.Reflection; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditModePcHelper : TestCommandPcHelper + { + public override void SetEnumeratorPC(IEnumerator enumerator, int pc) + { + GetPCFieldInfo(enumerator).SetValue(enumerator, pc); + } + + public override int GetEnumeratorPC(IEnumerator enumerator) + { + if (enumerator == null) + { + return 0; + } + return (int)GetPCFieldInfo(enumerator).GetValue(enumerator); + } + + private FieldInfo GetPCFieldInfo(IEnumerator enumerator) + { + var field = enumerator.GetType().GetField("$PC", BindingFlags.NonPublic | BindingFlags.Instance); + if (field == null) // Roslyn + field = enumerator.GetType().GetField("<>1__state", BindingFlags.NonPublic | BindingFlags.Instance); + + return field; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs.meta new file mode 100644 index 0000000..ce559af --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModePCHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d16f2e78a356d34c9a32108929de932 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs new file mode 100644 index 0000000..9148182 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs @@ -0,0 +1,447 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Filters; +using UnityEngine; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.TestRunner; +using UnityEngine.TestTools; +using UnityEngine.TestTools.TestRunner.GUI; +using UnityEditor.Callbacks; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IUnityTestAssemblyRunnerFactory + { + IUnityTestAssemblyRunner Create(TestPlatform testPlatform, WorkItemFactory factory); + } + + internal class UnityTestAssemblyRunnerFactory : IUnityTestAssemblyRunnerFactory + { + public IUnityTestAssemblyRunner Create(TestPlatform testPlatform, WorkItemFactory factory) + { + return new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(), factory); + } + } + + [Serializable] + internal class EditModeRunner : ScriptableObject, IDisposable + { + [SerializeField] + private Filter[] m_Filters; + + //The counter from the IEnumerator object + [SerializeField] + private int m_CurrentPC; + + [SerializeField] + private bool m_ExecuteOnEnable; + + [SerializeField] + private List m_AlreadyStartedTests; + + [SerializeField] + private List m_ExecutedTests; + + [SerializeField] + private List m_CallbackObjects = new List(); + + [SerializeField] + private TestStartedEvent m_TestStartedEvent = new TestStartedEvent(); + + [SerializeField] + private TestFinishedEvent m_TestFinishedEvent = new TestFinishedEvent(); + + [SerializeField] + private RunStartedEvent m_RunStartedEvent = new RunStartedEvent(); + + [SerializeField] + private RunFinishedEvent m_RunFinishedEvent = new RunFinishedEvent(); + + [SerializeField] + private TestRunnerStateSerializer m_TestRunnerStateSerializer = new TestRunnerStateSerializer(); + + [SerializeField] + private bool m_RunningTests; + + [SerializeField] + private TestPlatform m_TestPlatform; + + [SerializeField] + private object m_CurrentYieldObject; + + [SerializeField] + private BeforeAfterTestCommandState m_SetUpTearDownState; + [SerializeField] + private BeforeAfterTestCommandState m_OuterUnityTestActionState; + + [SerializeField] + private EnumerableTestState m_EnumerableTestState; + + [SerializeField] + public bool RunFinished = false; + + public bool RunningSynchronously { get; private set; } + + internal IUnityTestAssemblyRunner m_Runner; + + private ConstructDelegator m_ConstructDelegator; + + private IEnumerator m_RunStep; + + public IUnityTestAssemblyRunnerFactory UnityTestAssemblyRunnerFactory { get; set; } + + public void Init(Filter[] filters, TestPlatform platform, bool runningSynchronously) + { + m_Filters = filters; + m_TestPlatform = platform; + m_AlreadyStartedTests = new List(); + m_ExecutedTests = new List(); + RunningSynchronously = runningSynchronously; + InitRunner(); + } + + private void InitRunner() + { + //We give the EditMode platform here so we dont suddenly create Playmode work items in the test Runner. + m_Runner = (UnityTestAssemblyRunnerFactory ?? new UnityTestAssemblyRunnerFactory()).Create(TestPlatform.EditMode, new EditmodeWorkItemFactory()); + var testAssemblyProvider = new EditorLoadedTestAssemblyProvider(new EditorCompilationInterfaceProxy(), new EditorAssembliesProxy()); + var assemblies = testAssemblyProvider.GetAssembliesGroupedByType(m_TestPlatform).Select(x => x.Assembly).ToArray(); + var loadedTests = m_Runner.Load(assemblies, TestPlatform.EditMode, + UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(m_TestPlatform)); + loadedTests.ParseForNameDuplicates(); + CallbacksDelegator.instance.TestTreeRebuild(loadedTests); + hideFlags |= HideFlags.DontSave; + EnumerableSetUpTearDownCommand.ActivePcHelper = new EditModePcHelper(); + OuterUnityTestActionCommand.ActivePcHelper = new EditModePcHelper(); + } + + public void OnEnable() + { + if (m_ExecuteOnEnable) + { + InitRunner(); + m_ExecuteOnEnable = false; + foreach (var callback in m_CallbackObjects) + { + AddListeners(callback as ITestRunnerListener); + } + m_ConstructDelegator = new ConstructDelegator(m_TestRunnerStateSerializer); + + EnumeratorStepHelper.SetEnumeratorPC(m_CurrentPC); + + UnityWorkItemDataHolder.alreadyExecutedTests = m_ExecutedTests.Select(x => x.uniqueName).ToList(); + UnityWorkItemDataHolder.alreadyStartedTests = m_AlreadyStartedTests; + Run(); + } + } + + public void TestStartedEvent(ITest test) + { + m_AlreadyStartedTests.Add(test.GetUniqueName()); + } + + public void TestFinishedEvent(ITestResult testResult) + { + m_AlreadyStartedTests.Remove(testResult.Test.GetUniqueName()); + m_ExecutedTests.Add(TestResultSerializer.MakeFromTestResult(testResult)); + } + + public void Run() + { + EditModeTestCallbacks.RestoringTestContext += OnRestoringTest; + var context = m_Runner.GetCurrentContext(); + if (m_SetUpTearDownState == null) + { + m_SetUpTearDownState = CreateInstance(); + } + context.SetUpTearDownState = m_SetUpTearDownState; + + if (m_OuterUnityTestActionState == null) + { + m_OuterUnityTestActionState = CreateInstance(); + } + context.OuterUnityTestActionState = m_OuterUnityTestActionState; + + if (m_EnumerableTestState == null) + { + m_EnumerableTestState = CreateInstance(); + } + context.EnumerableTestState = m_EnumerableTestState; + + if (!m_RunningTests) + { + m_RunStartedEvent.Invoke(m_Runner.LoadedTest); + } + + if (m_ConstructDelegator == null) + m_ConstructDelegator = new ConstructDelegator(m_TestRunnerStateSerializer); + + Reflect.ConstructorCallWrapper = m_ConstructDelegator.Delegate; + m_TestStartedEvent.AddListener(TestStartedEvent); + m_TestFinishedEvent.AddListener(TestFinishedEvent); + + AssemblyReloadEvents.beforeAssemblyReload += OnBeforeAssemblyReload; + + RunningTests = true; + + EditorApplication.LockReloadAssemblies(); + + var testListenerWrapper = new TestListenerWrapper(m_TestStartedEvent, m_TestFinishedEvent); + m_RunStep = m_Runner.Run(testListenerWrapper, GetFilter()).GetEnumerator(); + m_RunningTests = true; + + if (!RunningSynchronously) + EditorApplication.update += TestConsumer; + } + + public void CompleteSynchronously() + { + while (!m_Runner.IsTestComplete) + TestConsumer(); + } + + private void OnBeforeAssemblyReload() + { + EditorApplication.update -= TestConsumer; + + if (m_ExecuteOnEnable) + { + AssemblyReloadEvents.beforeAssemblyReload -= OnBeforeAssemblyReload; + return; + } + + if (m_Runner != null && m_Runner.TopLevelWorkItem != null) + m_Runner.TopLevelWorkItem.ResultedInDomainReload = true; + + if (RunningTests) + { + Debug.LogError("TestRunner: Unexpected assembly reload happened while running tests"); + + EditorUtility.ClearProgressBar(); + + if (m_Runner.GetCurrentContext() != null && m_Runner.GetCurrentContext().CurrentResult != null) + { + m_Runner.GetCurrentContext().CurrentResult.SetResult(ResultState.Cancelled, "Unexpected assembly reload happened"); + } + OnRunCancel(); + } + } + + private bool RunningTests; + + private Stack StepStack = new Stack(); + + private bool MoveNextAndUpdateYieldObject() + { + var result = m_RunStep.MoveNext(); + + if (result) + { + m_CurrentYieldObject = m_RunStep.Current; + while (m_CurrentYieldObject is IEnumerator) // going deeper + { + var currentEnumerator = (IEnumerator)m_CurrentYieldObject; + + // go deeper and add parent to stack + StepStack.Push(m_RunStep); + + m_RunStep = currentEnumerator; + m_CurrentYieldObject = m_RunStep.Current; + } + + if (StepStack.Count > 0 && m_CurrentYieldObject != null) // not null and not IEnumerator, nested + { + Debug.LogError("EditMode test can only yield null, but not <" + m_CurrentYieldObject.GetType().Name + ">"); + } + + return true; + } + + if (StepStack.Count == 0) // done + return false; + + m_RunStep = StepStack.Pop(); // going up + return MoveNextAndUpdateYieldObject(); + } + + private void TestConsumer() + { + var moveNext = MoveNextAndUpdateYieldObject(); + + if (m_CurrentYieldObject != null) + { + InvokeDelegator(); + } + + if (!moveNext && !m_Runner.IsTestComplete) + { + CompleteTestRun(); + throw new IndexOutOfRangeException("There are no more elements to process and IsTestComplete is false"); + } + + if (m_Runner.IsTestComplete) + { + CompleteTestRun(); + } + } + + private void CompleteTestRun() + { + if (!RunningSynchronously) + EditorApplication.update -= TestConsumer; + + TestLauncherBase.ExecutePostBuildCleanupMethods(this.GetLoadedTests(), this.GetFilter(), Application.platform); + + m_RunFinishedEvent.Invoke(m_Runner.Result); + RunFinished = true; + + if (m_ConstructDelegator != null) + m_ConstructDelegator.DestroyCurrentTestObjectIfExists(); + Dispose(); + UnityWorkItemDataHolder.alreadyExecutedTests = null; + } + + private void OnRestoringTest() + { + var item = m_ExecutedTests.Find(t => t.fullName == UnityTestExecutionContext.CurrentContext.CurrentTest.FullName); + if (item != null) + { + item.RestoreTestResult(UnityTestExecutionContext.CurrentContext.CurrentResult); + } + } + + private static bool IsCancelled() + { + return UnityTestExecutionContext.CurrentContext.ExecutionStatus == TestExecutionStatus.AbortRequested || UnityTestExecutionContext.CurrentContext.ExecutionStatus == TestExecutionStatus.StopRequested; + } + + private void InvokeDelegator() + { + if (m_CurrentYieldObject == null) + { + return; + } + + if (IsCancelled()) + { + return; + } + + if (m_CurrentYieldObject is RestoreTestContextAfterDomainReload) + { + if (m_TestRunnerStateSerializer.ShouldRestore()) + { + m_TestRunnerStateSerializer.RestoreContext(); + } + + return; + } + + try + { + if (m_CurrentYieldObject is IEditModeTestYieldInstruction) + { + var editModeTestYieldInstruction = (IEditModeTestYieldInstruction)m_CurrentYieldObject; + if (editModeTestYieldInstruction.ExpectDomainReload) + { + PrepareForDomainReload(); + } + return; + } + } + catch (Exception e) + { + UnityTestExecutionContext.CurrentContext.CurrentResult.RecordException(e); + return; + } + + Debug.LogError("EditMode test can only yield null"); + } + + private void CompilationFailureWatch() + { + if (EditorApplication.isCompiling) + return; + + EditorApplication.update -= CompilationFailureWatch; + + if (EditorUtility.scriptCompilationFailed) + { + EditorUtility.ClearProgressBar(); + OnRunCancel(); + } + } + + private void PrepareForDomainReload() + { + m_TestRunnerStateSerializer.SaveContext(); + m_CurrentPC = EnumeratorStepHelper.GetEnumeratorPC(TestEnumerator.Enumerator); + m_ExecuteOnEnable = true; + + RunningTests = false; + } + + public T AddEventHandler() where T : ScriptableObject, ITestRunnerListener + { + var eventHandler = CreateInstance(); + eventHandler.hideFlags |= HideFlags.DontSave; + m_CallbackObjects.Add(eventHandler); + + AddListeners(eventHandler); + + return eventHandler; + } + + private void AddListeners(ITestRunnerListener eventHandler) + { + m_TestStartedEvent.AddListener(eventHandler.TestStarted); + m_TestFinishedEvent.AddListener(eventHandler.TestFinished); + m_RunStartedEvent.AddListener(eventHandler.RunStarted); + m_RunFinishedEvent.AddListener(eventHandler.RunFinished); + } + + public void Dispose() + { + Reflect.MethodCallWrapper = null; + EditorApplication.update -= TestConsumer; + + DestroyImmediate(this); + + if (m_CallbackObjects != null) + { + foreach (var obj in m_CallbackObjects) + { + DestroyImmediate(obj); + } + m_CallbackObjects.Clear(); + } + RunningTests = false; + EditorApplication.UnlockReloadAssemblies(); + } + + public void OnRunCancel() + { + UnityWorkItemDataHolder.alreadyExecutedTests = null; + m_ExecuteOnEnable = false; + m_Runner.StopRun(); + RunFinished = true; + } + + public ITest GetLoadedTests() + { + return m_Runner.LoadedTest; + } + + public ITestFilter GetFilter() + { + return new OrFilter(m_Filters.Select(filter => filter.ToRuntimeTestRunnerFilter(RunningSynchronously).BuildNUnitFilter()).ToArray()); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs.meta new file mode 100644 index 0000000..78c0039 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditModeRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9219e99d466b7741a057132d1994f35 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs new file mode 100644 index 0000000..c2bf921 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs @@ -0,0 +1,14 @@ +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditmodeWorkItemFactory : WorkItemFactory + { + protected override UnityWorkItem Create(TestMethod method, ITestFilter filter, ITest loadedTest) + { + return new EditorEnumeratorTestWorkItem(method, filter); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs.meta new file mode 100644 index 0000000..ab4bd45 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditmodeWorkItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3dde15f260b0dd1469e60d16eaa795dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs new file mode 100644 index 0000000..acf09dd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs @@ -0,0 +1,181 @@ +using System; +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorEnumeratorTestWorkItem : UnityWorkItem + { + private TestCommand m_Command; + public EditorEnumeratorTestWorkItem(TestMethod test, ITestFilter filter) + : base(test, null) + { + m_Command = TestCommandBuilder.BuildTestCommand(test, filter); + } + + private static IEnumerableTestMethodCommand FindFirstIEnumerableTestMethodCommand(TestCommand command) + { + if (command == null) + { + return null; + } + + if (command is IEnumerableTestMethodCommand) + { + return (IEnumerableTestMethodCommand)command; + } + + if (command is DelegatingTestCommand) + { + var delegatingTestCommand = (DelegatingTestCommand)command; + return FindFirstIEnumerableTestMethodCommand(delegatingTestCommand.GetInnerCommand()); + } + return null; + } + + protected override IEnumerable PerformWork() + { + if (IsCancelledRun()) + { + yield break; + } + + if (m_DontRunRestoringResult) + { + if (EditModeTestCallbacks.RestoringTestContext == null) + { + throw new NullReferenceException("RestoringTestContext is not set"); + } + EditModeTestCallbacks.RestoringTestContext(); + Result = Context.CurrentResult; + yield break; + } + + try + { + if (IsCancelledRun()) + { + yield break; + } + + if (m_Command is SkipCommand) + { + m_Command.Execute(Context); + Result = Context.CurrentResult; + yield break; + } + + //Check if we can execute this test + var firstEnumerableCommand = FindFirstIEnumerableTestMethodCommand(m_Command); + if (firstEnumerableCommand == null) + { + Context.CurrentResult.SetResult(ResultState.Error, "Returning IEnumerator but not using test attribute supporting this"); + yield break; + } + if (Context.TestCaseTimeout == 0) + { + Context.TestCaseTimeout = k_DefaultTimeout; + } + if (m_Command.Test.Method.ReturnType.IsType(typeof(IEnumerator))) + { + if (m_Command is ApplyChangesToContextCommand) + { + var applyChangesToContextCommand = ((ApplyChangesToContextCommand)m_Command); + applyChangesToContextCommand.ApplyChanges(Context); + m_Command = applyChangesToContextCommand.GetInnerCommand(); + } + + var innerCommand = m_Command as IEnumerableTestMethodCommand; + if (innerCommand == null) + { + Debug.Log("failed getting innerCommand"); + throw new Exception("Tests returning IEnumerator can only use test attributes handling those"); + } + + foreach (var workItemStep in innerCommand.ExecuteEnumerable(Context)) + { + if (IsCancelledRun()) + { + yield break; + } + + if (workItemStep is TestEnumerator) + { + if (EnumeratorStepHelper.UpdateEnumeratorPcIfNeeded(TestEnumerator.Enumerator)) + { + yield return new RestoreTestContextAfterDomainReload(); + } + continue; + } + + if (workItemStep is AsyncOperation) + { + var asyncOperation = (AsyncOperation)workItemStep; + while (!asyncOperation.isDone) + { + if (IsCancelledRun()) + { + yield break; + } + + yield return null; + } + continue; + } + + ResultedInDomainReload = false; + + if (workItemStep is IEditModeTestYieldInstruction) + { + var editModeTestYieldInstruction = (IEditModeTestYieldInstruction)workItemStep; + yield return editModeTestYieldInstruction; + var enumerator = editModeTestYieldInstruction.Perform(); + while (true) + { + bool moveNext; + try + { + moveNext = enumerator.MoveNext(); + } + catch (Exception e) + { + Context.CurrentResult.RecordException(e); + break; + } + + if (!moveNext) + { + break; + } + yield return null; + } + } + else + { + yield return workItemStep; + } + } + + Result = Context.CurrentResult; + EditorApplication.isPlaying = false; + yield return null; + } + } + finally + { + WorkItemComplete(); + } + } + + private bool IsCancelledRun() + { + return Context.ExecutionStatus == TestExecutionStatus.AbortRequested || Context.ExecutionStatus == TestExecutionStatus.StopRequested; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs.meta new file mode 100644 index 0000000..982f7ee --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EditorEnumeratorTestWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ebc1994f9a3d5649a1201d3a84b38df +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs new file mode 100644 index 0000000..46fc714 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Reflection; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EnumeratorStepHelper + { + private static int m_PC; + + public static void SetEnumeratorPC(int pc) + { + m_PC = pc; + } + + /// + /// Gets the current enumerator PC + /// + /// + /// The PC + /// 0 if no current Enumeration + /// + public static int GetEnumeratorPC(IEnumerator enumerator) + { + if (enumerator == null) + { + return 0; + } + return (int)GetPCFieldInfo(enumerator).GetValue(enumerator); + } + + public static bool UpdateEnumeratorPcIfNeeded(IEnumerator enumerator) + { + if (m_PC != 0) + { + GetPCFieldInfo(enumerator).SetValue(enumerator, m_PC); + m_PC = 0; + return true; + } + return false; + } + + private static FieldInfo GetPCFieldInfo(IEnumerator enumerator) + { + var field = enumerator.GetType().GetField("$PC", BindingFlags.NonPublic | BindingFlags.Instance); + if (field == null) // Roslyn + field = enumerator.GetType().GetField("<>1__state", BindingFlags.NonPublic | BindingFlags.Instance); + + return field; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs.meta new file mode 100644 index 0000000..08662b9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/EnumeratorStepHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 901b761c5c1e22d4e8a3ba7d95bc1f5d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages.meta new file mode 100644 index 0000000..0660c63 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9682e749d3efc642af54d789d9090a6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs new file mode 100644 index 0000000..e8204de --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections; +using UnityEditor; + +namespace UnityEngine.TestTools +{ + /// + /// Implements . Creates a yield instruction to enter Play Mode. + /// + public class EnterPlayMode : IEditModeTestYieldInstruction + { + /// + /// Returns true if the instruction expects a domain reload to occur. + /// + public bool ExpectDomainReload { get; } + /// + /// Returns true if the instruction expects the Unity Editor to be in **Play Mode**. + /// + public bool ExpectedPlaymodeState { get; private set; } + /// + /// When creating an Editor test that uses the UnityTest attribute, use this to trigger the Editor to enter Play Mode. + /// Throws an exception if the Editor is already in Play Mode or if there is a script compilation error. + /// + /// A flag indication whether to expect a domain reload. + public EnterPlayMode(bool expectDomainReload = true) + { + ExpectDomainReload = expectDomainReload; + } + + /// + /// Performs the multi-step instructions of entering PlayMode. + /// + /// An IEnumerator with the async steps. + /// An exception is thrown if the editor is already in PlayMode or if script compilation failed. + public IEnumerator Perform() + { + if (EditorApplication.isPlaying) + { + throw new Exception("Editor is already in PlayMode"); + } + if (EditorUtility.scriptCompilationFailed) + { + throw new Exception("Script compilation failed"); + } + yield return null; + ExpectedPlaymodeState = true; + + EditorApplication.UnlockReloadAssemblies(); + EditorApplication.isPlaying = true; + + while (!EditorApplication.isPlaying) + { + yield return null; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs.meta new file mode 100644 index 0000000..fa1dc2e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/EnterPlayMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9bd5a110ed89025499ddee8c7e73778e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs new file mode 100644 index 0000000..b4d072d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections; +using UnityEditor; + +namespace UnityEngine.TestTools +{ + /// + /// Implements . A new instance of the class is a yield instruction to exit Play Mode. + /// + public class ExitPlayMode : IEditModeTestYieldInstruction + { + /// + /// Gets the value of ExpectDomainReload + /// + public bool ExpectDomainReload { get; } + /// + /// Gets the value of ExpectedPlaymodeState + /// + public bool ExpectedPlaymodeState { get; private set; } + /// + /// Sets ExpectDomainReload and ExpectedPlaymodeState to false. + /// + public ExitPlayMode() + { + ExpectDomainReload = false; + ExpectedPlaymodeState = false; + } + + /// + /// Performs the multi-step instruction of exiting PlayMode. + /// + /// An IEnumerator with the async steps. + /// An exception is thrown if the editor is not in PlayMode. + public IEnumerator Perform() + { + if (!EditorApplication.isPlayingOrWillChangePlaymode) + { + throw new Exception("Editor is already in EditMode"); + } + + EditorApplication.isPlaying = false; + while (EditorApplication.isPlaying) + { + yield return null; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs.meta new file mode 100644 index 0000000..1de769d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/ExitPlayMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 408674d91d506a54aac9a7f07951c018 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs new file mode 100644 index 0000000..41be8e7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs @@ -0,0 +1,111 @@ +using System; +using System.Collections; +using UnityEditor; + +namespace UnityEngine.TestTools +{ + /// + /// `RecompileScripts` is an that you can yield in Edit Mode tests. It lets you trigger a recompilation of scripts in the Unity Editor. + /// + public class RecompileScripts : IEditModeTestYieldInstruction + { + /// + /// Creates a new instance of the `RecompileScripts` yield instruction. + /// + /// + /// [UnitySetUp] + /// public IEnumerator SetUp() + /// { + /// using (var file = File.CreateText("Assets/temp/myScript.cs")) + /// { + /// file.Write("public class ATempClass { }"); + /// } + /// AssetDatabase.Refresh(); + /// yield return new RecompileScripts(); + /// } + /// + /// + /// + public RecompileScripts() : this(true) + { + } + /// + /// Creates a new instance of the `RecompileScripts` yield instruction. + /// + /// This parameter indicates if you expect a script compilation to start (defaults to true). If a script compilation does not start and `expectScriptCompilation` is true, then it throws an exception. + public RecompileScripts(bool expectScriptCompilation) : this(expectScriptCompilation, true) + { + } + /// + /// Creates a new instance of the `RecompileScripts` yield instruction. + /// + /// This parameter indicates if you expect a script compilation to start (defaults to true). If a script compilation does not start and `expectScriptCompilation` is `true`, then it throws an exception. + /// This parameter indicates if you expect a script compilation to succeed. If not succeeded then an exception will be thrown. + public RecompileScripts(bool expectScriptCompilation, bool expectScriptCompilationSuccess) + { + ExpectScriptCompilation = expectScriptCompilation; + ExpectScriptCompilationSuccess = expectScriptCompilationSuccess; + ExpectDomainReload = true; + } + + /// + /// Returns true if the instruction expects a domain reload to occur. + /// + public bool ExpectDomainReload { get; private set; } + /// + /// Returns true if the instruction expects the Unity Editor to be in **Play Mode**. + /// + public bool ExpectedPlaymodeState { get; } + /// + /// Indicates whether a script compilation is expected. + /// + public bool ExpectScriptCompilation { get; private set; } + /// + /// Indicates whether the expected script compilation is expected to succeed. + /// + public bool ExpectScriptCompilationSuccess { get; private set; } + + /// + /// The current active instance of the RecompileScripts yield instruction. + /// + public static RecompileScripts Current { get; private set; } + + /// + /// Perform the multi step instruction of triggering a recompilation of scripts and waiting for its completion. + /// + /// An IEnumerator with the async steps. + /// Throws an exception if the editor does not need to recompile scripts or if the script compilation failed when expected to succeed. + public IEnumerator Perform() + { + Current = this; + + // We need to yield, to give the test runner a chance to prepare for the domain reload + // If the script compilation happens very fast, then EditModeRunner.MoveNextAndUpdateYieldObject will not have a chance to set m_CurrentYieldObject + // This really should be fixed in EditModeRunner.MoveNextAndUpdateYieldObject + yield return null; + + AssetDatabase.Refresh(); + + if (ExpectScriptCompilation && !EditorApplication.isCompiling) + { + Current = null; + throw new Exception("Editor does not need to recompile scripts"); + } + + EditorApplication.UnlockReloadAssemblies(); + + while (EditorApplication.isCompiling) + { + yield return null; + } + + Current = null; + + if (ExpectScriptCompilationSuccess && EditorUtility.scriptCompilationFailed) + { + EditorApplication.LockReloadAssemblies(); + throw new Exception("Script compilation failed"); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs.meta new file mode 100644 index 0000000..f764d6e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/RecompileScripts.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9202fbba95ea8294cb5e718f028f21b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs new file mode 100644 index 0000000..922cd54 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections; +using UnityEditor; +using UnityEditorInternal; + +namespace UnityEngine.TestTools +{ + /// + /// WaitForDomainReload is an that you can yield in Edit Mode tests. It delays the execution of scripts until after an incoming domain reload. If the domain reload results in a script compilation failure, then it throws an exception. + /// + public class WaitForDomainReload : IEditModeTestYieldInstruction + { + /// + /// Create a new instance of the `WaitForDomainReload` yield instruction. + /// + /// + /// [UnitySetUp] + /// public IEnumerator SetUp() + /// { + /// File.Copy("Resources/MyDll.dll", @"Assets/MyDll.dll", true); // Trigger a domain reload. + /// AssetDatabase.Refresh(); + /// yield return new WaitForDomainReload(); + /// } + /// + /// + /// + public WaitForDomainReload() + { + ExpectDomainReload = true; + } + + /// + /// Returns true if the instruction expects a domain reload to occur. + /// + public bool ExpectDomainReload { get;  } + /// + /// Returns true if the instruction expects the Unity Editor to be in **Play Mode**. + /// + public bool ExpectedPlaymodeState { get; } + + /// + /// Perform the multi step action of waiting for a domain reload. + /// + /// An IEnumerator with steps. + /// Throws an exception if script compilation failed or if the expected domain reload did not occur. + public IEnumerator Perform() + { + EditorApplication.UnlockReloadAssemblies(); + + while (InternalEditorUtility.IsScriptReloadRequested() || EditorApplication.isCompiling) + { + yield return null; + } + + // Add this point the domain reload should have occured and stopped any further progress on the instruction. + EditorApplication.LockReloadAssemblies(); + throw new Exception( + EditorUtility.scriptCompilationFailed ? + "Script compilation failed" : + "Expected domain reload, but it did not occur"); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs.meta new file mode 100644 index 0000000..7fa45cb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Messages/WaitForDomainReload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5df3c21c5237c994db89660fbdfee07d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils.meta new file mode 100644 index 0000000..78ceec0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f5bbb88ca730434483440cbc0278ef6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs new file mode 100644 index 0000000..ff540e6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections.Generic; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class CachingTestListProvider + { + private readonly ITestListProvider m_InnerTestListProvider; + private readonly ITestListCache m_TestListCache; + private readonly ITestAdaptorFactory m_TestAdaptorFactory; + public CachingTestListProvider(ITestListProvider innerTestListProvider, ITestListCache testListCache, ITestAdaptorFactory testAdaptorFactory) + { + m_InnerTestListProvider = innerTestListProvider; + m_TestListCache = testListCache; + m_TestAdaptorFactory = testAdaptorFactory; + } + + public IEnumerator GetTestListAsync(TestPlatform platform) + { + var testFromCache = m_TestListCache.GetTestFromCacheAsync(platform); + while (testFromCache.MoveNext()) + { + yield return null; + } + + + if (testFromCache.Current != null) + { + yield return testFromCache.Current; + } + else + { + var test = m_InnerTestListProvider.GetTestListAsync(platform); + while (test.MoveNext()) + { + yield return null; + } + + test.Current.ParseForNameDuplicates(); + m_TestListCache.CacheTest(platform, test.Current); + yield return m_TestAdaptorFactory.Create(test.Current); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs.meta new file mode 100644 index 0000000..5756623 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/CachingTestListProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26f3e7301af463c4ca72fa98d59b429e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs new file mode 100644 index 0000000..bc0fe19 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs @@ -0,0 +1,13 @@ +using System.Linq; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorAssembliesProxy : IEditorAssembliesProxy + { + public IAssemblyWrapper[] loadedAssemblies + { + get { return EditorAssemblies.loadedAssemblies.OrderBy(a => a.FullName).Select(x => new EditorAssemblyWrapper(x)).ToArray(); } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs.meta new file mode 100644 index 0000000..fdb1b6c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssembliesProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f96d0ea807c081145a1170ed1b6d71e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs new file mode 100644 index 0000000..804eb4b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs @@ -0,0 +1,18 @@ +using System.Reflection; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorAssemblyWrapper : AssemblyWrapper + { + public EditorAssemblyWrapper(Assembly assembly) + : base(assembly) {} + + public override AssemblyName[] GetReferencedAssemblies() + { + return Assembly.GetReferencedAssemblies(); + } + + public override string Location { get { return Assembly.Location; } } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs.meta new file mode 100644 index 0000000..70bd58b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorAssemblyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20cdb37e6fea6d946bbb84d2c923db85 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs new file mode 100644 index 0000000..ad0b5ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs @@ -0,0 +1,17 @@ +using UnityEditor.Scripting.ScriptCompilation; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorCompilationInterfaceProxy : IEditorCompilationInterfaceProxy + { + public ScriptAssembly[] GetAllEditorScriptAssemblies() + { + return EditorCompilationInterface.Instance.GetAllEditorScriptAssemblies(EditorCompilationInterface.GetAdditionalEditorScriptCompilationOptions()); + } + + public PrecompiledAssembly[] GetAllPrecompiledAssemblies() + { + return EditorCompilationInterface.Instance.GetAllPrecompiledAssemblies(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs.meta new file mode 100644 index 0000000..ef5ade0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorCompilationInterfaceProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c9b23632c77de204abfe8bf7168d48c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs new file mode 100644 index 0000000..8a46cbf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs @@ -0,0 +1,69 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor.Scripting.ScriptCompilation; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class EditorLoadedTestAssemblyProvider : IEditorLoadedTestAssemblyProvider + { + private const string k_NunitAssemblyName = "nunit.framework"; + private const string k_TestRunnerAssemblyName = "UnityEngine.TestRunner"; + internal const string k_PerformanceTestingAssemblyName = "Unity.PerformanceTesting"; + + private readonly IEditorAssembliesProxy m_EditorAssembliesProxy; + private readonly ScriptAssembly[] m_AllEditorScriptAssemblies; + private readonly PrecompiledAssembly[] m_AllPrecompiledAssemblies; + + public EditorLoadedTestAssemblyProvider(IEditorCompilationInterfaceProxy compilationInterfaceProxy, IEditorAssembliesProxy editorAssembliesProxy) + { + m_EditorAssembliesProxy = editorAssembliesProxy; + m_AllEditorScriptAssemblies = compilationInterfaceProxy.GetAllEditorScriptAssemblies(); + m_AllPrecompiledAssemblies = compilationInterfaceProxy.GetAllPrecompiledAssemblies(); + } + + public List GetAssembliesGroupedByType(TestPlatform mode) + { + var assemblies = GetAssembliesGroupedByTypeAsync(mode); + while (assemblies.MoveNext()) + { + } + + return assemblies.Current.Where(pair => mode.IsFlagIncluded(pair.Key)).SelectMany(pair => pair.Value).ToList(); + } + + public IEnumerator>> GetAssembliesGroupedByTypeAsync(TestPlatform mode) + { + IAssemblyWrapper[] loadedAssemblies = m_EditorAssembliesProxy.loadedAssemblies; + + IDictionary> result = new Dictionary>() + { + {TestPlatform.EditMode, new List() }, + {TestPlatform.PlayMode, new List() } + }; + + foreach (var loadedAssembly in loadedAssemblies) + { + if (loadedAssembly.GetReferencedAssemblies().Any(x => x.Name == k_NunitAssemblyName || x.Name == k_TestRunnerAssemblyName || x.Name == k_PerformanceTestingAssemblyName)) + { + var assemblyName = new FileInfo(loadedAssembly.Location).Name; + var scriptAssemblies = m_AllEditorScriptAssemblies.Where(x => x.Filename == assemblyName).ToList(); + var precompiledAssemblies = m_AllPrecompiledAssemblies.Where(x => new FileInfo(x.Path).Name == assemblyName).ToList(); + if (scriptAssemblies.Count < 1 && precompiledAssemblies.Count < 1) + { + continue; + } + + var assemblyFlags = scriptAssemblies.Any() ? scriptAssemblies.Single().Flags : precompiledAssemblies.Single().Flags; + var assemblyType = (assemblyFlags & AssemblyFlags.EditorOnly) == AssemblyFlags.EditorOnly ? TestPlatform.EditMode : TestPlatform.PlayMode; + result[assemblyType].Add(loadedAssembly); + yield return null; + } + } + + yield return result; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs.meta new file mode 100644 index 0000000..efba6a7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/EditorLoadedTestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 033c884ba52437d49bc55935939ef1c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs new file mode 100644 index 0000000..35ec87d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs @@ -0,0 +1,9 @@ +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IEditorAssembliesProxy + { + IAssemblyWrapper[] loadedAssemblies { get; } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs.meta new file mode 100644 index 0000000..ad00f55 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorAssembliesProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98808b11e78f6c84a841a6b4bc5a29d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs new file mode 100644 index 0000000..25defb7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs @@ -0,0 +1,10 @@ +using UnityEditor.Scripting.ScriptCompilation; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IEditorCompilationInterfaceProxy + { + ScriptAssembly[] GetAllEditorScriptAssemblies(); + PrecompiledAssembly[] GetAllPrecompiledAssemblies(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs.meta new file mode 100644 index 0000000..2bc608b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorCompilationInterfaceProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28c8fcb831e6e734a9f564bc4f495eba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs new file mode 100644 index 0000000..d54bda7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Utils; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface IEditorLoadedTestAssemblyProvider + { + List GetAssembliesGroupedByType(TestPlatform mode); + IEnumerator>> GetAssembliesGroupedByTypeAsync(TestPlatform mode); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs.meta new file mode 100644 index 0000000..cbe4897 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/IEditorLoadedTestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 936b6288befc460409cfdff3ac92fc95 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs new file mode 100644 index 0000000..5df7a78 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestListCache + { + void CacheTest(TestPlatform platform, ITest test); + IEnumerator GetTestFromCacheAsync(TestPlatform platform); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs.meta new file mode 100644 index 0000000..41943d4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a704c010bcdb1ec4a9f3417b3c393164 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs new file mode 100644 index 0000000..d11fe47 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs @@ -0,0 +1,13 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestListCacheData + { + List platforms { get; } + List cachedData { get; } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs.meta new file mode 100644 index 0000000..b229c0c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListCacheData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7043e9a330ac2d84a80a965ada4589ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs new file mode 100644 index 0000000..b734f53 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs @@ -0,0 +1,11 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestListProvider + { + IEnumerator GetTestListAsync(TestPlatform platform); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs.meta new file mode 100644 index 0000000..b62929b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/ITestListProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 64689f8b25eadac4da519e96f514b653 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs new file mode 100644 index 0000000..e69bfcb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListCache : ITestListCache + { + private readonly ITestAdaptorFactory m_TestAdaptorFactory; + private readonly IRemoteTestResultDataFactory m_TestResultDataFactory; + private readonly ITestListCacheData m_TestListCacheData; + + public TestListCache(ITestAdaptorFactory testAdaptorFactory, IRemoteTestResultDataFactory testResultDataFactory, ITestListCacheData testListCacheData) + { + m_TestAdaptorFactory = testAdaptorFactory; + m_TestResultDataFactory = testResultDataFactory; + m_TestListCacheData = testListCacheData; + } + + public void CacheTest(TestPlatform platform, ITest test) + { + var index = m_TestListCacheData.platforms.IndexOf(platform); + if (index < 0) + { + m_TestListCacheData.cachedData.Add(test); + m_TestListCacheData.platforms.Add(platform); + } + else + { + m_TestListCacheData.cachedData[index] = test; + } + } + + public IEnumerator GetTestFromCacheAsync(TestPlatform platform) + { + var index = m_TestListCacheData.platforms.IndexOf(platform); + if (index < 0) + { + yield return null; + yield break; + } + + var testData = m_TestListCacheData.cachedData[index]; + yield return m_TestAdaptorFactory.Create(testData); + } + + [Callbacks.DidReloadScripts] + private static void ScriptReloaded() + { + TestListCacheData.instance.cachedData.Clear(); + TestListCacheData.instance.platforms.Clear(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs.meta new file mode 100644 index 0000000..ea8d096 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCache.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d685d97a1eb004f49afea0cc982ff728 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs new file mode 100644 index 0000000..175082f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using UnityEngine; +using UnityEngine.TestRunner.TestLaunchers; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListCacheData : ScriptableSingleton, ITestListCacheData + { + [SerializeField] + private List m_Platforms = new List(); + + [SerializeField] + private List m_CachedData = new List(); + + public List platforms + { + get { return m_Platforms; } + } + + public List cachedData + { + get { return m_CachedData; } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs.meta new file mode 100644 index 0000000..2ad79ac --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListCacheData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f1b6399349763114d9361bc6dfcd025b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs new file mode 100644 index 0000000..0df60c3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListJob + { + private CachingTestListProvider m_TestListProvider; + private TestPlatform m_Platform; + private Action m_Callback; + private IEnumerator m_ResultEnumerator; + public TestListJob(CachingTestListProvider testListProvider, TestPlatform platform, Action callback) + { + m_TestListProvider = testListProvider; + m_Platform = platform; + m_Callback = callback; + } + + public void Start() + { + m_ResultEnumerator = m_TestListProvider.GetTestListAsync(m_Platform); + EditorApplication.update += EditorUpdate; + } + + private void EditorUpdate() + { + if (!m_ResultEnumerator.MoveNext()) + { + m_Callback(m_ResultEnumerator.Current); + EditorApplication.update -= EditorUpdate; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs.meta new file mode 100644 index 0000000..a17c091 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListJob.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dec9066d4afefe444be0dad3f137730d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs new file mode 100644 index 0000000..1da846e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs @@ -0,0 +1,42 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestListProvider : ITestListProvider + { + private readonly EditorLoadedTestAssemblyProvider m_AssemblyProvider; + private readonly UnityTestAssemblyBuilder m_AssemblyBuilder; + + public TestListProvider(EditorLoadedTestAssemblyProvider assemblyProvider, UnityTestAssemblyBuilder assemblyBuilder) + { + m_AssemblyProvider = assemblyProvider; + m_AssemblyBuilder = assemblyBuilder; + } + + public IEnumerator GetTestListAsync(TestPlatform platform) + { + var assembliesTask = m_AssemblyProvider.GetAssembliesGroupedByTypeAsync(platform); + while (assembliesTask.MoveNext()) + { + yield return null; + } + + var assemblies = assembliesTask.Current.Where(pair => platform.IsFlagIncluded(pair.Key)) + .SelectMany(pair => pair.Value.Select(assemblyInfo => Tuple.Create(assemblyInfo.Assembly, pair.Key))).ToArray(); + + var settings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(platform); + var test = m_AssemblyBuilder.BuildAsync(assemblies.Select(a => a.Item1).ToArray(), assemblies.Select(a => a.Item2).ToArray(), settings); + while (test.MoveNext()) + { + yield return null; + } + + yield return test.Current; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs.meta new file mode 100644 index 0000000..c0e66d5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunner/Utils/TestListProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f15cbb987069826429540d0ea0937442 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindow.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindow.cs new file mode 100644 index 0000000..6fc0eba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindow.cs @@ -0,0 +1,275 @@ +using System; +using UnityEditor.Callbacks; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEditor.TestTools.TestRunner.GUI; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + /// + /// The TestRunnerWindow class is repsonsible for drawing the Test Runner window. + /// + [Serializable] + public class TestRunnerWindow : EditorWindow, IHasCustomMenu + { + internal static class Styles + { + public static GUIStyle info; + public static GUIStyle testList; + + static Styles() + { + info = new GUIStyle(EditorStyles.wordWrappedLabel); + info.wordWrap = false; + info.stretchHeight = true; + info.margin.right = 15; + + testList = new GUIStyle("CN Box"); + testList.margin.top = 0; + testList.padding.left = 3; + } + } + + private readonly GUIContent m_GUIHorizontalSplit = EditorGUIUtility.TrTextContent("Horizontal layout"); + private readonly GUIContent m_GUIVerticalSplit = EditorGUIUtility.TrTextContent("Vertical layout"); + private readonly GUIContent m_GUIEnableaPlaymodeTestsRunner = EditorGUIUtility.TrTextContent("Enable playmode tests for all assemblies"); + private readonly GUIContent m_GUIDisablePlaymodeTestsRunner = EditorGUIUtility.TrTextContent("Disable playmode tests for all assemblies"); + private readonly GUIContent m_GUIRunPlayModeTestAsEditModeTests = EditorGUIUtility.TrTextContent("Run playmode tests as editmode tests"); + + internal static TestRunnerWindow s_Instance; + private bool m_IsBuilding; + [NonSerialized] + private bool m_Enabled; + internal TestFilterSettings filterSettings; + + [SerializeField] + private SplitterState m_Spl = new SplitterState(new float[] { 75, 25 }, new[] { 32, 32 }, null); + + private TestRunnerWindowSettings m_Settings; + + private enum TestRunnerMenuLabels + { + PlayMode = 0, + EditMode = 1 + } + [SerializeField] + private int m_TestTypeToolbarIndex = (int)TestRunnerMenuLabels.EditMode; + [SerializeField] + private PlayModeTestListGUI m_PlayModeTestListGUI; + [SerializeField] + private EditModeTestListGUI m_EditModeTestListGUI; + + internal TestListGUI m_SelectedTestTypes; + + private ITestRunnerApi m_testRunnerApi; + + private WindowResultUpdater m_WindowResultUpdater; + + /// + /// Launches the Test Runner window. + /// + [MenuItem("Window/General/Test Runner", false, 201, false)] + public static void ShowWindow() + { + s_Instance = GetWindow("Test Runner"); + s_Instance.Show(); + } + + internal static void ShowPlaymodeTestsRunnerWindowCodeBased() + { + ShowWindow(); + } + + static TestRunnerWindow() + { + InitBackgroundRunners(); + } + + private static void InitBackgroundRunners() + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + } + + [DidReloadScripts] + private static void CompilationCallback() + { + UpdateWindow(); + } + + private static void OnPlayModeStateChanged(PlayModeStateChange state) + { + if (s_Instance && state == PlayModeStateChange.EnteredEditMode && s_Instance.m_SelectedTestTypes.HasTreeData()) + { + //repaint message details after exit playmode + s_Instance.m_SelectedTestTypes.TestSelectionCallback(s_Instance.m_SelectedTestTypes.m_TestListState.selectedIDs.ToArray()); + s_Instance.Repaint(); + } + } + + internal void OnDestroy() + { + EditorApplication.playModeStateChanged -= OnPlayModeStateChanged; + } + + private void OnEnable() + { + s_Instance = this; + SelectTestListGUI(m_TestTypeToolbarIndex); + + m_testRunnerApi = ScriptableObject.CreateInstance(); + m_WindowResultUpdater = new WindowResultUpdater(); + m_testRunnerApi.RegisterCallbacks(m_WindowResultUpdater); + } + + private void Enable() + { + m_Settings = new TestRunnerWindowSettings("UnityEditor.PlaymodeTestsRunnerWindow"); + filterSettings = new TestFilterSettings("UnityTest.IntegrationTestsRunnerWindow"); + + if (m_SelectedTestTypes == null) + { + SelectTestListGUI(m_TestTypeToolbarIndex); + } + + StartRetrieveTestList(); + m_SelectedTestTypes.Reload(); + m_Enabled = true; + } + + private void SelectTestListGUI(int testTypeToolbarIndex) + { + if (testTypeToolbarIndex == (int)TestRunnerMenuLabels.PlayMode) + { + if (m_PlayModeTestListGUI == null) + { + m_PlayModeTestListGUI = new PlayModeTestListGUI(); + } + m_SelectedTestTypes = m_PlayModeTestListGUI; + } + else if (testTypeToolbarIndex == (int)TestRunnerMenuLabels.EditMode) + { + if (m_EditModeTestListGUI == null) + { + m_EditModeTestListGUI = new EditModeTestListGUI(); + } + m_SelectedTestTypes = m_EditModeTestListGUI; + } + } + + private void StartRetrieveTestList() + { + if (!m_SelectedTestTypes.HasTreeData()) + { + var listToInit = m_SelectedTestTypes; + m_testRunnerApi.RetrieveTestList(m_SelectedTestTypes.TestMode, (rootTest) => + { + listToInit.Init(this, rootTest); + listToInit.Reload(); + }); + } + } + + internal void OnGUI() + { + if (!m_Enabled) + { + Enable(); + } + + if (BuildPipeline.isBuildingPlayer) + { + m_IsBuilding = true; + } + else if (m_IsBuilding) + { + m_IsBuilding = false; + Repaint(); + } + + EditorGUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + var selectedIndex = m_TestTypeToolbarIndex; + m_TestTypeToolbarIndex = GUILayout.Toolbar(m_TestTypeToolbarIndex, Enum.GetNames(typeof(TestRunnerMenuLabels)), "LargeButton", UnityEngine.GUI.ToolbarButtonSize.FitToContents); + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + + if (selectedIndex != m_TestTypeToolbarIndex) + { + SelectTestListGUI(m_TestTypeToolbarIndex); + StartRetrieveTestList(); + } + + EditorGUILayout.BeginVertical(); + using (new EditorGUI.DisabledScope(EditorApplication.isPlayingOrWillChangePlaymode)) + { + m_SelectedTestTypes.PrintHeadPanel(); + } + EditorGUILayout.EndVertical(); + + if (m_Settings.verticalSplit) + SplitterGUILayout.BeginVerticalSplit(m_Spl); + else + SplitterGUILayout.BeginHorizontalSplit(m_Spl); + + EditorGUILayout.BeginVertical(); + EditorGUILayout.BeginVertical(Styles.testList); + m_SelectedTestTypes.RenderTestList(); + EditorGUILayout.EndVertical(); + EditorGUILayout.EndVertical(); + + m_SelectedTestTypes.RenderDetails(); + + if (m_Settings.verticalSplit) + SplitterGUILayout.EndVerticalSplit(); + else + SplitterGUILayout.EndHorizontalSplit(); + } + + /// + /// Adds additional menu items to the Test Runner window. + /// + /// The + public void AddItemsToMenu(GenericMenu menu) + { + menu.AddItem(m_GUIVerticalSplit, m_Settings.verticalSplit, m_Settings.ToggleVerticalSplit); + menu.AddItem(m_GUIHorizontalSplit, !m_Settings.verticalSplit, m_Settings.ToggleVerticalSplit); + + menu.AddSeparator(null); + + var playModeTestRunnerEnabled = PlayerSettings.playModeTestRunnerEnabled; + var currentActive = playModeTestRunnerEnabled ? m_GUIDisablePlaymodeTestsRunner : m_GUIEnableaPlaymodeTestsRunner; + + if (EditorPrefs.GetBool("InternalMode", false)) + { + menu.AddItem(m_GUIRunPlayModeTestAsEditModeTests, PlayerSettings.runPlayModeTestAsEditModeTest, () => + { + PlayerSettings.runPlayModeTestAsEditModeTest = !PlayerSettings.runPlayModeTestAsEditModeTest; + }); + } + + menu.AddItem(currentActive, false, () => + { + PlayerSettings.playModeTestRunnerEnabled = !playModeTestRunnerEnabled; + EditorUtility.DisplayDialog(currentActive.text, "You need to restart the editor now", "Ok"); + }); + } + + internal void RebuildUIFilter() + { + if (m_SelectedTestTypes != null && m_SelectedTestTypes.HasTreeData()) + { + m_SelectedTestTypes.RebuildUIFilter(); + } + } + + internal static void UpdateWindow() + { + if (s_Instance != null && s_Instance.m_SelectedTestTypes != null) + { + s_Instance.m_SelectedTestTypes.Repaint(); + s_Instance.Repaint(); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindow.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindow.cs.meta new file mode 100644 index 0000000..5cb0e86 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dfcd3a631f61d248b7cc0b845d40345 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindowSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindowSettings.cs new file mode 100644 index 0000000..366df26 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindowSettings.cs @@ -0,0 +1,26 @@ +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestRunnerWindowSettings + { + public bool verticalSplit; + + private readonly string m_PrefsKey; + + public TestRunnerWindowSettings(string prefsKey) + { + m_PrefsKey = prefsKey; + verticalSplit = EditorPrefs.GetBool(m_PrefsKey + ".verticalSplit", true); + } + + public void ToggleVerticalSplit() + { + verticalSplit = !verticalSplit; + Save(); + } + + private void Save() + { + EditorPrefs.SetBool(m_PrefsKey + ".verticalSplit", verticalSplit); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindowSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindowSettings.cs.meta new file mode 100644 index 0000000..44bcc5a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestRunnerWindowSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2b301b727225f1941974d69e61a55620 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings.meta new file mode 100644 index 0000000..4127631 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95b719082a664ea45bb56759eed1f271 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettings.cs new file mode 100644 index 0000000..d272037 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettings.cs @@ -0,0 +1,22 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner +{ + internal interface ITestSettings : IDisposable + { + ScriptingImplementation? scriptingBackend { get; set; } + + string Architecture { get; set; } + + ApiCompatibilityLevel? apiProfile { get; set; } + + bool? appleEnableAutomaticSigning { get; set; } + string appleDeveloperTeamID { get; set; } + ProvisioningProfileType? iOSManualProvisioningProfileType { get; set; } + string iOSManualProvisioningProfileID { get; set; } + ProvisioningProfileType? tvOSManualProvisioningProfileType { get; set; } + string tvOSManualProvisioningProfileID { get; set; } + + void SetupProjectParameters(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettings.cs.meta new file mode 100644 index 0000000..9a8563c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 83eda34b7da01e04aa894f268158b0c0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs new file mode 100644 index 0000000..701c91d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner +{ + interface ITestSettingsDeserializer + { + ITestSettings GetSettingsFromJsonFile(string jsonFilePath); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs.meta new file mode 100644 index 0000000..72c587e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/ITestSettingsDeserializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d208a1684f8aa6a40ad91d6aa9600c14 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettings.cs new file mode 100644 index 0000000..a5bdf7a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettings.cs @@ -0,0 +1,160 @@ +using System; + +namespace UnityEditor.TestTools.TestRunner +{ + internal class TestSettings : ITestSettings + { + private readonly TestSetting[] m_Settings = + { + new TestSetting( + settings => settings.scriptingBackend, + () => PlayerSettings.GetScriptingBackend(EditorUserBuildSettings.activeBuildTargetGroup), + implementation => PlayerSettings.SetScriptingBackend(EditorUserBuildSettings.activeBuildTargetGroup, implementation.Value)), + new TestSetting( + settings => settings.Architecture, + () => EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android ? PlayerSettings.Android.targetArchitectures.ToString() : null, + architecture => + { + if (EditorUserBuildSettings.activeBuildTarget == BuildTarget.Android) + { + if (!string.IsNullOrEmpty(architecture)) + { + var targetArchitectures = (AndroidArchitecture)Enum.Parse(typeof(AndroidArchitecture), architecture, true); + PlayerSettings.Android.targetArchitectures = targetArchitectures; + } + } + }), + new TestSetting( + settings => settings.apiProfile, + () => PlayerSettings.GetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup), + implementation => + { + if (Enum.IsDefined(typeof(ApiCompatibilityLevel), implementation.Value)) + { + PlayerSettings.SetApiCompatibilityLevel(EditorUserBuildSettings.activeBuildTargetGroup, + implementation.Value); + } + }), + new TestSetting( + settings => settings.appleEnableAutomaticSigning, + () => PlayerSettings.iOS.appleEnableAutomaticSigning, + enableAutomaticSigning => + { + if (enableAutomaticSigning != null) + PlayerSettings.iOS.appleEnableAutomaticSigning = enableAutomaticSigning.Value; + }), + new TestSetting( + settings => settings.appleDeveloperTeamID, + () => PlayerSettings.iOS.appleDeveloperTeamID, + developerTeam => + { + if (developerTeam != null) + PlayerSettings.iOS.appleDeveloperTeamID = developerTeam; + }), + new TestSetting( + settings => settings.iOSManualProvisioningProfileType, + () => PlayerSettings.iOS.iOSManualProvisioningProfileType, + profileType => + { + if (profileType != null) + PlayerSettings.iOS.iOSManualProvisioningProfileType = profileType.Value; + }), + new TestSetting( + settings => settings.iOSManualProvisioningProfileID, + () => PlayerSettings.iOS.iOSManualProvisioningProfileID, + provisioningUUID => + { + if (provisioningUUID != null) + PlayerSettings.iOS.iOSManualProvisioningProfileID = provisioningUUID; + }), + new TestSetting( + settings => settings.tvOSManualProvisioningProfileType, + () => PlayerSettings.iOS.tvOSManualProvisioningProfileType, + profileType => + { + if (profileType != null) + PlayerSettings.iOS.tvOSManualProvisioningProfileType = profileType.Value; + }), + new TestSetting( + settings => settings.tvOSManualProvisioningProfileID, + () => PlayerSettings.iOS.tvOSManualProvisioningProfileID, + provisioningUUID => + { + if (provisioningUUID != null) + PlayerSettings.iOS.tvOSManualProvisioningProfileID = provisioningUUID; + }), + }; + + private bool m_Disposed; + + public ScriptingImplementation? scriptingBackend { get; set; } + + public string Architecture { get; set; } + + public ApiCompatibilityLevel? apiProfile { get; set; } + + public bool? appleEnableAutomaticSigning { get; set; } + public string appleDeveloperTeamID { get; set; } + public ProvisioningProfileType? iOSManualProvisioningProfileType { get; set; } + public string iOSManualProvisioningProfileID { get; set; } + public ProvisioningProfileType? tvOSManualProvisioningProfileType { get; set; } + public string tvOSManualProvisioningProfileID { get; set; } + + public void Dispose() + { + if (!m_Disposed) + { + foreach (var testSetting in m_Settings) + { + testSetting.Cleanup(); + } + + m_Disposed = true; + } + } + + public void SetupProjectParameters() + { + foreach (var testSetting in m_Settings) + { + testSetting.Setup(this); + } + } + + private abstract class TestSetting + { + public abstract void Setup(TestSettings settings); + public abstract void Cleanup(); + } + + private class TestSetting : TestSetting + { + private T m_ValueBeforeSetup; + private Func m_GetFromSettings; + private Func m_GetCurrentValue; + private Action m_SetValue; + + public TestSetting(Func getFromSettings, Func getCurrentValue, Action setValue) + { + m_GetFromSettings = getFromSettings; + m_GetCurrentValue = getCurrentValue; + m_SetValue = setValue; + } + + public override void Setup(TestSettings settings) + { + m_ValueBeforeSetup = m_GetCurrentValue(); + var newValue = m_GetFromSettings(settings); + if (newValue != null) + { + m_SetValue(newValue); + } + } + + public override void Cleanup() + { + m_SetValue(m_ValueBeforeSetup); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettings.cs.meta new file mode 100644 index 0000000..23e6f5e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6b32b6725087a0d4bb1670818d26996e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs new file mode 100644 index 0000000..cdba06e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner +{ + /// + /// Handles deserialization of TestSettings from a provided json file path. + /// + internal class TestSettingsDeserializer : ITestSettingsDeserializer + { + private static readonly SettingsMap[] s_SettingsMapping = + { + new SettingsMap("scriptingBackend", (settings, value) => settings.scriptingBackend = value), + new SettingsMap("architecture", (settings, value) => settings.Architecture = value), + new SettingsMap("apiProfile", (settings, value) => settings.apiProfile = value), + new SettingsMap("appleEnableAutomaticSigning", (settings, value) => settings.appleEnableAutomaticSigning = value), + new SettingsMap("appleDeveloperTeamID", (settings, value) => settings.appleDeveloperTeamID = value), + new SettingsMap("iOSManualProvisioningProfileType", (settings, value) => settings.iOSManualProvisioningProfileType = value), + new SettingsMap("iOSManualProvisioningProfileID", (settings, value) => settings.iOSManualProvisioningProfileID = value), + new SettingsMap("tvOSManualProvisioningProfileType", (settings, value) => settings.tvOSManualProvisioningProfileType = value), + new SettingsMap("tvOSManualProvisioningProfileID", (settings, value) => settings.tvOSManualProvisioningProfileID = value), + }; + + private readonly Func m_TestSettingsFactory; + public TestSettingsDeserializer(Func testSettingsFactory) + { + m_TestSettingsFactory = testSettingsFactory; + } + + public ITestSettings GetSettingsFromJsonFile(string jsonFilePath) + { + var text = File.ReadAllText(jsonFilePath); + var settingsDictionary = Json.Deserialize(text) as Dictionary; + + var testSettings = m_TestSettingsFactory(); + if (settingsDictionary == null) + { + return testSettings; + } + + foreach (var settingsMap in s_SettingsMapping) + { + if (!settingsDictionary.ContainsKey(settingsMap.Key)) + { + continue; + } + + if (settingsMap.Type.IsEnum) + { + SetEnumValue(settingsMap.Key, settingsDictionary[settingsMap.Key], settingsMap.Type, value => settingsMap.ApplyToSettings(testSettings, value)); + } + else + { + SetValue(settingsMap.Key, settingsDictionary[settingsMap.Key], settingsMap.Type, value => settingsMap.ApplyToSettings(testSettings, value)); + } + } + + return testSettings; + } + + private abstract class SettingsMap + { + public string Key { get; } + public Type Type { get; } + protected SettingsMap(string key, Type type) + { + Key = key; + Type = type; + } + + public abstract void ApplyToSettings(ITestSettings settings, object value); + } + + private class SettingsMap : SettingsMap + { + private Action m_Setter; + public SettingsMap(string key, Action setter) : base(key, typeof(T)) + { + m_Setter = setter; + } + + public override void ApplyToSettings(ITestSettings settings, object value) + { + m_Setter(settings, (T)value); + } + } + + private static void SetEnumValue(string key, object value, Type type, Action setter) + { + object enumValue; + if (TryGetEnum(value as string, type, out enumValue)) + { + setter(enumValue); + return; + } + + var acceptedValues = string.Join(", ", Enum.GetValues(type).OfType().Select(val => val.ToString()).ToArray()); + + Debug.LogFormat("Could not convert '{0}' argument '{1}' to a valid {2}. Accepted values: {3}.", key, value, type.Name, acceptedValues); + } + + private static bool TryGetEnum(string value, Type type, out object enumValue) + { + try + { + enumValue = Enum.Parse(type, value, true); + return true; + } + catch (Exception) + { + enumValue = null; + return false; + } + } + + private static void SetValue(string key, object value, Type type, Action setter) + { + if (type.IsInstanceOfType(value)) + { + setter(value); + return; + } + + Debug.LogFormat("Could not convert '{0}' argument '{1}' to a valid {2}.", key, value, type.Name); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs.meta new file mode 100644 index 0000000..4d50295 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/TestSettings/TestSettingsDeserializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 75e7d7a9a57458841a85fe42d9c9141f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef new file mode 100644 index 0000000..efdc7cf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef @@ -0,0 +1,21 @@ +{ + "name": "UnityEditor.TestRunner", + "references": [ + "UnityEngine.TestRunner" + ], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll", + "Mono.Cecil.dll", + "Mono.Cecil.Pdb.dll", + "Mono.Cecil.Mdb.dll", + "Mono.Cecil.Rocks.dll" + ], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef.meta new file mode 100644 index 0000000..63c0290 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityEditor.TestRunner.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0acc523941302664db1f4e527237feb3 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol.meta new file mode 100644 index 0000000..8499c83 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 936c6340f3468444ebb1785b4c311126 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs new file mode 100644 index 0000000..7f00c5b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs @@ -0,0 +1,13 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class AssemblyCompilationErrorsMessage : Message + { + public string assembly; + public string[] errors; + + public AssemblyCompilationErrorsMessage() + { + type = "AssemblyCompilationErrors"; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs.meta new file mode 100644 index 0000000..67d5b2a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/AssemblyCompilationErrorsMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c346a7445959bba46a96de0747e77c2a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs new file mode 100644 index 0000000..f7dcacf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + interface ITestRunnerApiMapper + { + string GetRunStateFromResultNunitXml(ITestResultAdaptor result); + TestState GetTestStateFromResult(ITestResultAdaptor result); + List FlattenTestNames(ITestAdaptor testsToRun); + TestPlanMessage MapTestToTestPlanMessage(ITestAdaptor testsToRun); + TestStartedMessage MapTestToTestStartedMessage(ITestAdaptor test); + TestFinishedMessage TestResultToTestFinishedMessage(ITestResultAdaptor result); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs.meta new file mode 100644 index 0000000..75e0ba2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/ITestRunnerApiMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6de79ae237e51554da96fd28f68b66a6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs new file mode 100644 index 0000000..bdb96c1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs @@ -0,0 +1,7 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + interface IUtpLogger + { + void Log(Message msg); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs.meta new file mode 100644 index 0000000..dbd33aa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpLogger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9014630255533ed42915965b4065cde8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs new file mode 100644 index 0000000..3a9895e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using UnityEditor.Compilation; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal interface IUtpMessageReporter + { + void ReportAssemblyCompilationErrors(string assembly, IEnumerable errorCompilerMessages); + void ReportTestFinished(ITestResultAdaptor result); + void ReportTestRunStarted(ITestAdaptor testsToRun); + void ReportTestStarted(ITestAdaptor test); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs.meta new file mode 100644 index 0000000..4c96a90 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/IUtpMessageReporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 952b3dc7b47846947b37c8d3ae46579a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/Message.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/Message.cs new file mode 100644 index 0000000..d10a5e4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/Message.cs @@ -0,0 +1,29 @@ +using System; +using System.Diagnostics; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + [Serializable] + internal abstract class Message + { + public string type; + // Milliseconds since unix epoch + public ulong time; + public int version; + public string phase; + public int processId; + + protected Message() + { + version = 2; + phase = "Immediate"; + processId = Process.GetCurrentProcess().Id; + AddTimeStamp(); + } + + public void AddTimeStamp() + { + time = Convert.ToUInt64((DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalMilliseconds); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/Message.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/Message.cs.meta new file mode 100644 index 0000000..bfc702b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/Message.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 321dc2c0720f8dd4f9396ecdc12b8746 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs new file mode 100644 index 0000000..66e18ff --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs @@ -0,0 +1,18 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestFinishedMessage : Message + { + public string name; + public TestState state; + public string message; + public ulong duration; // milliseconds + public ulong durationMicroseconds; + public string stackTrace; + + public TestFinishedMessage() + { + type = "TestStatus"; + phase = "End"; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs.meta new file mode 100644 index 0000000..15b951b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestFinishedMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 423fe2ef878fa1140a7e1f7f9e365815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs new file mode 100644 index 0000000..c0a76da --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestPlanMessage : Message + { + public List tests; + + public TestPlanMessage() + { + type = "TestPlan"; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs.meta new file mode 100644 index 0000000..c057f60 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestPlanMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 28f79a0d7e64c2345bc46f8c4cf788f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs new file mode 100644 index 0000000..af93dba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs @@ -0,0 +1,99 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Xml; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestRunnerApiMapper : ITestRunnerApiMapper + { + public TestPlanMessage MapTestToTestPlanMessage(ITestAdaptor testsToRun) + { + var testsNames = testsToRun != null ? FlattenTestNames(testsToRun) : new List(); + + var msg = new TestPlanMessage + { + tests = testsNames + }; + + return msg; + } + + public TestStartedMessage MapTestToTestStartedMessage(ITestAdaptor test) + { + return new TestStartedMessage + { + name = test.FullName + }; + } + + public TestFinishedMessage TestResultToTestFinishedMessage(ITestResultAdaptor result) + { + return new TestFinishedMessage + { + name = result.Test.FullName, + duration = Convert.ToUInt64(result.Duration * 1000), + durationMicroseconds = Convert.ToUInt64(result.Duration * 1000000), + message = result.Message, + state = GetTestStateFromResult(result), + stackTrace = result.StackTrace + }; + } + + public string GetRunStateFromResultNunitXml(ITestResultAdaptor result) + { + var doc = new XmlDocument(); + doc.LoadXml(result.ToXml().OuterXml); + return doc.FirstChild.Attributes["runstate"].Value; + } + + public TestState GetTestStateFromResult(ITestResultAdaptor result) + { + var state = TestState.Failure; + + if (result.TestStatus == TestStatus.Passed) + { + state = TestState.Success; + + var runstate = GetRunStateFromResultNunitXml(result); + runstate = runstate ?? String.Empty; + + if (runstate.ToLowerInvariant().Equals("explicit")) + state = TestState.Skipped; + } + else if (result.TestStatus == TestStatus.Skipped) + { + state = TestState.Skipped; + + if (result.ResultState.ToLowerInvariant().EndsWith("ignored")) + state = TestState.Ignored; + } + else + { + if (result.ResultState.ToLowerInvariant().Equals("inconclusive")) + state = TestState.Inconclusive; + + if (result.ResultState.ToLowerInvariant().EndsWith("cancelled") || + result.ResultState.ToLowerInvariant().EndsWith("error")) + state = TestState.Error; + } + + return state; + } + + public List FlattenTestNames(ITestAdaptor test) + { + var results = new List(); + + if (!test.IsSuite) + results.Add(test.FullName); + + if (test.Children != null && test.Children.Any()) + foreach (var child in test.Children) + results.AddRange(FlattenTestNames(child)); + + return results; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs.meta new file mode 100644 index 0000000..47634b9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestRunnerApiMapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2011a59d3f76b3d4a85cb53f945fceee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs new file mode 100644 index 0000000..c21464f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs @@ -0,0 +1,15 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class TestStartedMessage : Message + { + public string name; + public TestState state; + + public TestStartedMessage() + { + type = "TestStatus"; + phase = "Begin"; + state = TestState.Inconclusive; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs.meta new file mode 100644 index 0000000..18b53d1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestStartedMessage.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd3e81baa10021f4d877fa36382bab16 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs new file mode 100644 index 0000000..223a73d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs @@ -0,0 +1,13 @@ +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + // This matches the state definitions expected by the Perl code, which in turn matches the NUnit 2 values... + internal enum TestState + { + Inconclusive = 0, + Skipped = 2, + Ignored = 3, + Success = 4, + Failure = 5, + Error = 6 + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs.meta new file mode 100644 index 0000000..ac66641 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/TestState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77f432980bb30084299a138e15c6f571 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs new file mode 100644 index 0000000..09daf8d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs @@ -0,0 +1,35 @@ +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class UnityTestProtocolListener : ScriptableObject, ICallbacks + { + private IUtpMessageReporter m_UtpMessageReporter; + + public UnityTestProtocolListener() + { + m_UtpMessageReporter = new UtpMessageReporter(new UtpDebugLogger()); + } + + public void RunStarted(ITestAdaptor testsToRun) + { + m_UtpMessageReporter.ReportTestRunStarted(testsToRun); + } + + public void RunFinished(ITestResultAdaptor testResults) + { + // Apparently does nothing :) + } + + public void TestStarted(ITestAdaptor test) + { + m_UtpMessageReporter.ReportTestStarted(test); + } + + public void TestFinished(ITestResultAdaptor result) + { + m_UtpMessageReporter.ReportTestFinished(result); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs.meta new file mode 100644 index 0000000..8ba29be --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 900aac3710bc14542a8d164e3f0ff820 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs new file mode 100644 index 0000000..cca2fd8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs @@ -0,0 +1,37 @@ +using System; +using System.Linq; +using UnityEditor.Compilation; +using UnityEditor.TestTools.TestRunner.Api; +using UnityEngine; +using UnityEngine.TestTools; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + [InitializeOnLoad] + internal static class UnityTestProtocolStarter + { + static UnityTestProtocolStarter() + { + var commandLineArgs = Environment.GetCommandLineArgs(); + if (commandLineArgs.Contains("-automated") && commandLineArgs.Contains("-runTests")) // wanna have it only for utr run + { + var api = ScriptableObject.CreateInstance(); + var listener = ScriptableObject.CreateInstance(); + api.RegisterCallbacks(listener); + CompilationPipeline.assemblyCompilationFinished += OnAssemblyCompilationFinished; + } + } + + public static void OnAssemblyCompilationFinished(string assembly, CompilerMessage[] messages) + { + bool checkCompileErrors = RecompileScripts.Current == null || RecompileScripts.Current.ExpectScriptCompilationSuccess; + + if (checkCompileErrors && messages.Any(x => x.type == CompilerMessageType.Error)) + { + var compilerErrorMessages = messages.Where(x => x.type == CompilerMessageType.Error); + var utpMessageReporter = new UtpMessageReporter(new UtpDebugLogger()); + utpMessageReporter.ReportAssemblyCompilationErrors(assembly, compilerErrorMessages); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs.meta new file mode 100644 index 0000000..540b31e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UnityTestProtocolStarter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1ac58cb55fc8daf4abd3945a2bbbb0c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs new file mode 100644 index 0000000..e32f6d2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs @@ -0,0 +1,13 @@ +using UnityEngine; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + class UtpDebugLogger : IUtpLogger + { + public void Log(Message msg) + { + var msgJson = JsonUtility.ToJson(msg); + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "\n##utp:{0}", msgJson); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs.meta new file mode 100644 index 0000000..7debc23 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpDebuglogger.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d0abdd8cb6b29a24c8ee19626ef741b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs new file mode 100644 index 0000000..37c4ee7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs @@ -0,0 +1,57 @@ +using System.Collections.Generic; +using System.Linq; +using UnityEditor.Compilation; +using UnityEditor.TestTools.TestRunner.Api; + +namespace UnityEditor.TestTools.TestRunner.UnityTestProtocol +{ + internal class UtpMessageReporter : IUtpMessageReporter + { + public ITestRunnerApiMapper TestRunnerApiMapper; + public IUtpLogger Logger; + + public UtpMessageReporter(IUtpLogger utpLogger) + { + TestRunnerApiMapper = new TestRunnerApiMapper(); + Logger = utpLogger; + } + + public void ReportAssemblyCompilationErrors(string assembly, IEnumerable errorCompilerMessages) + { + var compilationErrorMessage = new AssemblyCompilationErrorsMessage + { + assembly = assembly, + errors = errorCompilerMessages.Select(x => x.message).ToArray() + }; + + Logger.Log(compilationErrorMessage); + } + + public void ReportTestRunStarted(ITestAdaptor testsToRun) + { + var msg = TestRunnerApiMapper.MapTestToTestPlanMessage(testsToRun); + + Logger.Log(msg); + } + + public void ReportTestStarted(ITestAdaptor test) + { + if (test.IsSuite) + return; + + var msg = TestRunnerApiMapper.MapTestToTestStartedMessage(test); + + Logger.Log(msg); + } + + public void ReportTestFinished(ITestResultAdaptor result) + { + if (result.Test.IsSuite) + return; + + var msg = TestRunnerApiMapper.TestResultToTestFinishedMessage(result); + + Logger.Log(msg); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs.meta new file mode 100644 index 0000000..c818d4f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEditor.TestRunner/UnityTestProtocol/UtpMessageReporter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebcc5f899d9277642868aeda9a17cbaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner.meta new file mode 100644 index 0000000..9589050 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 950890083f4907541a6ed06d70959e49 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/AssemblyInfo.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/AssemblyInfo.cs new file mode 100644 index 0000000..4149677 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/AssemblyInfo.cs @@ -0,0 +1,16 @@ +using System.Reflection; +using System.Runtime.CompilerServices; + +[assembly: AssemblyTitle("UnityEngine.TestRunner")] + +[assembly: InternalsVisibleTo("UnityEditor.TestRunner")] +[assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] +[assembly: InternalsVisibleTo("Unity.PerformanceTesting")] +[assembly: InternalsVisibleTo("Unity.PerformanceTesting.Editor")] +[assembly: InternalsVisibleTo("Assembly-CSharp-testable")] +[assembly: InternalsVisibleTo("Assembly-CSharp-Editor-testable")] +[assembly: InternalsVisibleTo("UnityEngine.TestRunner.Tests")] +[assembly: InternalsVisibleTo("UnityEditor.TestRunner.Tests")] +[assembly: InternalsVisibleTo("Unity.PackageManagerUI.Editor")] + +[assembly: AssemblyVersion("1.0.0")] diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/AssemblyInfo.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/AssemblyInfo.cs.meta new file mode 100644 index 0000000..b499e31 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc22cc13b69c1094c85e176c008b9ef8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions.meta new file mode 100644 index 0000000..4e7bbdf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ad55f5ad04d1d045a1f287409c650dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs new file mode 100644 index 0000000..a823ba4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs @@ -0,0 +1,127 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Constraints; +using UnityEngine.Profiling; + +namespace UnityEngine.TestTools.Constraints +{ + /// + /// An NUnit test constraint class to test whether a given block of code makes any GC allocations. + /// + /// Use this class with NUnit's Assert.That() method to make assertions about the GC behaviour of your code. The constraint executes the delegate you provide, and checks if it has caused any GC memory to be allocated. If any GC memory was allocated, the constraint passes; otherwise, the constraint fails. + /// + /// Usually you negate this constraint to make sure that your delegate does not allocate any GC memory. This is easy to do using the Is class: + /// + /// + /// + /// using NUnit.Framework; + /// using UnityEngine.TestTools.Constraints; + /// using Is = UnityEngine.TestTools.Constraints.Is; + /// + /// public class MyTestClass + /// { + /// [Test] + /// public void SettingAVariableDoesNotAllocate() + /// { + /// Assert.That(() => { + /// int a = 0; + /// a = 1; + /// }, Is.Not.AllocatingGCMemory()); + /// } + /// } + /// + /// + public class AllocatingGCMemoryConstraint : Constraint + { + private class AllocatingGCMemoryResult : ConstraintResult + { + private readonly int diff; + public AllocatingGCMemoryResult(IConstraint constraint, object actualValue, int diff) : base(constraint, actualValue, diff > 0) + { + this.diff = diff; + } + + public override void WriteMessageTo(MessageWriter writer) + { + if (diff == 0) + writer.WriteMessageLine("The provided delegate did not make any GC allocations."); + else + writer.WriteMessageLine("The provided delegate made {0} GC allocation(s).", diff); + } + } + + private ConstraintResult ApplyTo(Action action, object original) + { + var recorder = Recorder.Get("GC.Alloc"); + + // The recorder was created enabled, which means it captured the creation of the Recorder object itself, etc. + // Disabling it flushes its data, so that we can retrieve the sample block count and have it correctly account + // for these initial allocations. + recorder.enabled = false; + +#if !UNITY_WEBGL + recorder.FilterToCurrentThread(); +#endif + + recorder.enabled = true; + + try + { + action(); + } + finally + { + recorder.enabled = false; +#if !UNITY_WEBGL + recorder.CollectFromAllThreads(); +#endif + } + + return new AllocatingGCMemoryResult(this, original, recorder.sampleBlockCount); + } + + /// + /// Applies GC memory constraint to the test. + /// + /// An ActualValueDelegate + /// A ConstraintResult + /// Throws a if the provided object is null. + /// Throws a if the provided object is not a . + public override ConstraintResult ApplyTo(object obj) + { + if (obj == null) + throw new ArgumentNullException(); + + TestDelegate d = obj as TestDelegate; + if (d == null) + throw new ArgumentException(string.Format("The actual value must be a TestDelegate but was {0}", + obj.GetType())); + + return ApplyTo(() => d.Invoke(), obj); + } + + /// + /// Test whether the constraint is satisfied by a given reference. + /// The default implementation simply dereferences the value but + /// derived classes may override it to provide for delayed processing. + /// + /// A reference to the value delegate to be tested + /// A ConstraintResult + /// Throws a if the provided delegate is null. + public override ConstraintResult ApplyTo(ActualValueDelegate del) + { + if (del == null) + throw new ArgumentNullException(); + + return ApplyTo(() => del.Invoke(), del); + } + + /// + /// The Description of what this constraint tests, for to use in messages and in the ConstraintResult. + /// + public override string Description + { + get { return "allocates GC memory"; } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs.meta new file mode 100644 index 0000000..0933c85 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/AllocatingGCMemoryConstraint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d09858396dd7adb4bbdb22ea0c8c3a37 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs new file mode 100644 index 0000000..812b1f0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs @@ -0,0 +1,14 @@ +using NUnit.Framework.Constraints; + +namespace UnityEngine.TestTools.Constraints +{ + public static class ConstraintExtensions + { + public static AllocatingGCMemoryConstraint AllocatingGCMemory(this ConstraintExpression chain) + { + var constraint = new AllocatingGCMemoryConstraint(); + chain.Append(constraint); + return constraint; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs.meta new file mode 100644 index 0000000..1343496 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/ConstraintsExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68a48d1900320ed458e118415857faf6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs new file mode 100644 index 0000000..ab4ff8e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs @@ -0,0 +1,18 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class InvalidSignatureException : ResultStateException + { + public InvalidSignatureException(string message) + : base(message) + { + } + + public override ResultState ResultState + { + get { return ResultState.NotRunnable; } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs.meta new file mode 100644 index 0000000..86aee7f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/InvalidSignatureException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9650d910fcaefb34cb45f121c1993892 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/Is.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/Is.cs new file mode 100644 index 0000000..c0871ef --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/Is.cs @@ -0,0 +1,10 @@ +namespace UnityEngine.TestTools.Constraints +{ + public class Is : NUnit.Framework.Is + { + public static AllocatingGCMemoryConstraint AllocatingGCMemory() + { + return new AllocatingGCMemoryConstraint(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/Is.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/Is.cs.meta new file mode 100644 index 0000000..23ed44a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/Is.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d5833966abeadb429de247e4316eef4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogAssert.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogAssert.cs new file mode 100644 index 0000000..b4ee7e7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogAssert.cs @@ -0,0 +1,74 @@ +using System.Text.RegularExpressions; +using UnityEngine.TestTools.Logging; + +namespace UnityEngine.TestTools +{ + /// + /// A test fails if Unity logs a message other than a regular log or warning message. Use `LogAssert` to check for an expected message in the log so that the test does not fail when Unity logs the message. + /// Use `LogAssert.Expect` before running the code under test, as the check for expected logs runs at the end of each frame. + /// A test also reports a failure, if an expected message does not appear, or if Unity does not log any regular log or warning messages. + /// + /// `LogAssert` lets you expect Unity log messages that would otherwise cause the test to fail. + /// + public static class LogAssert + { + /// A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. + /// A string value that should equate to the expected message. + /// + /// + /// [Test] + /// public void LogAssertExample() + /// { + /// // Expect a regular log message + /// LogAssert.Expect(LogType.Log, "Log message"); + /// + /// // The test fails without the following expected log message + /// Debug.Log("Log message"); + /// + /// // An error log + /// Debug.LogError("Error message"); + /// + /// // Without expecting an error log, the test would fail + /// LogAssert.Expect(LogType.Error, "Error message"); + /// } + /// + /// + /// + public static void Expect(LogType type, string message) + { + LogScope.Current.ExpectedLogs.Enqueue(new LogMatch() { LogType = type, Message = message }); + } + /// + /// Verifies that a log message of a specified type appears in the log. A test won't fail from an expected error, assertion, or exception log message. It does fail if an expected message does not appear in the log. + /// + /// A type of log to expect. It can take one of the [LogType enum](https://docs.unity3d.com/ScriptReference/LogType.html) values. + /// A regular expression pattern to match the expected message. + public static void Expect(LogType type, Regex message) + { + LogScope.Current.ExpectedLogs.Enqueue(new LogMatch() { LogType = type, MessageRegex = message }); + } + /// + /// Triggers an assertion when receiving any log messages and fails the test if some are unexpected messages. If multiple tests need to check for no received unexpected logs, consider using the attribute instead. + /// + public static void NoUnexpectedReceived() + { + LogScope.Current.NoUnexpectedReceived(); + } + /// Set this property to `true` to prevent unexpected error log messages from triggering an assertion. By default, it is `false`. + public static bool ignoreFailingMessages + { + get + { + return LogScope.Current.IgnoreFailingMessages; + } + set + { + if (value != LogScope.Current.IgnoreFailingMessages) + { + Debug.LogFormat(LogType.Log, LogOption.NoStacktrace, null, "\nIgnoreFailingMessages:" + (value? "true":"false")); + } + LogScope.Current.IgnoreFailingMessages = value; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogAssert.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogAssert.cs.meta new file mode 100644 index 0000000..7a278a3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogAssert.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c97b794b51780d349a16826a4c7898d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope.meta new file mode 100644 index 0000000..284dc6a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b1d8465ba1376b148bdab58965101f47 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs new file mode 100644 index 0000000..5e73bb5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Logging +{ + internal interface ILogScope : IDisposable + { + Queue ExpectedLogs { get; set; } + List AllLogs { get; } + List FailingLogs { get; } + bool IgnoreFailingMessages { get; set; } + bool IsNUnitException { get; } + bool IsNUnitSuccessException { get; } + bool IsNUnitInconclusiveException { get; } + bool IsNUnitIgnoreException { get; } + string NUnitExceptionMessage { get; } + void AddLog(string message, string stacktrace, LogType type); + bool AnyFailingLogs(); + void ProcessExpectedLogs(); + void NoUnexpectedReceived(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs.meta new file mode 100644 index 0000000..69e7d55 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/ILogScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3504aa04cda851b44a65973f9aead6f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs new file mode 100644 index 0000000..bbc805e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs @@ -0,0 +1,18 @@ +namespace UnityEngine.TestTools.Logging +{ + internal class LogEvent + { + public string Message { get; set; } + + public string StackTrace { get; set; } + + public LogType LogType { get; set; } + + public bool IsHandled { get; set; } + + public override string ToString() + { + return string.Format("[{0}] {1}", LogType, Message); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs.meta new file mode 100644 index 0000000..66c9130 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogEvent.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c56471f08a0f6846afc792f0b4205b9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs new file mode 100644 index 0000000..9b862d9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs @@ -0,0 +1,103 @@ +using System; +using System.Text.RegularExpressions; + +namespace UnityEngine.TestTools.Logging +{ + [Serializable] + internal class LogMatch + { + [SerializeField] + private bool m_UseRegex; + [SerializeField] + private string m_Message; + [SerializeField] + private string m_MessageRegex; + [SerializeField] + private string m_LogType; + + public string Message + { + get { return m_Message; } + set + { + m_Message = value; + m_UseRegex = false; + } + } + + public Regex MessageRegex + { + get + { + if (!m_UseRegex) + { + return null; + } + + return new Regex(m_MessageRegex); + } + set + { + if (value != null) + { + m_MessageRegex = value.ToString(); + m_UseRegex = true; + } + else + { + m_MessageRegex = null; + m_UseRegex = false; + } + } + } + + public LogType? LogType + { + get + { + if (!string.IsNullOrEmpty(m_LogType)) + { + return Enum.Parse(typeof(LogType), m_LogType) as LogType ? ; + } + + return null; + } + set + { + if (value != null) + { + m_LogType = value.Value.ToString(); + } + else + { + m_LogType = null; + } + } + } + + public bool Matches(LogEvent log) + { + if (LogType != null && LogType != log.LogType) + { + return false; + } + + if (m_UseRegex) + { + return MessageRegex.IsMatch(log.Message); + } + else + { + return Message.Equals(log.Message); + } + } + + public override string ToString() + { + if (m_UseRegex) + return string.Format("[{0}] Regex: {1}", LogType, MessageRegex); + else + return string.Format("[{0}] {1}", LogType, Message); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs.meta new file mode 100644 index 0000000..ffc2bc3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogMatch.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9945ffed4692c6044b6d3acf81efd694 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs new file mode 100644 index 0000000..84957d8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs @@ -0,0 +1,223 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools.Logging +{ + sealed class LogScope : ILogScope + { + static List s_ActiveScopes = new List(); + + readonly object m_Lock = new object(); + bool m_Disposed; + bool m_NeedToProcessLogs; + + public Queue ExpectedLogs { get; set; } + public List AllLogs { get; } + public List FailingLogs { get; } + public bool IgnoreFailingMessages { get; set; } + public bool IsNUnitException { get; private set; } + public bool IsNUnitSuccessException { get; private set; } + public bool IsNUnitInconclusiveException { get; private set; } + public bool IsNUnitIgnoreException { get; private set; } + public string NUnitExceptionMessage { get; private set; } + + public static LogScope Current + { + get + { + if (s_ActiveScopes.Count == 0) + throw new InvalidOperationException("No log scope is available"); + return s_ActiveScopes[0]; + } + } + + public static bool HasCurrentLogScope() + { + return s_ActiveScopes.Count > 0; + } + + public LogScope() + { + AllLogs = new List(); + FailingLogs = new List(); + ExpectedLogs = new Queue(); + IgnoreFailingMessages = false; + Activate(); + } + + void Activate() + { + s_ActiveScopes.Insert(0, this); + RegisterScope(this); + Application.logMessageReceivedThreaded -= AddLog; + Application.logMessageReceivedThreaded += AddLog; + } + + void Deactivate() + { + Application.logMessageReceivedThreaded -= AddLog; + s_ActiveScopes.Remove(this); + UnregisterScope(this); + } + + static void RegisterScope(LogScope logScope) + { + Application.logMessageReceivedThreaded += logScope.AddLog; + } + + static void UnregisterScope(LogScope logScope) + { + Application.logMessageReceivedThreaded -= logScope.AddLog; + } + + public void AddLog(string message, string stacktrace, LogType type) + { + lock (m_Lock) + { + m_NeedToProcessLogs = true; + var log = new LogEvent + { + LogType = type, + Message = message, + StackTrace = stacktrace, + }; + + AllLogs.Add(log); + + if (IsNUnitResultStateException(stacktrace, type)) + { + if (message.StartsWith("SuccessException")) + { + IsNUnitException = true; + IsNUnitSuccessException = true; + if (message.StartsWith("SuccessException: ")) + { + NUnitExceptionMessage = message.Substring("SuccessException: ".Length); + return; + } + } + else if (message.StartsWith("InconclusiveException")) + { + IsNUnitException = true; + IsNUnitInconclusiveException = true; + if (message.StartsWith("InconclusiveException: ")) + { + NUnitExceptionMessage = message.Substring("InconclusiveException: ".Length); + return; + } + } + else if (message.StartsWith("IgnoreException")) + { + IsNUnitException = true; + IsNUnitIgnoreException = true; + if (message.StartsWith("IgnoreException: ")) + { + NUnitExceptionMessage = message.Substring("IgnoreException: ".Length); + return; + } + } + } + + if (IsFailingLog(type) && !IgnoreFailingMessages) + { + FailingLogs.Add(log); + } + } + } + + static bool IsNUnitResultStateException(string stacktrace, LogType logType) + { + if (logType != LogType.Exception) + return false; + + return string.IsNullOrEmpty(stacktrace) || stacktrace.StartsWith("NUnit.Framework.Assert."); + } + + static bool IsFailingLog(LogType type) + { + switch (type) + { + case LogType.Assert: + case LogType.Error: + case LogType.Exception: + return true; + default: + return false; + } + } + + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + void Dispose(bool disposing) + { + if (m_Disposed) + { + return; + } + + m_Disposed = true; + + if (disposing) + { + Deactivate(); + } + } + + public bool AnyFailingLogs() + { + ProcessExpectedLogs(); + return FailingLogs.Any(); + } + + public void ProcessExpectedLogs() + { + lock (m_Lock) + { + if (!m_NeedToProcessLogs || !ExpectedLogs.Any()) + return; + + LogMatch expectedLog = null; + foreach (var logEvent in AllLogs) + { + if (!ExpectedLogs.Any()) + break; + if (expectedLog == null && ExpectedLogs.Any()) + expectedLog = ExpectedLogs.Peek(); + + if (expectedLog != null && expectedLog.Matches(logEvent)) + { + ExpectedLogs.Dequeue(); + logEvent.IsHandled = true; + if (FailingLogs.Any(expectedLog.Matches)) + { + var failingLog = FailingLogs.First(expectedLog.Matches); + FailingLogs.Remove(failingLog); + } + expectedLog = null; + } + } + m_NeedToProcessLogs = false; + } + } + + public void NoUnexpectedReceived() + { + lock (m_Lock) + { + ProcessExpectedLogs(); + + var unhandledLog = AllLogs.FirstOrDefault(x => !x.IsHandled); + if (unhandledLog != null) + { + throw new UnhandledLogMessageException(unhandledLog); + } + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs.meta new file mode 100644 index 0000000..ea13dd6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/LogScope/LogScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bbc17b35884fdf468e4b52ae4222882 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs new file mode 100644 index 0000000..8ad39f4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs @@ -0,0 +1,29 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools.Logging; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class UnexpectedLogMessageException : ResultStateException + { + public LogMatch LogEvent; + + public UnexpectedLogMessageException(LogMatch log) + : base(BuildMessage(log)) + { + LogEvent = log; + } + + private static string BuildMessage(LogMatch log) + { + return string.Format("Expected log did not appear: {0}", log); + } + + public override ResultState ResultState + { + get { return ResultState.Failure; } + } + + public override string StackTrace { get { return null; } } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs.meta new file mode 100644 index 0000000..7b9e611 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnexpectedLogMessageException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b2eeca598284bd4abb4a15c30df1576 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs new file mode 100644 index 0000000..9427cc8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs @@ -0,0 +1,35 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.Utils; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class UnhandledLogMessageException : ResultStateException + { + public LogEvent LogEvent; + private readonly string m_CustomStackTrace; + + public UnhandledLogMessageException(LogEvent log) + : base(BuildMessage(log)) + { + LogEvent = log; + m_CustomStackTrace = StackTraceFilter.Filter(log.StackTrace); + } + + private static string BuildMessage(LogEvent log) + { + return string.Format("Unhandled log message: '{0}'. Use UnityEngine.TestTools.LogAssert.Expect", log); + } + + public override ResultState ResultState + { + get { return ResultState.Failure; } + } + + public override string StackTrace + { + get { return m_CustomStackTrace; } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs.meta new file mode 100644 index 0000000..1019924 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnhandledLogMessageException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8ed4063f2beecd41a234a582202f3c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs new file mode 100644 index 0000000..6e4243e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs @@ -0,0 +1,28 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class UnityTestTimeoutException : ResultStateException + { + public UnityTestTimeoutException(int timeout) + : base(BuildMessage(timeout)) + { + } + + private static string BuildMessage(int timeout) + { + return string.Format("Timeout value of {0}ms was exceeded", timeout); + } + + public override ResultState ResultState + { + get { return ResultState.Failure; } + } + + public override string StackTrace + { + get { return ""; } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs.meta new file mode 100644 index 0000000..d366ec9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Assertions/UnityTestTimeoutException.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ffb335140c799c4408411d81789fb05c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions.meta new file mode 100644 index 0000000..3023e52 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3e8d6af343b383544ba5743d119f4062 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs new file mode 100644 index 0000000..ed8d896 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs @@ -0,0 +1,79 @@ +using System; +using System.Linq; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + /// + /// This class delegates actions from the NUnit thread that should be executed on the main thread. + /// NUnit thread calls Delegate which blocks the execution on the thread until the action is executed. + /// The main thread will poll for awaiting actions (HasAction) and invoke them (Execute). + /// Once the action is executed, the main thread releases the lock and executino on the NUnit thread is continued. + /// + internal class ActionDelegator : BaseDelegator + { + private Func m_Action; + public object Delegate(Action action) + { + return Delegate(() => { action(); return null; }); + } + + public object Delegate(Func action) + { + if (m_Aborted) + { + return null; + } + + AssertState(); + m_Context = UnityTestExecutionContext.CurrentContext; + + m_Signal.Reset(); + m_Action = action; + + WaitForSignal(); + + return HandleResult(); + } + + private void AssertState() + { + if (m_Action != null) + { + throw new Exception("Action not executed yet"); + } + } + + public bool HasAction() + { + return m_Action != null; + } + + public void Execute(LogScope logScope) + { + try + { + SetCurrentTestContext(); + m_Result = m_Action(); + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + if (logScope.ExpectedLogs.Any()) + throw new UnexpectedLogMessageException(LogScope.Current.ExpectedLogs.Peek()); + } + catch (Exception e) + { + m_Exception = e; + } + finally + { + m_Action = null; + m_Signal.Set(); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs.meta new file mode 100644 index 0000000..5f4e2d1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ActionDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f939b9e23a0946439b812551e07ac81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes.meta new file mode 100644 index 0000000..c7cae09 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0cb14878543cf3d4f8472b15f7ecf0e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs new file mode 100644 index 0000000..2ef144c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs @@ -0,0 +1,85 @@ +using System.Collections.Generic; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + /// + /// This attribute is an alternative to the standard `Ignore` attribute in [NUnit](https://nunit.org/). It allows for ignoring tests only under a specified condition. The condition evaluates during `OnLoad`, referenced by ID. + /// + public class ConditionalIgnoreAttribute : NUnitAttribute, IApplyToTest + { + string m_ConditionKey; + string m_IgnoreReason; + + /// + /// Initializes a new instance of the class with a condition key. + /// + /// The key to check for enabling the conditional ignore. The condition is set with the static method. + /// The reason for the ignore. + public ConditionalIgnoreAttribute(string conditionKey, string ignoreReason) + { + m_ConditionKey = conditionKey; + m_IgnoreReason = ignoreReason; + } + + /// + /// Modifies a test as defined for the specific attribute. + /// + /// The test to modify + public void ApplyToTest(Test test) + { + var key = m_ConditionKey.ToLowerInvariant(); + if (m_ConditionMap.ContainsKey(key) && m_ConditionMap[key]) + { + test.RunState = RunState.Ignored; + string skipReason = string.Format(m_IgnoreReason); + test.Properties.Add(PropertyNames.SkipReason, skipReason); + } + } + + static Dictionary m_ConditionMap = new Dictionary(); + + /// + /// Adds a flag indicating whether tests with the same key should be ignored. + /// + /// The key to ignore tests for. + /// A boolean value indicating whether the tests should be ignored. + /// + /// An example in which tests are ignored in the Mac editor only. + /// + /// using UnityEditor; + /// using NUnit.Framework; + /// using UnityEngine.TestTools; + /// + /// [InitializeOnLoad] + /// public class OnLoad + /// { + /// static OnLoad() + /// { + /// var editorIsOSX = false; + /// #if UNITY_EDITOR_OSX + /// editorIsOSX = true; + /// #endif + /// + /// ConditionalIgnoreAttribute.AddConditionalIgnoreMapping("IgnoreInMacEditor", editorIsOSX); + /// } + /// } + /// + /// public class MyTestClass + /// { + /// [Test, ConditionalIgnore("IgnoreInMacEditor", "Ignored on Mac editor.")] + /// public void TestNeverRunningInMacEditor() + /// { + /// Assert.Pass(); + /// } + /// } + /// + /// + public static void AddConditionalIgnoreMapping(string key, bool value) + { + m_ConditionMap.Add(key.ToLowerInvariant(), value); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs.meta new file mode 100644 index 0000000..d737335 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/ConditionalIgnoreAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c82a8473f4a8f7b42a004c91e06d2f2b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs new file mode 100644 index 0000000..6a4ab16 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs @@ -0,0 +1,57 @@ +using System; +using System.Collections; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + internal class TestEnumerator + { + private readonly ITestExecutionContext m_Context; + private static IEnumerator m_TestEnumerator; + + public static IEnumerator Enumerator { get { return m_TestEnumerator; } } + + public static void Reset() + { + m_TestEnumerator = null; + } + + public TestEnumerator(ITestExecutionContext context, IEnumerator testEnumerator) + { + m_Context = context; + m_TestEnumerator = testEnumerator; + } + + public IEnumerator Execute() + { + m_Context.CurrentResult.SetResult(ResultState.Success); + + while (true) + { + object current = null; + try + { + if (!m_TestEnumerator.MoveNext()) + { + yield break; + } + + if (!m_Context.CurrentResult.ResultState.Equals(ResultState.Success)) + { + yield break; + } + + current = m_TestEnumerator.Current; + } + catch (Exception exception) + { + m_Context.CurrentResult.RecordException(exception); + yield break; + } + yield return current; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs.meta new file mode 100644 index 0000000..6ca4f72 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestEnumerator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 750aad009559b814dbc27001341fc1c3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs new file mode 100644 index 0000000..b2c63f5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs @@ -0,0 +1,31 @@ +using System; + +namespace UnityEngine.TestTools +{ + /// + /// The presence of this attribute will cause the test runner to require that every single log is expected. By + /// default, the runner will only automatically fail on any error logs, so this adds warnings and infos as well. + /// It is the same as calling `LogAssert.NoUnexpectedReceived()` at the bottom of every affected test. + /// + /// This attribute can be applied to test assemblies (will affect every test in the assembly), fixtures (will + /// affect every test in the fixture), or on individual test methods. It is also automatically inherited from base + /// fixtures. + /// + /// The MustExpect property (on by default) lets you selectively enable or disable the higher level value. For + /// example when migrating an assembly to this more strict checking method, you might attach + /// `[assembly:TestMustExpectAllLogs]` to the assembly itself, but then whitelist failing fixtures and test methods + /// with `[TestMustExpectAllLogs(MustExpect=false)]` until they can be migrated. This also means new tests in that + /// assembly would be required to have the more strict checking. + /// + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class TestMustExpectAllLogsAttribute : Attribute + { + /// A value indicating whether the test must expect all logs. + public TestMustExpectAllLogsAttribute(bool mustExpect = true) + => MustExpect = mustExpect; + /// + /// Returns the flag of whether the test must expect all logs. + /// + public bool MustExpect { get; } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs.meta new file mode 100644 index 0000000..82c5e47 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/TestMustExpectAllLogsAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3803f736886e77842995ddbc3531afaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs new file mode 100644 index 0000000..84f8d84 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs @@ -0,0 +1,20 @@ +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Builders; + +namespace UnityEngine.TestTools +{ + internal class UnityCombinatorialStrategy : CombinatorialStrategy, ICombiningStrategy + { + public new IEnumerable GetTestCases(IEnumerable[] sources) + { + var testCases = base.GetTestCases(sources); + foreach (var testCase in testCases) + { + testCase.GetType().GetProperty("ExpectedResult").SetValue(testCase, new object(), null); + } + return testCases; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs.meta new file mode 100644 index 0000000..84774ce --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityCombinatorialStrategy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7af6ac3e6b51b8d4aab04adc85b8de2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs new file mode 100644 index 0000000..6cc3ae2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs @@ -0,0 +1,82 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + /// + /// Use this attribute to define a specific set of platforms you want or do not want your test(s) to run on. + /// + /// You can use this attribute on the test method, test class, or test assembly level. Use the supported enumeration values to specify the platforms. You can also specify which platforms to test by passing one or more `RuntimePlatform` values along with or without the include or exclude properties as parameters to the [Platform](https://github.com/nunit/docs/wiki/Platform-Attribute) attribute constructor. + /// + /// The test(s) skips if the current target platform is: + /// - Not explicitly specified in the included platforms list + /// - In the excluded platforms list + /// + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)] + public class UnityPlatformAttribute : NUnitAttribute, IApplyToTest + { + /// + /// A subset of platforms you need to have your tests run on. + /// + public RuntimePlatform[] include { get; set; } + /// + /// List the platforms you do not want to have your tests run on. + /// + public RuntimePlatform[] exclude { get; set; } + + private string m_skippedReason; + + /// + /// Constructs a new instance of the class. + /// + public UnityPlatformAttribute() + { + include = new List().ToArray(); + exclude = new List().ToArray(); + } + + /// + /// Constructs a new instance of the class with a list of platforms to include. + /// + /// The different to run the test on. + public UnityPlatformAttribute(params RuntimePlatform[] include) + : this() + { + this.include = include; + } + + /// + /// Modifies a test as defined for the specific attribute. + /// + /// The test to modify + public void ApplyToTest(Test test) + { + if (test.RunState == RunState.NotRunnable || test.RunState == RunState.Ignored || IsPlatformSupported(Application.platform)) + { + return; + } + test.RunState = RunState.Skipped; + test.Properties.Add("_SKIPREASON", m_skippedReason); + } + + internal bool IsPlatformSupported(RuntimePlatform testTargetPlatform) + { + if (include.Any() && !include.Any(x => x == testTargetPlatform)) + { + m_skippedReason = string.Format("Only supported on {0}", string.Join(", ", include.Select(x => x.ToString()).ToArray())); + return false; + } + + if (exclude.Any(x => x == testTargetPlatform)) + { + m_skippedReason = string.Format("Not supported on {0}", string.Join(", ", include.Select(x => x.ToString()).ToArray())); + return false; + } + return true; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs.meta new file mode 100644 index 0000000..003e154 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityPlatformAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5440c1153b397e14c9c7b1d6eb83b9f9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs new file mode 100644 index 0000000..0abd4ba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs @@ -0,0 +1,37 @@ +using System; +using NUnit.Framework; + +namespace UnityEngine.TestTools +{ + /// + /// The `UnitySetUp` and attributes are identical to the standard `SetUp` and `TearDown` attributes, with the exception that they allow for . The `UnitySetUp` and `UnityTearDown` attributes expect a return type of [IEnumerator](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerator?view=netframework-4.8). + /// + /// + ///public class SetUpTearDownExample + /// { + /// [UnitySetUp] + /// public IEnumerator SetUp() + /// { + /// yield return new EnterPlayMode(); + /// } + /// + /// [Test] + /// public void MyTest() + /// { + /// Debug.Log("This runs inside playmode"); + /// } + /// + /// [UnityTearDown] + /// public IEnumerator TearDown() + /// { + /// yield return new ExitPlayMode(); + /// } + /// } + /// + /// + /// + [AttributeUsage(AttributeTargets.Method)] + public class UnitySetUpAttribute : NUnitAttribute + { + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs.meta new file mode 100644 index 0000000..ccd0d7e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnitySetUpAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc6401f13df54ba44bfd7cdc93c7d64d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs new file mode 100644 index 0000000..59be7c0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs @@ -0,0 +1,37 @@ +using System; +using NUnit.Framework; + +namespace UnityEngine.TestTools +{ + /// + /// The and `UnityTearDown` attributes are identical to the standard `SetUp` and `TearDown` attributes, with the exception that they allow for . The `UnitySetUp` and `UnityTearDown` attributes expect a return type of [IEnumerator](https://docs.microsoft.com/en-us/dotnet/api/system.collections.ienumerator?view=netframework-4.8). + /// + /// + ///public class SetUpTearDownExample + /// { + /// [UnitySetUp] + /// public IEnumerator SetUp() + /// { + /// yield return new EnterPlayMode(); + /// } + /// + /// [Test] + /// public void MyTest() + /// { + /// Debug.Log("This runs inside playmode"); + /// } + /// + /// [UnityTearDown] + /// public IEnumerator TearDown() + /// { + /// yield return new ExitPlayMode(); + /// } + /// } + /// + /// + /// + [AttributeUsage(AttributeTargets.Method)] + public class UnityTearDownAttribute : NUnitAttribute + { + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs.meta new file mode 100644 index 0000000..db19904 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTearDownAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 600f4b74746dbf944901257f81a8af6d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs new file mode 100644 index 0000000..b8e6879 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections; +using NUnit.Framework; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Builders; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + /// + /// `UnityTest` attribute is the main addition to the standard [NUnit](http://www.nunit.org/) library for the Unity Test Framework. This type of unit test allows you to skip a frame from within a test (so background tasks can finish) or give certain commands to the Unity **Editor**, such as performing a domain reload or entering **Play Mode** from an **Edit Mode** test. + /// In Play Mode, the `UnityTest` attribute runs as a [coroutine](https://docs.unity3d.com/Manual/Coroutines.html). Whereas Edit Mode tests run in the [EditorApplication.update](https://docs.unity3d.com/ScriptReference/EditorApplication-update.html) callback loop. + /// The `UnityTest` attribute is, in fact, an alternative to the `NUnit` [Test attribute](https://github.com/nunit/docs/wiki/Test-Attribute), which allows yielding instructions back to the framework. Once the instruction is complete, the test run continues. If you `yield return null`, you skip a frame. That might be necessary to ensure that some changes do happen on the next iteration of either the `EditorApplication.update` loop or the [game loop](https://docs.unity3d.com/Manual/ExecutionOrder.html). + /// + /// ## Edit Mode example + /// The most simple example of an Edit Mode test could be the one that yields `null` to skip the current frame and then continues to run: + /// + /// [UnityTest] + /// public IEnumerator EditorUtility_WhenExecuted_ReturnsSuccess() + /// { + /// var utility = RunEditorUtilityInTheBackgroud(); + /// + /// while (utility.isRunning) + /// { + /// yield return null; + /// } + /// + /// Assert.IsTrue(utility.isSuccess); + /// } + /// + /// + /// + /// ## Play Mode example + /// + /// In Play Mode, a test runs as a coroutine attached to a [MonoBehaviour](https://docs.unity3d.com/ScriptReference/MonoBehaviour.html). So all the yield instructions available in coroutines, are also available in your test. + /// + /// From a Play Mode test you can use one of Unity’s [Yield Instructions](https://docs.unity3d.com/ScriptReference/YieldInstruction.html): + /// + /// - [WaitForFixedUpdate](https://docs.unity3d.com/ScriptReference/WaitForFixedUpdate.html): to ensure changes expected within the next cycle of physics calculations. + /// - [WaitForSeconds](https://docs.unity3d.com/ScriptReference/WaitForSeconds.html): if you want to pause your test coroutine for a fixed amount of time. Be careful about creating long-running tests. + /// + /// The simplest example is to yield to `WaitForFixedUpdate`: + /// + /// [UnityTest] + /// public IEnumerator GameObject_WithRigidBody_WillBeAffectedByPhysics() + /// { + /// var go = new GameObject(); + /// go.AddComponent<Rigidbody>(); + /// var originalPosition = go.transform.position.y; + /// + /// yield return new WaitForFixedUpdate(); + /// + /// Assert.AreNotEqual(originalPosition, go.transform.position.y); + /// } + /// + /// + /// + [AttributeUsage(AttributeTargets.Method)] + public class UnityTestAttribute : CombiningStrategyAttribute, ISimpleTestBuilder, IImplyFixture + { + public UnityTestAttribute() : base(new UnityCombinatorialStrategy(), new ParameterDataSourceProvider()) {} + + private readonly NUnitTestCaseBuilder _builder = new NUnitTestCaseBuilder(); + + TestMethod ISimpleTestBuilder.BuildFrom(IMethodInfo method, Test suite) + { + TestCaseParameters parms = new TestCaseParameters + { + ExpectedResult = new object(), + HasExpectedResult = true + }; + + var t = _builder.BuildTestMethod(method, suite, parms); + + if (t.parms != null) + t.parms.HasExpectedResult = false; + + if (!method.ReturnType.IsType(typeof(IEnumerator))) + { + t.RunState = RunState.NotRunnable; + t.Properties.Set(PropertyNames.SkipReason, "Method marked with UnityTest must return IEnumerator."); + } + + return t; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs.meta new file mode 100644 index 0000000..e2fcb63 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Attributes/UnityTestAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fedb0f9e5006b1943abae52f52f08a1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs new file mode 100644 index 0000000..65bcbba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs @@ -0,0 +1,58 @@ +using System; +using System.Threading; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal abstract class BaseDelegator + { + protected ManualResetEvent m_Signal = new ManualResetEvent(false); + + protected object m_Result; + protected Exception m_Exception; + protected ITestExecutionContext m_Context; + + protected bool m_Aborted; + + protected object HandleResult() + { + SetCurrentTestContext(); + if (m_Exception != null) + { + var temp = m_Exception; + m_Exception = null; + throw temp; + } + var tempResult = m_Result; + m_Result = null; + return tempResult; + } + + protected void WaitForSignal() + { + while (!m_Signal.WaitOne(100)) + { + if (m_Aborted) + { + m_Aborted = false; + Reflect.MethodCallWrapper = null; + throw new Exception(); + } + } + } + + public void Abort() + { + m_Aborted = true; + } + + protected void SetCurrentTestContext() + { + var prop = typeof(TestExecutionContext).GetProperty("CurrentContext"); + if (prop != null) + { + prop.SetValue(null, m_Context, null); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs.meta new file mode 100644 index 0000000..613537b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/BaseDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37cea569bfefafe49a1513c4d7f0e9eb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands.meta new file mode 100644 index 0000000..75dd09d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6b72875690e0f7343911e06af3145bd5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs new file mode 100644 index 0000000..26f143b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs @@ -0,0 +1,234 @@ +using System; +using System.Collections; +using System.Diagnostics; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools +{ + internal abstract class BeforeAfterTestCommandBase : DelegatingTestCommand, IEnumerableTestMethodCommand + { + private string m_BeforeErrorPrefix; + private string m_AfterErrorPrefix; + private bool m_SkipYieldAfterActions; + protected BeforeAfterTestCommandBase(TestCommand innerCommand, string beforeErrorPrefix, string afterErrorPrefix, bool skipYieldAfterActions = false) + : base(innerCommand) + { + m_BeforeErrorPrefix = beforeErrorPrefix; + m_AfterErrorPrefix = afterErrorPrefix; + m_SkipYieldAfterActions = skipYieldAfterActions; + } + + internal Func GetUtcNow = () => new DateTimeOffset(DateTime.UtcNow).ToUnixTimeMilliseconds(); + + protected T[] BeforeActions = new T[0]; + + protected T[] AfterActions = new T[0]; + + protected abstract IEnumerator InvokeBefore(T action, Test test, UnityTestExecutionContext context); + + protected abstract IEnumerator InvokeAfter(T action, Test test, UnityTestExecutionContext context); + + protected abstract BeforeAfterTestCommandState GetState(UnityTestExecutionContext context); + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + var unityContext = (UnityTestExecutionContext)context; + var state = GetState(unityContext); + + if (state == null) + { + // We do not expect a state to exist in playmode + state = ScriptableObject.CreateInstance(); + } + + state.ApplyTestResult(context.CurrentResult); + + while (state.NextBeforeStepIndex < BeforeActions.Length) + { + state.Timestamp = GetUtcNow(); + var action = BeforeActions[state.NextBeforeStepIndex]; + IEnumerator enumerator; + try + { + enumerator = InvokeBefore(action, Test, unityContext); + } + catch (Exception ex) + { + state.TestHasRun = true; + context.CurrentResult.RecordPrefixedException(m_BeforeErrorPrefix, ex); + break; + } + ActivePcHelper.SetEnumeratorPC(enumerator, state.NextBeforeStepPc); + + using (var logScope = new LogScope()) + { + while (true) + { + try + { + if (!enumerator.MoveNext()) + { + break; + } + } + catch (Exception ex) + { + state.TestHasRun = true; + context.CurrentResult.RecordPrefixedException(m_BeforeErrorPrefix, ex); + state.StoreTestResult(context.CurrentResult); + break; + } + + state.NextBeforeStepPc = ActivePcHelper.GetEnumeratorPC(enumerator); + state.StoreTestResult(context.CurrentResult); + if (m_SkipYieldAfterActions) + { + break; + } + else + { + yield return enumerator.Current; + } + + if (GetUtcNow() - state.Timestamp > unityContext.TestCaseTimeout) + { + context.CurrentResult.RecordPrefixedError(m_BeforeErrorPrefix, new UnityTestTimeoutException(unityContext.TestCaseTimeout).Message); + state.TestHasRun = true; + break; + } + } + + if (logScope.AnyFailingLogs()) + { + state.TestHasRun = true; + context.CurrentResult.RecordPrefixedError(m_BeforeErrorPrefix, new UnhandledLogMessageException(logScope.FailingLogs.First()).Message); + state.StoreTestResult(context.CurrentResult); + } + } + + state.NextBeforeStepIndex++; + state.NextBeforeStepPc = 0; + } + + if (!state.TestHasRun) + { + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + state.StoreTestResult(context.CurrentResult); + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + state.StoreTestResult(context.CurrentResult); + } + + state.TestHasRun = true; + } + + while (state.NextAfterStepIndex < AfterActions.Length) + { + state.Timestamp = GetUtcNow(); + state.TestAfterStarted = true; + var action = AfterActions[state.NextAfterStepIndex]; + IEnumerator enumerator; + try + { + enumerator = InvokeAfter(action, Test, unityContext); + } + catch (Exception ex) + { + context.CurrentResult.RecordPrefixedException(m_AfterErrorPrefix, ex); + state.StoreTestResult(context.CurrentResult); + break; + } + ActivePcHelper.SetEnumeratorPC(enumerator, state.NextAfterStepPc); + + using (var logScope = new LogScope()) + { + while (true) + { + try + { + if (!enumerator.MoveNext()) + { + break; + } + } + catch (Exception ex) + { + context.CurrentResult.RecordPrefixedException(m_AfterErrorPrefix, ex); + state.StoreTestResult(context.CurrentResult); + break; + } + + state.NextAfterStepPc = ActivePcHelper.GetEnumeratorPC(enumerator); + state.StoreTestResult(context.CurrentResult); + + if (GetUtcNow() - state.Timestamp > unityContext.TestCaseTimeout) + { + context.CurrentResult.RecordPrefixedError(m_AfterErrorPrefix, new UnityTestTimeoutException(unityContext.TestCaseTimeout).Message); + yield break; + } + + if (m_SkipYieldAfterActions) + { + break; + } + else + { + yield return enumerator.Current; + } + } + + if (logScope.AnyFailingLogs()) + { + state.TestHasRun = true; + context.CurrentResult.RecordPrefixedError(m_AfterErrorPrefix, new UnhandledLogMessageException(logScope.FailingLogs.First()).Message); + state.StoreTestResult(context.CurrentResult); + } + } + + state.NextAfterStepIndex++; + state.NextAfterStepPc = 0; + } + + state.Reset(); + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + + private static TestCommandPcHelper pcHelper; + + internal static TestCommandPcHelper ActivePcHelper + { + get + { + if (pcHelper == null) + { + pcHelper = new TestCommandPcHelper(); + } + + return pcHelper; + } + set + { + pcHelper = value; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs.meta new file mode 100644 index 0000000..e3e4819 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandBase.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cbbca1d8a0434be4bbc7f165523763ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs new file mode 100644 index 0000000..31734ee --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs @@ -0,0 +1,52 @@ +using System; +using System.Data; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools +{ + internal class BeforeAfterTestCommandState : ScriptableObject + { + public int NextBeforeStepIndex; + public int NextBeforeStepPc; + public int NextAfterStepIndex; + public int NextAfterStepPc; + public bool TestHasRun; + public TestStatus CurrentTestResultStatus; + public string CurrentTestResultLabel; + public FailureSite CurrentTestResultSite; + public string CurrentTestMessage; + public string CurrentTestStrackTrace; + public bool TestAfterStarted; + public long Timestamp; + + public void Reset() + { + NextBeforeStepIndex = 0; + NextBeforeStepPc = 0; + NextAfterStepIndex = 0; + NextAfterStepPc = 0; + TestHasRun = false; + CurrentTestResultStatus = TestStatus.Inconclusive; + CurrentTestResultLabel = null; + CurrentTestResultSite = default(FailureSite); + CurrentTestMessage = null; + CurrentTestStrackTrace = null; + TestAfterStarted = false; + } + + public void StoreTestResult(TestResult result) + { + CurrentTestResultStatus = result.ResultState.Status; + CurrentTestResultLabel = result.ResultState.Label; + CurrentTestResultSite = result.ResultState.Site; + CurrentTestMessage = result.Message; + CurrentTestStrackTrace = result.StackTrace; + } + + public void ApplyTestResult(TestResult result) + { + result.SetResult(new ResultState(CurrentTestResultStatus, CurrentTestResultLabel, CurrentTestResultSite), CurrentTestMessage, CurrentTestStrackTrace); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs.meta new file mode 100644 index 0000000..da9bd2b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/BeforeAfterTestCommandState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f65567c9026afb4db5de3355accc636 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs new file mode 100644 index 0000000..d452f24 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs @@ -0,0 +1,34 @@ + +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableApplyChangesToContextCommand : ApplyChangesToContextCommand, IEnumerableTestMethodCommand + { + public EnumerableApplyChangesToContextCommand(TestCommand innerCommand, IEnumerable changes) + : base(innerCommand, changes) { } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + ApplyChanges(context); + + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs.meta new file mode 100644 index 0000000..6a955ca --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableApplyChangesToContextCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b4429eff9fcffb48b006e8edcc90338 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs new file mode 100644 index 0000000..4b3f5ec --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs @@ -0,0 +1,66 @@ +using System; +using System.Collections; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableRepeatedTestCommand : DelegatingTestCommand, IEnumerableTestMethodCommand + { + private int repeatCount; + + public EnumerableRepeatedTestCommand(RepeatAttribute.RepeatedTestCommand commandToReplace) : base(commandToReplace.GetInnerCommand()) + { + repeatCount = (int) typeof(RepeatAttribute.RepeatedTestCommand) + .GetField("repeatCount", BindingFlags.NonPublic | BindingFlags.Instance) + .GetValue(commandToReplace); + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + var unityContext = (UnityTestExecutionContext)context; + int count = unityContext.EnumerableTestState.Repeat; + var firstCycleAfterResume = count > 0; + + while (count < repeatCount || (firstCycleAfterResume && count <= repeatCount)) + { + if (!firstCycleAfterResume) + { + count++; + } + + firstCycleAfterResume = false; + unityContext.EnumerableTestState.Repeat = count; + + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + } + + if (context.CurrentResult.ResultState != ResultState.Success) + { + break; + } + } + + unityContext.EnumerableTestState.Repeat = 0; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs.meta new file mode 100644 index 0000000..a738fba --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRepeatedTestCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e273462feb9a65948826739f683cc9a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs new file mode 100644 index 0000000..39fbffa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs @@ -0,0 +1,67 @@ +using System; +using System.Collections; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableRetryTestCommand : DelegatingTestCommand, IEnumerableTestMethodCommand + { + private int retryCount; + + public EnumerableRetryTestCommand(RetryAttribute.RetryCommand commandToReplace) : base(commandToReplace.GetInnerCommand()) + { + retryCount = (int) typeof(RetryAttribute.RetryCommand) + .GetField("_retryCount", BindingFlags.NonPublic | BindingFlags.Instance) + .GetValue(commandToReplace); + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + var unityContext = (UnityTestExecutionContext)context; + int count = unityContext.EnumerableTestState.Retry; + var firstCycleAfterResume = count > 0; + + while (count < retryCount || (firstCycleAfterResume && count <= retryCount)) + { + if (!firstCycleAfterResume) + { + count++; + } + + firstCycleAfterResume = false; + + unityContext.EnumerableTestState.Retry = count; + + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + yield return iterator; + } + } + else + { + context.CurrentResult = innerCommand.Execute(context); + } + + if (context.CurrentResult.ResultState != ResultState.Failure) + { + break; + } + } + + unityContext.EnumerableTestState.Retry = 0; + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs.meta new file mode 100644 index 0000000..56f4e14 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableRetryTestCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6de2f178a24cd2e48a0816cacd9a0583 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs new file mode 100644 index 0000000..e5bf7b8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs @@ -0,0 +1,44 @@ +using System; +using System.Collections; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableSetUpTearDownCommand : BeforeAfterTestCommandBase + { + public EnumerableSetUpTearDownCommand(TestCommand innerCommand) + : base(innerCommand, "SetUp", "TearDown") + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(UnitySetUpAttribute)); + AfterActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(UnityTearDownAttribute)).Reverse().ToArray(); + } + } + + private static MethodInfo[] GetMethodsWithAttributeFromFixture(Type fixtureType, Type setUpType) + { + MethodInfo[] methodsWithAttribute = Reflect.GetMethodsWithAttribute(fixtureType, setUpType, true); + return methodsWithAttribute.Where(x => x.ReturnType == typeof(IEnumerator)).ToArray(); + } + + protected override IEnumerator InvokeBefore(MethodInfo action, Test test, UnityTestExecutionContext context) + { + return (IEnumerator)Reflect.InvokeMethod(action, context.TestObject); + } + + protected override IEnumerator InvokeAfter(MethodInfo action, Test test, UnityTestExecutionContext context) + { + return (IEnumerator)Reflect.InvokeMethod(action, context.TestObject); + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return context.SetUpTearDownState; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs.meta new file mode 100644 index 0000000..e61d049 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableSetUpTearDownCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd85a35169d313840a0874aea1a28629 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs new file mode 100644 index 0000000..ff3017e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools +{ + internal class EnumerableTestMethodCommand : TestCommand, IEnumerableTestMethodCommand + { + private readonly TestMethod testMethod; + + public EnumerableTestMethodCommand(TestMethod testMethod) + : base(testMethod) + { + this.testMethod = testMethod; + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + yield return null; + + IEnumerator currentExecutingTestEnumerator; + try + { + currentExecutingTestEnumerator = new TestEnumeratorWrapper(testMethod).GetEnumerator(context); + } + catch (Exception ex) + { + context.CurrentResult.RecordException(ex); + yield break; + } + + if (currentExecutingTestEnumerator != null) + { + var testEnumeraterYieldInstruction = new TestEnumerator(context, currentExecutingTestEnumerator); + + yield return testEnumeraterYieldInstruction; + + var enumerator = testEnumeraterYieldInstruction.Execute(); + + var executingEnumerator = ExecuteEnumerableAndRecordExceptions(enumerator, context); + while (executingEnumerator.MoveNext()) + { + yield return executingEnumerator.Current; + } + } + else + { + if (context.CurrentResult.ResultState != ResultState.Ignored) + { + context.CurrentResult.SetResult(ResultState.Success); + } + } + } + + private static IEnumerator ExecuteEnumerableAndRecordExceptions(IEnumerator enumerator, ITestExecutionContext context) + { + while (true) + { + try + { + if (!enumerator.MoveNext()) + { + break; + } + } + catch (Exception ex) + { + context.CurrentResult.RecordException(ex); + break; + } + + if (enumerator.Current is IEnumerator) + { + var current = (IEnumerator)enumerator.Current; + yield return ExecuteEnumerableAndRecordExceptions(current, context); + } + else + { + yield return enumerator.Current; + } + } + } + + public override TestResult Execute(ITestExecutionContext context) + { + throw new NotImplementedException("Use ExecuteEnumerable"); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs.meta new file mode 100644 index 0000000..4631e40 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestMethodCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 19a6f000f81e24c4a826c1abd43e77c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestState.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestState.cs new file mode 100644 index 0000000..9326189 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestState.cs @@ -0,0 +1,8 @@ +namespace UnityEngine.TestTools +{ + internal class EnumerableTestState : ScriptableObject + { + public int Repeat; + public int Retry; + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestState.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestState.cs.meta new file mode 100644 index 0000000..4463331 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/EnumerableTestState.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 356852e4738840b4b1ab533d3a66f0e1 +timeCreated: 1606321047 \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs new file mode 100644 index 0000000..ae1b7b7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class ImmediateEnumerableCommand : DelegatingTestCommand + { + public ImmediateEnumerableCommand(TestCommand innerCommand) + : base(innerCommand) { } + + public override TestResult Execute(ITestExecutionContext context) + { + if (innerCommand is IEnumerableTestMethodCommand) + { + var executeEnumerable = ((IEnumerableTestMethodCommand)innerCommand).ExecuteEnumerable(context); + foreach (var iterator in executeEnumerable) + { + if (iterator != null) + { + throw new Exception("Only null can be yielded at this point."); + } + } + return context.CurrentResult; + } + + return innerCommand.Execute(context); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs.meta new file mode 100644 index 0000000..e650b54 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/ImmediateEnumerableCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8349e42a2b30c7a4abd8678c203428ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs new file mode 100644 index 0000000..a0646f1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs @@ -0,0 +1,49 @@ +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class OuterUnityTestActionCommand : BeforeAfterTestCommandBase + { + public OuterUnityTestActionCommand(TestCommand innerCommand) + : base(innerCommand, "BeforeTest", "AfterTest") + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetUnityTestActionsFromMethod(Test.Method.MethodInfo); + AfterActions = BeforeActions; + } + } + + private static IOuterUnityTestAction[] GetUnityTestActionsFromMethod(MethodInfo method) + { + var attributes = method.GetCustomAttributes(false); + List actions = new List(); + foreach (var attribute in attributes) + { + if (attribute is IOuterUnityTestAction) + actions.Add(attribute as IOuterUnityTestAction); + } + return actions.ToArray(); + } + + protected override IEnumerator InvokeBefore(IOuterUnityTestAction action, Test test, UnityTestExecutionContext context) + { + return action.BeforeTest(test); + } + + protected override IEnumerator InvokeAfter(IOuterUnityTestAction action, Test test, UnityTestExecutionContext context) + { + return action.AfterTest(test); + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return context.OuterUnityTestActionState; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs.meta new file mode 100644 index 0000000..6415872 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/OuterUnityTestActionCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d4fc309a0784294c8ab658b53b12320 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs new file mode 100644 index 0000000..c6ff0d9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs @@ -0,0 +1,48 @@ +using System; +using System.Collections; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class SetUpTearDownCommand : BeforeAfterTestCommandBase + { + public SetUpTearDownCommand(TestCommand innerCommand) + : base(innerCommand, "SetUp", "TearDown", true) + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(SetUpAttribute)); + AfterActions = GetMethodsWithAttributeFromFixture(Test.TypeInfo.Type, typeof(TearDownAttribute)).Reverse().ToArray(); + } + } + + private static MethodInfo[] GetMethodsWithAttributeFromFixture(Type fixtureType, Type setUpType) + { + MethodInfo[] methodsWithAttribute = Reflect.GetMethodsWithAttribute(fixtureType, setUpType, true); + return methodsWithAttribute.Where(x => x.ReturnType == typeof(void)).ToArray(); + } + + protected override IEnumerator InvokeBefore(MethodInfo action, Test test, UnityTestExecutionContext context) + { + Reflect.InvokeMethod(action, context.TestObject); + yield return null; + } + + protected override IEnumerator InvokeAfter(MethodInfo action, Test test, UnityTestExecutionContext context) + { + Reflect.InvokeMethod(action, context.TestObject); + yield return null; + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return null; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs.meta new file mode 100644 index 0000000..28b84ac --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/SetUpTearDownCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0db3f3921670cd4ca2e925737c3fba4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs new file mode 100644 index 0000000..9b99dd0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs @@ -0,0 +1,53 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestTools +{ + internal class TestActionCommand : BeforeAfterTestCommandBase + { + public TestActionCommand(TestCommand innerCommand) + : base(innerCommand, "BeforeTest", "AfterTest", true) + { + if (Test.TypeInfo.Type != null) + { + BeforeActions = GetTestActionsFromMethod(Test.Method.MethodInfo); + AfterActions = BeforeActions; + } + } + + private static ITestAction[] GetTestActionsFromMethod(MethodInfo method) + { + var attributes = method.GetCustomAttributes(false); + List actions = new List(); + foreach (var attribute in attributes) + { + if (attribute is ITestAction) + actions.Add(attribute as ITestAction); + } + return actions.ToArray(); + } + + protected override IEnumerator InvokeBefore(ITestAction action, Test test, UnityTestExecutionContext context) + { + action.BeforeTest(test); + yield return null; + } + + protected override IEnumerator InvokeAfter(ITestAction action, Test test, UnityTestExecutionContext context) + { + action.AfterTest(test); + yield return null; + } + + protected override BeforeAfterTestCommandState GetState(UnityTestExecutionContext context) + { + return null; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs.meta new file mode 100644 index 0000000..3f44e9d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestActionCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2de8ba3b840049641897e0da7ce1d5cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs new file mode 100644 index 0000000..26eb4b0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections; + +namespace UnityEngine.TestTools +{ + internal class TestCommandPcHelper + { + public virtual void SetEnumeratorPC(IEnumerator enumerator, int pc) + { + // Noop implementation used in playmode. + } + + public virtual int GetEnumeratorPC(IEnumerator enumerator) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs.meta new file mode 100644 index 0000000..1dbd4f4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Commands/TestCommandPcHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 33e6b78c96bb0694e96383e3c56b7b54 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs new file mode 100644 index 0000000..dd7fbc2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs @@ -0,0 +1,141 @@ +using System; +using System.Linq; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + /// + /// Specialization of BaseDelegator that makes sure objects are created on the MainThread. + /// It also deals with ScriptableObjects so that tests can survive assembly reload. + /// + internal class ConstructDelegator + { + private Type m_RequestedType; + private object[] m_Arguments; + + private ScriptableObject m_CurrentRunningTest; + private readonly IStateSerializer m_StateSerializer; + + protected Exception m_Exception; + protected object m_Result; + protected ITestExecutionContext m_Context; + + public ConstructDelegator(IStateSerializer stateSerializer) + { + m_StateSerializer = stateSerializer; + } + + protected object HandleResult() + { + SetCurrentTestContext(); + if (m_Exception != null) + { + var temp = m_Exception; + m_Exception = null; + throw temp; + } + var tempResult = m_Result; + m_Result = null; + return tempResult; + } + + protected void SetCurrentTestContext() + { + var prop = typeof(UnityTestExecutionContext).GetProperty("CurrentContext"); + if (prop != null) + { + prop.SetValue(null, m_Context, null); + } + } + + public object Delegate(Type type, object[] arguments) + { + AssertState(); + m_Context = UnityTestExecutionContext.CurrentContext; + + m_RequestedType = type; + m_Arguments = arguments; + + using (var logScope = new LogScope()) + { + Execute(logScope); + } + + return HandleResult(); + } + + private void AssertState() + { + if (m_RequestedType != null) + { + throw new Exception("Constructor not executed yet"); + } + } + + public bool HasAction() + { + return m_RequestedType != null; + } + + public void Execute(LogScope logScope) + { + try + { + if (typeof(ScriptableObject).IsAssignableFrom(m_RequestedType)) + { + if (m_CurrentRunningTest != null && m_RequestedType != m_CurrentRunningTest.GetType()) + { + DestroyCurrentTestObjectIfExists(); + } + if (m_CurrentRunningTest == null) + { + if (m_StateSerializer.CanRestoreFromScriptableObject(m_RequestedType)) + { + m_CurrentRunningTest = m_StateSerializer.RestoreScriptableObjectInstance(); + } + else + { + m_CurrentRunningTest = ScriptableObject.CreateInstance(m_RequestedType); + } + } + m_Result = m_CurrentRunningTest; + } + else + { + DestroyCurrentTestObjectIfExists(); + m_Result = Activator.CreateInstance(m_RequestedType, m_Arguments); + if (m_StateSerializer.CanRestoreFromJson(m_RequestedType)) + { + m_StateSerializer.RestoreClassFromJson(ref m_Result); + } + } + if (logScope.AnyFailingLogs()) + { + var failingLog = logScope.FailingLogs.First(); + throw new UnhandledLogMessageException(failingLog); + } + if (logScope.ExpectedLogs.Any()) + throw new UnexpectedLogMessageException(LogScope.Current.ExpectedLogs.Peek()); + } + catch (Exception e) + { + m_Exception = e; + } + finally + { + m_RequestedType = null; + m_Arguments = null; + } + } + + public void DestroyCurrentTestObjectIfExists() + { + if (m_CurrentRunningTest == null) + return; + Object.DestroyImmediate(m_CurrentRunningTest); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs.meta new file mode 100644 index 0000000..cb04fc8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/ConstructDelegator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b42e1db66fe9c634798674cb9e1df2ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters.meta new file mode 100644 index 0000000..a0aa994 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c3de99f9efc582a48995bc8e8c2df418 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs new file mode 100644 index 0000000..d53a2d0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs @@ -0,0 +1,25 @@ +using System; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; + +namespace UnityEngine.TestRunner.NUnitExtensions.Filters +{ + internal class AssemblyNameFilter : ValueMatchFilter + { + public AssemblyNameFilter(string assemblyName) : base(assemblyName) {} + + public override bool Match(ITest test) + { + string assemblyName = string.Empty; + //Assembly fullname is in the format "Assembly-name, meta data ...", so extract the name by looking for the comma + if (test.TypeInfo != null && test.TypeInfo.Assembly != null && test.TypeInfo.FullName != null) + assemblyName = test.TypeInfo.Assembly.FullName.Substring(0, test.TypeInfo.Assembly.FullName.IndexOf(',')).TrimEnd(','); + return ExpectedValue.Equals(assemblyName, StringComparison.OrdinalIgnoreCase); + } + + protected override string ElementName + { + get { return "id"; } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs.meta new file mode 100644 index 0000000..2b89745 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/AssemblyNameFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91319408591cec1478efd3c62f9f418a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs new file mode 100644 index 0000000..58430e8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs @@ -0,0 +1,36 @@ +using System.Collections; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Filters; + +namespace UnityEngine.TestRunner.NUnitExtensions.Filters +{ + internal class CategoryFilterExtended : CategoryFilter + { + public static string k_DefaultCategory = "Uncategorized"; + + public CategoryFilterExtended(string name) : base(name) + { + } + + public override bool Match(ITest test) + { + IList testCategories = test.Properties[PropertyNames.Category].Cast().ToList(); + + if (test is TestMethod) + { + // Do not count tests with no attribute as Uncategorized if test fixture class has at least one attribute + // The test inherits the attribute from the test fixture + IList fixtureCategories = test.Parent.Properties[PropertyNames.Category].Cast().ToList(); + if (fixtureCategories.Count > 0) + return false; + } + + if (testCategories.Count == 0 && ExpectedValue == k_DefaultCategory && test is TestMethod) + return true; + + return base.Match(test); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs.meta new file mode 100644 index 0000000..a115cd2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Filters/CategoryFilterExtended.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebeedaa04bb53e24ba2e7fb6745e3fd3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs new file mode 100644 index 0000000..6bc1593 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs @@ -0,0 +1,12 @@ +using System.Collections.Generic; +using System.Reflection; +using NUnit.Framework.Api; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal interface IAsyncTestAssemblyBuilder : ITestAssemblyBuilder + { + IEnumerator BuildAsync(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary options); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs.meta new file mode 100644 index 0000000..64283a3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IAsyncTestAssemblyBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3aa5c3d59b94854e843f10b75b3ad63 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs new file mode 100644 index 0000000..951d079 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs @@ -0,0 +1,12 @@ +using System; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal interface IStateSerializer + { + ScriptableObject RestoreScriptableObjectInstance(); + void RestoreClassFromJson(ref object instance); + bool CanRestoreFromJson(Type requestedType); + bool CanRestoreFromScriptableObject(Type requestedType); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs.meta new file mode 100644 index 0000000..1d32715 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/IStateSerializer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f875a14565308a40a5262d2504da705 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner.meta new file mode 100644 index 0000000..1604cb5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 37888acc09d9ee848bf9559f06645c45 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs new file mode 100644 index 0000000..b266600 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs @@ -0,0 +1,359 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class CompositeWorkItem : UnityWorkItem + { + private readonly TestSuite _suite; + private readonly TestSuiteResult _suiteResult; + private readonly ITestFilter _childFilter; + private TestCommand _setupCommand; + private TestCommand _teardownCommand; + + public List Children { get; private set; } + + private int _countOrder; + + private CountdownEvent _childTestCountdown; + + public CompositeWorkItem(TestSuite suite, ITestFilter childFilter, WorkItemFactory factory) + : base(suite, factory) + { + _suite = suite; + _suiteResult = Result as TestSuiteResult; + _childFilter = childFilter; + _countOrder = 0; + } + + protected override IEnumerable PerformWork() + { + InitializeSetUpAndTearDownCommands(); + + if (UnityTestExecutionContext.CurrentContext != null && m_DontRunRestoringResult && EditModeTestCallbacks.RestoringTestContext != null) + { + EditModeTestCallbacks.RestoringTestContext(); + } + + if (!CheckForCancellation()) + if (Test.RunState == RunState.Explicit && !_childFilter.IsExplicitMatch(Test)) + SkipFixture(ResultState.Explicit, GetSkipReason(), null); + else + switch (Test.RunState) + { + default: + case RunState.Runnable: + case RunState.Explicit: + Result.SetResult(ResultState.Success); + + CreateChildWorkItems(); + + if (Children.Count > 0) + { + if (!m_DontRunRestoringResult) + { + //This is needed to give the editor a chance to go out of playmode if needed before creating objects. + //If we do not, the objects could be automatically destroyed when exiting playmode and could result in errors later on + yield return null; + PerformOneTimeSetUp(); + } + + if (!CheckForCancellation()) + { + switch (Result.ResultState.Status) + { + case TestStatus.Passed: + foreach (var child in RunChildren()) + { + if (CheckForCancellation()) + { + yield break; + } + + yield return child; + } + break; + case TestStatus.Skipped: + case TestStatus.Inconclusive: + case TestStatus.Failed: + SkipChildren(_suite, Result.ResultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + Result.Message); + break; + } + } + + if (Context.ExecutionStatus != TestExecutionStatus.AbortRequested && !m_DontRunRestoringResult) + { + PerformOneTimeTearDown(); + } + } + break; + + case RunState.Skipped: + SkipFixture(ResultState.Skipped, GetSkipReason(), null); + break; + + case RunState.Ignored: + SkipFixture(ResultState.Ignored, GetSkipReason(), null); + break; + + case RunState.NotRunnable: + SkipFixture(ResultState.NotRunnable, GetSkipReason(), GetProviderStackTrace()); + break; + } + if (!ResultedInDomainReload) + { + WorkItemComplete(); + } + } + + private bool CheckForCancellation() + { + if (Context.ExecutionStatus != TestExecutionStatus.Running) + { + Result.SetResult(ResultState.Cancelled, "Test cancelled by user"); + return true; + } + + return false; + } + + private void InitializeSetUpAndTearDownCommands() + { + List setUpTearDownItems = _suite.TypeInfo != null + ? CommandBuilder.BuildSetUpTearDownList(_suite.TypeInfo.Type, typeof(OneTimeSetUpAttribute), typeof(OneTimeTearDownAttribute)) + : new List(); + + var actionItems = new List(); + foreach (ITestAction action in Actions) + { + bool applyToSuite = (action.Targets & ActionTargets.Suite) == ActionTargets.Suite + || action.Targets == ActionTargets.Default && !(Test is ParameterizedMethodSuite); + + bool applyToTest = (action.Targets & ActionTargets.Test) == ActionTargets.Test + && !(Test is ParameterizedMethodSuite); + + if (applyToSuite) + actionItems.Add(new TestActionItem(action)); + + if (applyToTest) + Context.UpstreamActions.Add(action); + } + + _setupCommand = CommandBuilder.MakeOneTimeSetUpCommand(_suite, setUpTearDownItems, actionItems); + _teardownCommand = CommandBuilder.MakeOneTimeTearDownCommand(_suite, setUpTearDownItems, actionItems); + } + + private void PerformOneTimeSetUp() + { + var logScope = new LogScope(); + try + { + _setupCommand.Execute(Context); + } + catch (Exception ex) + { + if (ex is NUnitException || ex is TargetInvocationException) + ex = ex.InnerException; + + Result.RecordException(ex, FailureSite.SetUp); + } + + if (logScope.AnyFailingLogs()) + { + Result.RecordException(new UnhandledLogMessageException(logScope.FailingLogs.First())); + } + logScope.Dispose(); + } + + private IEnumerable RunChildren() + { + int childCount = Children.Count; + if (childCount == 0) + throw new InvalidOperationException("RunChildren called but item has no children"); + + _childTestCountdown = new CountdownEvent(childCount); + + foreach (UnityWorkItem child in Children) + { + if (CheckForCancellation()) + { + yield break; + } + + var unityTestExecutionContext = new UnityTestExecutionContext(Context); + child.InitializeContext(unityTestExecutionContext); + + var enumerable = child.Execute().GetEnumerator(); + + while (true) + { + if (!enumerable.MoveNext()) + { + break; + } + ResultedInDomainReload |= child.ResultedInDomainReload; + yield return enumerable.Current; + } + + _suiteResult.AddResult(child.Result); + childCount--; + } + + if (childCount > 0) + { + while (childCount-- > 0) + CountDownChildTest(); + } + } + + private void CreateChildWorkItems() + { + Children = new List(); + var testSuite = _suite; + + foreach (ITest test in testSuite.Tests) + { + if (_childFilter.Pass(test)) + { + var child = m_Factory.Create(test, _childFilter); + + if (test.Properties.ContainsKey(PropertyNames.Order)) + { + Children.Insert(0, child); + _countOrder++; + } + else + { + Children.Add(child); + } + } + } + + if (_countOrder != 0) SortChildren(); + } + + private class UnityWorkItemOrderComparer : IComparer + { + public int Compare(UnityWorkItem x, UnityWorkItem y) + { + var xKey = int.MaxValue; + var yKey = int.MaxValue; + + if (x.Test.Properties.ContainsKey(PropertyNames.Order)) + xKey = (int)x.Test.Properties[PropertyNames.Order][0]; + + if (y.Test.Properties.ContainsKey(PropertyNames.Order)) + yKey = (int)y.Test.Properties[PropertyNames.Order][0]; + + return xKey.CompareTo(yKey); + } + } + + private void SortChildren() + { + Children.Sort(0, _countOrder, new UnityWorkItemOrderComparer()); + } + + private void SkipFixture(ResultState resultState, string message, string stackTrace) + { + Result.SetResult(resultState.WithSite(FailureSite.SetUp), message, StackFilter.Filter(stackTrace)); + SkipChildren(_suite, resultState.WithSite(FailureSite.Parent), "OneTimeSetUp: " + message); + } + + private void SkipChildren(TestSuite suite, ResultState resultState, string message) + { + foreach (Test child in suite.Tests) + { + if (_childFilter.Pass(child)) + { + Context.Listener.TestStarted(child); + TestResult childResult = child.MakeTestResult(); + childResult.SetResult(resultState, message); + _suiteResult.AddResult(childResult); + + if (child.IsSuite) + SkipChildren((TestSuite)child, resultState, message); + + Context.Listener.TestFinished(childResult); + } + } + } + + private void PerformOneTimeTearDown() + { + var logScope = new LogScope(); + try + { + _teardownCommand.Execute(Context); + } + catch (Exception ex) + { + if (ex is NUnitException || ex is TargetInvocationException) + ex = ex.InnerException; + + Result.RecordException(ex, FailureSite.SetUp); + } + + if (logScope.AnyFailingLogs()) + { + Result.RecordException(new UnhandledLogMessageException(logScope.FailingLogs.First())); + } + logScope.Dispose(); + } + + private string GetSkipReason() + { + return (string)Test.Properties.Get(PropertyNames.SkipReason); + } + + private string GetProviderStackTrace() + { + return (string)Test.Properties.Get(PropertyNames.ProviderStackTrace); + } + + private void CountDownChildTest() + { + _childTestCountdown.Signal(); + if (_childTestCountdown.CurrentCount == 0) + { + if (Context.ExecutionStatus != TestExecutionStatus.AbortRequested) + PerformOneTimeTearDown(); + + foreach (var childResult in _suiteResult.Children) + if (childResult.ResultState == ResultState.Cancelled) + { + this.Result.SetResult(ResultState.Cancelled, "Cancelled by user"); + break; + } + + WorkItemComplete(); + } + } + + public override void Cancel(bool force) + { + if (Children == null) + return; + + foreach (var child in Children) + { + var ctx = child.Context; + if (ctx != null) + ctx.ExecutionStatus = force ? TestExecutionStatus.AbortRequested : TestExecutionStatus.StopRequested; + + if (child.State == WorkItemState.Running) + child.Cancel(force); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs.meta new file mode 100644 index 0000000..355dd71 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CompositeWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 110d5035a36a6a34580fb65bb40cd78f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs new file mode 100644 index 0000000..666a8dd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools.Utils; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class CoroutineTestWorkItem : UnityWorkItem + { + private static MonoBehaviour m_MonoBehaviourCoroutineRunner; + private TestCommand m_Command; + + public static MonoBehaviour monoBehaviourCoroutineRunner + { + get + { + if (m_MonoBehaviourCoroutineRunner == null) + { + throw new NullReferenceException("MonoBehaviour coroutine runner not set"); + } + return m_MonoBehaviourCoroutineRunner; + } + set { m_MonoBehaviourCoroutineRunner = value; } + } + + public CoroutineTestWorkItem(TestMethod test, ITestFilter filter) + : base(test, null) + { + m_Command = m_Command = TestCommandBuilder.BuildTestCommand(test, filter); + } + + protected override IEnumerable PerformWork() + { + if (m_Command is SkipCommand) + { + m_Command.Execute(Context); + Result = Context.CurrentResult; + WorkItemComplete(); + yield break; + } + + if (m_Command is ApplyChangesToContextCommand) + { + var applyChangesToContextCommand = (ApplyChangesToContextCommand)m_Command; + applyChangesToContextCommand.ApplyChanges(Context); + m_Command = applyChangesToContextCommand.GetInnerCommand(); + } + + var enumerableTestMethodCommand = (IEnumerableTestMethodCommand)m_Command; + try + { + var executeEnumerable = enumerableTestMethodCommand.ExecuteEnumerable(Context).GetEnumerator(); + + var coroutineRunner = new CoroutineRunner(monoBehaviourCoroutineRunner, Context); + yield return coroutineRunner.HandleEnumerableTest(executeEnumerable); + + if (coroutineRunner.HasFailedWithTimeout()) + { + Context.CurrentResult.SetResult(ResultState.Failure, string.Format("Test exceeded Timeout value of {0}ms", Context.TestCaseTimeout)); + } + + while (executeEnumerable.MoveNext()) {} + + Result = Context.CurrentResult; + } + finally + { + WorkItemComplete(); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs.meta new file mode 100644 index 0000000..f5eb998 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/CoroutineTestWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b557515fff172984e8c4400b43f1c631 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs new file mode 100644 index 0000000..6690ecc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs @@ -0,0 +1,98 @@ +using System; +using System.Collections; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools; +using SetUpTearDownCommand = NUnit.Framework.Internal.Commands.SetUpTearDownCommand; +using TestActionCommand = NUnit.Framework.Internal.Commands.TestActionCommand; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class EditModeTestCallbacks + { + public static Action RestoringTestContext { get; set; } + } + + internal class DefaultTestWorkItem : UnityWorkItem + { + private TestCommand _command; + public DefaultTestWorkItem(TestMethod test, ITestFilter filter) + : base(test, null) + { + _command = TestCommandBuilder.BuildTestCommand(test, filter); + } + + protected override IEnumerable PerformWork() + { + if (m_DontRunRestoringResult && EditModeTestCallbacks.RestoringTestContext != null) + { + EditModeTestCallbacks.RestoringTestContext(); + Result = Context.CurrentResult; + yield break; + } + + try + { + if (_command is SkipCommand || _command is FailCommand) + { + Result = _command.Execute(Context); + yield break; + } + + if (!(_command is IEnumerableTestMethodCommand)) + { + Debug.LogError("Cannot perform work on " + _command.GetType().Name); + yield break; + } + if (Context.TestCaseTimeout == 0) + { + Context.TestCaseTimeout = k_DefaultTimeout; + } + foreach (var workItemStep in ((IEnumerableTestMethodCommand)_command).ExecuteEnumerable(Context)) + { + ResultedInDomainReload = false; + + if (workItemStep is IEditModeTestYieldInstruction) + { + var editModeTestYieldInstruction = (IEditModeTestYieldInstruction)workItemStep; + yield return editModeTestYieldInstruction; + var enumerator = editModeTestYieldInstruction.Perform(); + while (true) + { + bool moveNext; + try + { + moveNext = enumerator.MoveNext(); + } + catch (Exception e) + { + Context.CurrentResult.RecordException(e); + break; + } + + if (!moveNext) + { + break; + } + + yield return null; + } + } + else + { + yield return workItemStep; + } + } + + Result = Context.CurrentResult; + } + finally + { + WorkItemComplete(); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs.meta new file mode 100644 index 0000000..a843b77 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/DefaultTestWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c7cfda246e604b945b12b7afedb094ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs new file mode 100644 index 0000000..a01769d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs @@ -0,0 +1,34 @@ + +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class FailCommand : TestCommand, IEnumerableTestMethodCommand + { + private ResultState m_ResultState; + private string m_Message; + + public FailCommand(Test test, ResultState resultState, string message) + : base(test) + { + m_ResultState = resultState; + m_Message = message; + } + + public override TestResult Execute(ITestExecutionContext context) + { + context.CurrentResult.SetResult(m_ResultState, m_Message); + return context.CurrentResult; + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + context.CurrentResult.SetResult(m_ResultState, m_Message); + yield return null; + } + } + +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs.meta new file mode 100644 index 0000000..921cc0a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/FailCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68e5dc8bfd5d72647a93b7f2e1da831a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs new file mode 100644 index 0000000..758e295 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs @@ -0,0 +1,10 @@ +using System.Collections; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal interface IEnumerableTestMethodCommand + { + IEnumerable ExecuteEnumerable(ITestExecutionContext context); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs.meta new file mode 100644 index 0000000..4434337 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/IEnumerableTestMethodCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbd43d8a3b8122d4e89b055f53382b11 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs new file mode 100644 index 0000000..5d32f26 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs @@ -0,0 +1,13 @@ +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class PlaymodeWorkItemFactory : WorkItemFactory + { + protected override UnityWorkItem Create(TestMethod method, ITestFilter filter, ITest loadedTest) + { + return new CoroutineTestWorkItem(method, filter); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs.meta new file mode 100644 index 0000000..9c2a8ed --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/PlaymodeWorkItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ef6801a8b664544aa9f2ab1bc1f8b60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs new file mode 100644 index 0000000..e05910a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs @@ -0,0 +1,4 @@ +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class RestoreTestContextAfterDomainReload {} +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs.meta new file mode 100644 index 0000000..640354d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/RestoreTestContextAfterDomainReload.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 26721f9940339264fb14bdbfe1290e21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs new file mode 100644 index 0000000..0a0c1c3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs @@ -0,0 +1,127 @@ +using System; +using System.Collections; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestTools; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal static class TestCommandBuilder + { + public static TestCommand BuildTestCommand(TestMethod test, ITestFilter filter) + { + if (test.RunState != RunState.Runnable && + !(test.RunState == RunState.Explicit && filter.IsExplicitMatch(test))) + { + return new SkipCommand(test); + } + + var testReturnsIEnumerator = test.Method.ReturnType.Type == typeof(IEnumerator); + + TestCommand command; + if (!testReturnsIEnumerator) + { + command = new TestMethodCommand(test); + } + else + { + command = new EnumerableTestMethodCommand(test); + } + + command = new UnityLogCheckDelegatingCommand(command); + foreach (var wrapper in test.Method.GetCustomAttributes(true)) + { + command = wrapper.Wrap(command); + if (command == null) + { + var message = String.Format("IWrapTestMethod implementation '{0}' returned null as command.", + wrapper.GetType().FullName); + return new FailCommand(test, ResultState.Failure, message); + } + + if (testReturnsIEnumerator && !(command is IEnumerableTestMethodCommand)) + { + command = TryReplaceWithEnumerableCommand(command); + if (command != null) + { + continue; + } + + var message = String.Format("'{0}' is not supported on {1} as it does not handle returning IEnumerator.", + wrapper.GetType().FullName, + GetTestBuilderName(test)); + return new FailCommand(test, ResultState.Failure, message); + } + } + + command = new UnityEngine.TestTools.TestActionCommand(command); + command = new UnityEngine.TestTools.SetUpTearDownCommand(command); + + if (!testReturnsIEnumerator) + { + command = new ImmediateEnumerableCommand(command); + } + + foreach (var wrapper in test.Method.GetCustomAttributes(true)) + { + command = wrapper.Wrap(command); + if (command == null) + { + var message = String.Format("IWrapSetUpTearDown implementation '{0}' returned null as command.", + wrapper.GetType().FullName); + return new FailCommand(test, ResultState.Failure, message); + } + + if (testReturnsIEnumerator && !(command is IEnumerableTestMethodCommand)) + { + command = TryReplaceWithEnumerableCommand(command); + if (command != null) + { + continue; + } + + var message = String.Format("'{0}' is not supported on {1} as it does not handle returning IEnumerator.", + wrapper.GetType().FullName, + GetTestBuilderName(test)); + return new FailCommand(test, ResultState.Failure, message); + } + } + + command = new EnumerableSetUpTearDownCommand(command); + command = new OuterUnityTestActionCommand(command); + + IApplyToContext[] changes = test.Method.GetCustomAttributes(true); + if (changes.Length > 0) + { + command = new EnumerableApplyChangesToContextCommand(command, changes); + } + + return command; + } + + private static string GetTestBuilderName(TestMethod testMethod) + { + return new[] + { + testMethod.Method.GetCustomAttributes(true).Select(attribute => attribute.GetType().Name), + testMethod.Method.GetCustomAttributes(true).Select(attribute => attribute.GetType().Name) + }.SelectMany(v => v).FirstOrDefault(); + } + + private static TestCommand TryReplaceWithEnumerableCommand(TestCommand command) + { + switch (command.GetType().Name) + { + case nameof(RepeatAttribute.RepeatedTestCommand): + return new EnumerableRepeatedTestCommand(command as RepeatAttribute.RepeatedTestCommand); + case nameof(RetryAttribute.RetryCommand): + return new EnumerableRetryTestCommand(command as RetryAttribute.RetryCommand); + default: + return null; + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs.meta new file mode 100644 index 0000000..769bce6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/TestCommandBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f40df9c8cf926b241b093a37028d8815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs new file mode 100644 index 0000000..05b725a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Commands; +using UnityEngine.TestTools; +using UnityEngine.TestTools.Logging; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + class UnityLogCheckDelegatingCommand : DelegatingTestCommand, IEnumerableTestMethodCommand + { + static Dictionary s_AttributeCache = new Dictionary(); + + public UnityLogCheckDelegatingCommand(TestCommand innerCommand) + : base(innerCommand) {} + + public override TestResult Execute(ITestExecutionContext context) + { + using (var logScope = new LogScope()) + { + if (ExecuteAndCheckLog(logScope, context.CurrentResult, () => innerCommand.Execute(context))) + PostTestValidation(logScope, innerCommand, context.CurrentResult); + } + + return context.CurrentResult; + } + + public IEnumerable ExecuteEnumerable(ITestExecutionContext context) + { + if (!(innerCommand is IEnumerableTestMethodCommand enumerableTestMethodCommand)) + { + Execute(context); + yield break; + } + + using (var logScope = new LogScope()) + { + IEnumerable executeEnumerable = null; + + if (!ExecuteAndCheckLog(logScope, context.CurrentResult, + () => executeEnumerable = enumerableTestMethodCommand.ExecuteEnumerable(context))) + yield break; + + foreach (var step in executeEnumerable) + { + // do not check expected logs here - we want to permit expecting and receiving messages to run + // across frames. (but we do always want to catch a fail immediately.) + if (!CheckFailingLogs(logScope, context.CurrentResult)) + yield break; + + yield return step; + } + + if (!CheckLogs(context.CurrentResult, logScope)) + yield break; + + PostTestValidation(logScope, innerCommand, context.CurrentResult); + } + } + + static bool CaptureException(TestResult result, Action action) + { + try + { + action(); + return true; + } + catch (Exception e) + { + result.RecordException(e); + return false; + } + } + + static bool ExecuteAndCheckLog(LogScope logScope, TestResult result, Action action) + => CaptureException(result, action) && CheckLogs(result, logScope); + + static void PostTestValidation(LogScope logScope, TestCommand command, TestResult result) + { + if (MustExpect(command.Test.Method.MethodInfo)) + CaptureException(result, logScope.NoUnexpectedReceived); + } + + static bool CheckLogs(TestResult result, LogScope logScope) + => CheckFailingLogs(logScope, result) && CheckExpectedLogs(logScope, result); + + static bool CheckFailingLogs(LogScope logScope, TestResult result) + { + if (!logScope.AnyFailingLogs()) + return true; + + var failingLog = logScope.FailingLogs.First(); + result.RecordException(new UnhandledLogMessageException(failingLog)); + return false; + } + + static bool CheckExpectedLogs(LogScope logScope, TestResult result) + { + if (!logScope.ExpectedLogs.Any()) + return true; + + var expectedLog = logScope.ExpectedLogs.Peek(); + result.RecordException(new UnexpectedLogMessageException(expectedLog)); + return false; + } + + static bool MustExpect(MemberInfo method) + { + // method + + var methodAttr = method.GetCustomAttributes(true).FirstOrDefault(); + if (methodAttr != null) + return methodAttr.MustExpect; + + // fixture + + var fixture = method.DeclaringType; + if (!s_AttributeCache.TryGetValue(fixture, out var mustExpect)) + { + var fixtureAttr = fixture.GetCustomAttributes(true).FirstOrDefault(); + mustExpect = s_AttributeCache[fixture] = fixtureAttr?.MustExpect; + } + + if (mustExpect != null) + return mustExpect.Value; + + // assembly + + var assembly = fixture.Assembly; + if (!s_AttributeCache.TryGetValue(assembly, out mustExpect)) + { + var assemblyAttr = assembly.GetCustomAttributes().FirstOrDefault(); + mustExpect = s_AttributeCache[assembly] = assemblyAttr?.MustExpect; + } + + return mustExpect == true; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs.meta new file mode 100644 index 0000000..86d9d9e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityLogCheckDelegatingCommand.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48230e4e90fb4d14a9d56bddea898413 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs new file mode 100644 index 0000000..96ed23a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs @@ -0,0 +1,98 @@ +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestTools; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal interface IUnityTestAssemblyRunner + { + ITest LoadedTest { get; } + ITestResult Result { get; } + bool IsTestLoaded { get; } + bool IsTestRunning { get; } + bool IsTestComplete { get; } + UnityWorkItem TopLevelWorkItem { get; set; } + UnityTestExecutionContext GetCurrentContext(); + ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary settings); + IEnumerable Run(ITestListener listener, ITestFilter filter); + void StopRun(); + } + + internal class UnityTestAssemblyRunner : IUnityTestAssemblyRunner + { + private readonly UnityTestAssemblyBuilder unityBuilder; + private readonly WorkItemFactory m_Factory; + + protected UnityTestExecutionContext Context { get; set; } + + public UnityTestExecutionContext GetCurrentContext() + { + return UnityTestExecutionContext.CurrentContext; + } + + protected IDictionary Settings { get; set; } + public ITest LoadedTest { get; protected set; } + + public ITestResult Result + { + get { return TopLevelWorkItem == null ? null : TopLevelWorkItem.Result; } + } + + public bool IsTestLoaded + { + get { return LoadedTest != null; } + } + + public bool IsTestRunning + { + get { return TopLevelWorkItem != null && TopLevelWorkItem.State == NUnit.Framework.Internal.Execution.WorkItemState.Running; } + } + public bool IsTestComplete + { + get { return TopLevelWorkItem != null && TopLevelWorkItem.State == NUnit.Framework.Internal.Execution.WorkItemState.Complete; } + } + + public UnityTestAssemblyRunner(UnityTestAssemblyBuilder builder, WorkItemFactory factory) + { + unityBuilder = builder; + m_Factory = factory; + Context = new UnityTestExecutionContext(); + } + + public ITest Load(Assembly[] assemblies, TestPlatform testPlatform, IDictionary settings) + { + Settings = settings; + + if (settings.ContainsKey(FrameworkPackageSettings.RandomSeed)) + Randomizer.InitialSeed = (int)settings[FrameworkPackageSettings.RandomSeed]; + + return LoadedTest = unityBuilder.Build(assemblies, Enumerable.Repeat(testPlatform, assemblies.Length).ToArray(), settings); + } + + public IEnumerable Run(ITestListener listener, ITestFilter filter) + { + TopLevelWorkItem = m_Factory.Create(LoadedTest, filter); + TopLevelWorkItem.InitializeContext(Context); + UnityTestExecutionContext.CurrentContext = Context; + Context.Listener = listener; + + return TopLevelWorkItem.Execute(); + } + + public UnityWorkItem TopLevelWorkItem { get; set; } + + public void StopRun() + { + if (IsTestRunning) + { + TopLevelWorkItem.Cancel(false); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs.meta new file mode 100644 index 0000000..96179c5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestAssemblyRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 874e40a588dbb1e48bc128d686337d4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs new file mode 100644 index 0000000..a7072ed --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.Globalization; +using System.IO; +using NUnit.Framework; +using NUnit.Framework.Constraints; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Execution; +using UnityEngine.TestTools; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class UnityTestExecutionContext : ITestExecutionContext + { + private readonly UnityTestExecutionContext _priorContext; + private TestResult _currentResult; + private int _assertCount; + + public static UnityTestExecutionContext CurrentContext { get; set; } + + public UnityTestExecutionContext Context { get; private set; } + + public Test CurrentTest { get; set; } + public DateTime StartTime { get; set; } + public long StartTicks { get; set; } + public TestResult CurrentResult + { + get { return _currentResult; } + set + { + _currentResult = value; + if (value != null) + OutWriter = value.OutWriter; + } + } + + public object TestObject { get; set; } + public string WorkDirectory { get; set; } + + + private TestExecutionStatus _executionStatus; + public TestExecutionStatus ExecutionStatus + { + get + { + // ExecutionStatus may have been set to StopRequested or AbortRequested + // in a prior context. If so, reflect the same setting in this context. + if (_executionStatus == TestExecutionStatus.Running && _priorContext != null) + _executionStatus = _priorContext.ExecutionStatus; + + return _executionStatus; + } + set + { + _executionStatus = value; + + // Push the same setting up to all prior contexts + if (_priorContext != null) + _priorContext.ExecutionStatus = value; + } + } + + public List UpstreamActions { get; private set; } + public int TestCaseTimeout { get; set; } + public CultureInfo CurrentCulture { get; set; } + public CultureInfo CurrentUICulture { get; set; } + public ITestListener Listener { get; set; } + + public UnityTestExecutionContext() + { + UpstreamActions = new List(); + CurrentContext = this; + } + + public UnityTestExecutionContext(UnityTestExecutionContext other) + { + _priorContext = other; + + CurrentTest = other.CurrentTest; + CurrentResult = other.CurrentResult; + TestObject = other.TestObject; + WorkDirectory = other.WorkDirectory; + Listener = other.Listener; + TestCaseTimeout = other.TestCaseTimeout; + UpstreamActions = new List(other.UpstreamActions); + SetUpTearDownState = other.SetUpTearDownState; + OuterUnityTestActionState = other.OuterUnityTestActionState; + EnumerableTestState = other.EnumerableTestState; + + TestContext.CurrentTestExecutionContext = this; + + CurrentCulture = other.CurrentCulture; + CurrentUICulture = other.CurrentUICulture; + CurrentContext = this; + } + + public TextWriter OutWriter { get; private set; } + public bool StopOnError { get; set; } + + public IWorkItemDispatcher Dispatcher { get; set; } + + public ParallelScope ParallelScope { get; set; } + public string WorkerId { get; private set; } + public Randomizer RandomGenerator { get; private set; } + public ValueFormatter CurrentValueFormatter { get; private set; } + public bool IsSingleThreaded { get; set; } + public BeforeAfterTestCommandState SetUpTearDownState { get; set; } + public BeforeAfterTestCommandState OuterUnityTestActionState { get; set; } + public EnumerableTestState EnumerableTestState { get; set; } + + internal int AssertCount + { + get + { + return _assertCount; + } + } + + public void IncrementAssertCount() + { + _assertCount += 1; + } + + public void AddFormatter(ValueFormatterFactory formatterFactory) + { + throw new NotImplementedException(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs.meta new file mode 100644 index 0000000..33d323b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityTestExecutionContext.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 59ff995fabb3bac45afa0f96f333e5dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs new file mode 100644 index 0000000..9a3a46b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs @@ -0,0 +1,117 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Execution; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal abstract class UnityWorkItem + { + protected readonly WorkItemFactory m_Factory; + protected bool m_ExecuteTestStartEvent; + protected bool m_DontRunRestoringResult; + protected const int k_DefaultTimeout = 1000 * 180; + public event EventHandler Completed; + + public bool ResultedInDomainReload { get; internal set; } + + public UnityTestExecutionContext Context { get; private set; } + + public Test Test { get; private set; } + + public TestResult Result { get; protected set; } + + public WorkItemState State { get; private set; } + + public List Actions { get; private set; } + + protected UnityWorkItem(Test test, WorkItemFactory factory) + { + m_Factory = factory; + Test = test; + Actions = new List(); + Result = test.MakeTestResult(); + State = WorkItemState.Ready; + m_ExecuteTestStartEvent = ShouldExecuteStartEvent(); + m_DontRunRestoringResult = ShouldRestore(test); + } + + protected static bool ShouldRestore(ITest loadedTest) + { + return UnityWorkItemDataHolder.alreadyExecutedTests != null && + UnityWorkItemDataHolder.alreadyExecutedTests.Contains(loadedTest.GetUniqueName()); + } + + protected bool ShouldExecuteStartEvent() + { + return UnityWorkItemDataHolder.alreadyStartedTests != null && + UnityWorkItemDataHolder.alreadyStartedTests.All(x => x != Test.GetUniqueName()) && + !ShouldRestore(Test); + } + + protected abstract IEnumerable PerformWork(); + + public void InitializeContext(UnityTestExecutionContext context) + { + Context = context; + + if (Test is TestAssembly) + Actions.AddRange(ActionsHelper.GetActionsFromTestAssembly((TestAssembly)Test)); + else if (Test is ParameterizedMethodSuite) + Actions.AddRange(ActionsHelper.GetActionsFromTestMethodInfo(Test.Method)); + else if (Test.TypeInfo != null) + Actions.AddRange(ActionsHelper.GetActionsFromTypesAttributes(Test.TypeInfo.Type)); + } + + public virtual IEnumerable Execute() + { + Context.CurrentTest = this.Test; + Context.CurrentResult = this.Result; + + if (m_ExecuteTestStartEvent) + { + Context.Listener.TestStarted(Test); + } + + Context.StartTime = DateTime.UtcNow; + Context.StartTicks = Stopwatch.GetTimestamp(); + + State = WorkItemState.Running; + + return PerformWork(); + } + + protected void WorkItemComplete() + { + State = WorkItemState.Complete; + + Result.StartTime = Context.StartTime; + Result.EndTime = DateTime.UtcNow; + + long tickCount = Stopwatch.GetTimestamp() - Context.StartTicks; + double seconds = (double)tickCount / Stopwatch.Frequency; + Result.Duration = seconds; + + //Result.AssertCount += Context.AssertCount; + + Context.Listener.TestFinished(Result); + + if (Completed != null) + Completed(this, EventArgs.Empty); + + Context.TestObject = null; + Test.Fixture = null; + } + + public virtual void Cancel(bool force) + { + Result.SetResult(ResultState.Cancelled, "Cancelled by user"); + Context.Listener.TestFinished(Result); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs.meta new file mode 100644 index 0000000..48b9f92 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79ced2556f0af814a840b86232613ff1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs new file mode 100644 index 0000000..d9fb700 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal class UnityWorkItemDataHolder + { + public static List alreadyStartedTests = new List(); + public static List alreadyExecutedTests; + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs.meta new file mode 100644 index 0000000..6d90872 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/UnityWorkItemDataHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b3e90046c38f1d4dad2e0d5a79e871c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs new file mode 100644 index 0000000..94d9c0f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs @@ -0,0 +1,28 @@ +using System.Collections; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions.Runner +{ + internal abstract class WorkItemFactory + { + public UnityWorkItem Create(ITest loadedTest, ITestFilter filter) + { + TestSuite suite = loadedTest as TestSuite; + if (suite != null) + { + return new CompositeWorkItem(suite, filter, this); + } + + var testMethod = (TestMethod)loadedTest; + if (testMethod.Method.ReturnType.Type != typeof(IEnumerator)) + { + return new DefaultTestWorkItem(testMethod, filter); + } + + return Create(testMethod, filter, loadedTest); + } + + protected abstract UnityWorkItem Create(TestMethod method, ITestFilter filter, ITest loadedTest); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs.meta new file mode 100644 index 0000000..e5f0377 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/Runner/WorkItemFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c15bf0966eb95847a4260d830a30d30 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs new file mode 100644 index 0000000..7e74030 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs @@ -0,0 +1,153 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Filters; + +namespace UnityEngine.TestRunner.NUnitExtensions +{ + internal static class TestExtensions + { + private static IEnumerable GetTestCategories(this ITest test) + { + var categories = test.Properties[PropertyNames.Category].Cast().ToList(); + if (categories.Count == 0 && test is TestMethod) + { + // only mark tests as Uncategorized if the test fixture doesn't have a category, + // otherwise the test inherits the Fixture category + var fixtureCategories = test.Parent.Properties[PropertyNames.Category].Cast().ToList(); + if (fixtureCategories.Count == 0) + categories.Add(CategoryFilterExtended.k_DefaultCategory); + } + return categories; + } + + public static bool HasCategory(this ITest test, string[] categoryFilter) + { + var categories = test.GetAllCategoriesFromTest().Distinct(); + return categoryFilter.Any(c => categories.Any(r => r == c)); + } + + public static List GetAllCategoriesFromTest(this ITest test) + { + if (test.Parent == null) + return test.GetTestCategories().ToList(); + + var categories = GetAllCategoriesFromTest(test.Parent); + categories.AddRange(test.GetTestCategories()); + return categories; + } + + public static void ParseForNameDuplicates(this ITest test) + { + var duplicates = new Dictionary(); + for (var i = 0; i < test.Tests.Count; i++) + { + var child = test.Tests[i]; + int count; + if (duplicates.TryGetValue(child.FullName, out count)) + { + count++; + child.Properties.Add("childIndex", count); + duplicates[child.FullName] = count; + } + else + { + duplicates.Add(child.FullName, 1); + } + ParseForNameDuplicates(child); + } + } + + public static int GetChildIndex(this ITest test) + { + var index = test.Properties["childIndex"]; + return (int)index[0]; + } + + public static bool HasChildIndex(this ITest test) + { + var index = test.Properties["childIndex"]; + return index.Count > 0; + } + + static string GetAncestorPath(ITest test) + { + var path = ""; + var testParent = test.Parent; + + while (testParent != null && testParent.Parent != null && !string.IsNullOrEmpty(testParent.Name)) + { + path = testParent.Name + "/" + path; + testParent = testParent.Parent; + } + + return path; + } + + public static string GetUniqueName(this ITest test) + { + var id = GetAncestorPath(test) + GetFullName(test); + if (test.HasChildIndex()) + { + var index = test.GetChildIndex(); + if (index >= 0) + id += index; + } + if (test.IsSuite) + { + id += "[suite]"; + } + return id; + } + + public static string GetFullName(ITest test) + { + var typeInfo = test.TypeInfo ?? test.Parent?.TypeInfo ?? test.Tests.FirstOrDefault()?.TypeInfo; + if (typeInfo == null) + { + return "[" + test.Name + "]"; + } + + var assemblyId = typeInfo.Assembly.GetName().Name; + if (assemblyId == test.Name) + { + return $"[{test.Name}]"; + } + + return string.Format("[{0}][{1}]", assemblyId, test.FullName); + } + + public static string GetSkipReason(this ITest test) + { + if (test.Properties.ContainsKey(PropertyNames.SkipReason)) + return (string)test.Properties.Get(PropertyNames.SkipReason); + + return null; + } + + public static string GetParentId(this ITest test) + { + if (test.Parent != null) + return test.Parent.Id; + + return null; + } + + public static string GetParentFullName(this ITest test) + { + if (test.Parent != null) + return test.Parent.FullName; + + return null; + } + + public static string GetParentUniqueName(this ITest test) + { + if (test.Parent != null) + return GetUniqueName(test.Parent); + + return null; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs.meta new file mode 100644 index 0000000..3230eb4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bc74398aa3944646ade4ee78cd57484 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs new file mode 100644 index 0000000..d79072b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs @@ -0,0 +1,77 @@ +using System; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestRunner.NUnitExtensions +{ + internal static class TestResultExtensions + { + public static void RecordPrefixedException(this TestResult testResult, string prefix, Exception ex, ResultState resultState = null) + + { + if (ex is NUnitException) + { + ex = ex.InnerException; + } + + if (resultState == null) + { + resultState = testResult.ResultState == ResultState.Cancelled + ? ResultState.Cancelled + : ResultState.Error; + } + + var exceptionMessage = ExceptionHelper.BuildMessage(ex); + string stackTrace = "--" + prefix + NUnit.Env.NewLine + ExceptionHelper.BuildStackTrace(ex); + if (testResult.StackTrace != null) + { + stackTrace = testResult.StackTrace + NUnit.Env.NewLine + stackTrace; + } + + if (testResult.Test.IsSuite) + { + resultState = resultState.WithSite(FailureSite.TearDown); + } + + if (ex is ResultStateException) + { + exceptionMessage = ex.Message; + resultState = ((ResultStateException)ex).ResultState; + stackTrace = StackFilter.Filter(ex.StackTrace); + } + + string message = (string.IsNullOrEmpty(prefix) ? "" : (prefix + " : ")) + exceptionMessage; + if (testResult.Message != null) + { + message = testResult.Message + NUnit.Env.NewLine + message; + } + + testResult.SetResult(resultState, message, stackTrace); + } + + public static void RecordPrefixedError(this TestResult testResult, string prefix, string error, ResultState resultState = null) + + { + if (resultState == null) + { + resultState = testResult.ResultState == ResultState.Cancelled + ? ResultState.Cancelled + : ResultState.Error; + } + + if (testResult.Test.IsSuite) + { + resultState = resultState.WithSite(FailureSite.TearDown); + } + + string message = (string.IsNullOrEmpty(prefix) ? "" : (prefix + " : ")) + error; + if (testResult.Message != null) + { + message = testResult.Message + NUnit.Env.NewLine + message; + } + + testResult.SetResult(resultState, message); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs.meta new file mode 100644 index 0000000..ff97b17 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/TestResultExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65fb6da362a78334ab360a125cfafdaf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs new file mode 100644 index 0000000..79f4aa5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs @@ -0,0 +1,58 @@ +using System.Collections.Generic; +using System.IO; +using System.Reflection; +using NUnit; +using NUnit.Framework.Api; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.NUnitExtensions +{ + internal class UnityTestAssemblyBuilder : DefaultTestAssemblyBuilder, IAsyncTestAssemblyBuilder + { + private readonly string m_ProductName; + public UnityTestAssemblyBuilder() + { + m_ProductName = Application.productName; + } + + public ITest Build(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary options) + { + var test = BuildAsync(assemblies, testPlatforms, options); + while (test.MoveNext()) + { + } + + return test.Current; + } + + public IEnumerator BuildAsync(Assembly[] assemblies, TestPlatform[] testPlatforms, IDictionary options) + { + var productName = string.Join("_", m_ProductName.Split(Path.GetInvalidFileNameChars())); + var suite = new TestSuite(productName); + for (var index = 0; index < assemblies.Length; index++) + { + var assembly = assemblies[index]; + var platform = testPlatforms[index]; + + var assemblySuite = Build(assembly, options) as TestSuite; + if (assemblySuite != null && assemblySuite.HasChildren) + { + assemblySuite.Properties.Set("platform", platform); + suite.Add(assemblySuite); + } + + yield return null; + } + + yield return suite; + } + + public static Dictionary GetNUnitTestBuilderSettings(TestPlatform testPlatform) + { + var emptySettings = new Dictionary(); + emptySettings.Add(FrameworkPackageSettings.TestParameters, "platform=" + testPlatform); + return emptySettings; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs.meta new file mode 100644 index 0000000..f0fdf17 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/NUnitExtensions/UnityTestAssemblyBuilder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 98ba0396e4b4ee8498a8f097affcfddf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner.meta new file mode 100644 index 0000000..e44f879 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1ddb9e1c877ea80479d1eab4ddaa5d0d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks.meta new file mode 100644 index 0000000..899ce79 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 61e236e8570a95e4eb754fb291e102e0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs new file mode 100644 index 0000000..d792687 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs @@ -0,0 +1,47 @@ +using NUnit.Framework; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + [AddComponentMenu("")] + internal class PlayModeRunnerCallback : MonoBehaviour, ITestRunnerListener + { + private TestResultRenderer m_ResultRenderer; + + public void RunFinished(ITestResult testResults) + { + Application.logMessageReceivedThreaded -= LogRecieved; + if (Camera.main == null) + { + gameObject.AddComponent(); + } + m_ResultRenderer = new TestResultRenderer(testResults); + m_ResultRenderer.ShowResults(); + } + + public void TestFinished(ITestResult result) + { + } + + public void OnGUI() + { + if (m_ResultRenderer != null) + m_ResultRenderer.Draw(); + } + + public void RunStarted(ITest testsToRun) + { + Application.logMessageReceivedThreaded += LogRecieved; + } + + public void TestStarted(ITest test) + { + } + + private void LogRecieved(string message, string stacktrace, LogType type) + { + if (TestContext.Out != null) + TestContext.Out.WriteLine(message); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs.meta new file mode 100644 index 0000000..15706d5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayModeRunnerCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3cf5cb9e1ef590c48b1f919f2a7bd895 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayerQuitHandler.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayerQuitHandler.cs new file mode 100644 index 0000000..267048c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayerQuitHandler.cs @@ -0,0 +1,43 @@ +using NUnit.Framework.Interfaces; +using UnityEngine.Networking.PlayerConnection; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + internal class PlayerQuitHandler : MonoBehaviour, ITestRunnerListener + { + public void Start() + { + PlayerConnection.instance.Register(PlayerConnectionMessageIds.quitPlayerMessageId, ProcessPlayerQuiteMessage); + } + + private void ProcessPlayerQuiteMessage(MessageEventArgs arg0) + { + //Some platforms don't quit, so we need to disconnect to make sure they will not connect to another editor instance automatically. + PlayerConnection.instance.DisconnectAll(); + + //XBOX has an error when quitting + if (Application.platform == RuntimePlatform.XboxOne) + { + return; + } + Application.Quit(); + } + + public void RunStarted(ITest testsToRun) + { + } + + public void RunFinished(ITestResult testResults) + { + } + + public void TestStarted(ITest test) + { + } + + public void TestFinished(ITestResult result) + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayerQuitHandler.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayerQuitHandler.cs.meta new file mode 100644 index 0000000..9d84990 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/PlayerQuitHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f8ed0b11850145c4995dd76170bb2500 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs new file mode 100644 index 0000000..755ac83 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs @@ -0,0 +1,132 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework.Interfaces; +using UnityEngine.Networking.PlayerConnection; +using UnityEngine.TestRunner.TestLaunchers; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + [AddComponentMenu("")] + internal class RemoteTestResultSender : MonoBehaviour, ITestRunnerListener + { + private class QueueData + { + public Guid id { get; set; } + public byte[] data { get; set; } + } + + private const int k_aliveMessageFrequency = 120; + private float m_NextliveMessage = k_aliveMessageFrequency; + private readonly Queue m_SendQueue = new Queue(); + private readonly object m_LockQueue = new object(); + private readonly IRemoteTestResultDataFactory m_TestResultDataFactory = new RemoteTestResultDataFactory(); + + public void Start() + { + StartCoroutine(SendDataRoutine()); + } + + private byte[] SerializeObject(object objectToSerialize) + { + return Encoding.UTF8.GetBytes(JsonUtility.ToJson(objectToSerialize)); + } + + public void RunStarted(ITest testsToRun) + { + var data = SerializeObject(m_TestResultDataFactory.CreateFromTest(testsToRun)); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData + { + id = PlayerConnectionMessageIds.runStartedMessageId, + data = data + }); + } + } + + public void RunFinished(ITestResult testResults) + { + var data = SerializeObject(m_TestResultDataFactory.CreateFromTestResult(testResults)); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData { id = PlayerConnectionMessageIds.runFinishedMessageId, data = data, }); + } + } + + public void TestStarted(ITest test) + { + var data = SerializeObject(m_TestResultDataFactory.CreateFromTest(test)); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData + { + id = PlayerConnectionMessageIds.testStartedMessageId, + data = data + }); + } + } + + public void TestFinished(ITestResult result) + { + var testRunnerResultForApi = m_TestResultDataFactory.CreateFromTestResult(result); + var resultData = SerializeObject(testRunnerResultForApi); + lock (m_LockQueue) + { + m_SendQueue.Enqueue(new QueueData + { + id = PlayerConnectionMessageIds.testFinishedMessageId, + data = resultData, + }); + } + } + + public IEnumerator SendDataRoutine() + { + while (!PlayerConnection.instance.isConnected) + { + yield return new WaitForSeconds(1); + } + + while (true) + { + lock (m_LockQueue) + { + if (PlayerConnection.instance.isConnected && m_SendQueue.Count > 0) + { + ResetNextPlayerAliveMessageTime(); + var queueData = m_SendQueue.Dequeue(); + PlayerConnection.instance.Send(queueData.id, queueData.data); + yield return null; + } + + //This is needed so we dont stall the player totally + if (!m_SendQueue.Any()) + { + SendAliveMessageIfNeeded(); + yield return new WaitForSeconds(0.02f); + } + } + } + } + + private void SendAliveMessageIfNeeded() + { + if (Time.timeSinceLevelLoad < m_NextliveMessage) + { + return; + } + + Debug.Log("Sending player alive message back to editor."); + ResetNextPlayerAliveMessageTime(); + PlayerConnection.instance.Send(PlayerConnectionMessageIds.playerAliveHeartbeat, new byte[0]); + } + + private void ResetNextPlayerAliveMessageTime() + { + m_NextliveMessage = Time.timeSinceLevelLoad + k_aliveMessageFrequency; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs.meta new file mode 100644 index 0000000..cbb4d40 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/RemoteTestResultSender.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20793418366caf14293b29c55df5e9ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs new file mode 100644 index 0000000..3d59430 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs @@ -0,0 +1,97 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + internal class TestResultRenderer + { + private static class Styles + { + public static readonly GUIStyle SucceedLabelStyle; + public static readonly GUIStyle FailedLabelStyle; + public static readonly GUIStyle FailedMessagesStyle; + + static Styles() + { + SucceedLabelStyle = new GUIStyle("label"); + SucceedLabelStyle.normal.textColor = Color.green; + SucceedLabelStyle.fontSize = 48; + + FailedLabelStyle = new GUIStyle("label"); + FailedLabelStyle.normal.textColor = Color.red; + FailedLabelStyle.fontSize = 32; + + FailedMessagesStyle = new GUIStyle("label"); + FailedMessagesStyle.wordWrap = false; + FailedMessagesStyle.richText = true; + } + } + + private readonly List m_FailedTestCollection; + + private bool m_ShowResults; + private Vector2 m_ScrollPosition; + + public TestResultRenderer(ITestResult testResults) + { + m_FailedTestCollection = new List(); + GetFailedTests(testResults); + } + + private void GetFailedTests(ITestResult testResults) + { + if (testResults is TestCaseResult) + { + if (testResults.ResultState.Status == TestStatus.Failed) + m_FailedTestCollection.Add(testResults); + } + else if (testResults.HasChildren) + { + foreach (var testResultsChild in testResults.Children) + { + GetFailedTests(testResultsChild); + } + } + } + + private const int k_MaxStringLength = 15000; + + public void ShowResults() + { + m_ShowResults = true; + Cursor.visible = true; + } + + public void Draw() + { + if (!m_ShowResults) return; + if (m_FailedTestCollection.Count == 0) + { + GUILayout.Label("All test(s) succeeded", Styles.SucceedLabelStyle, GUILayout.Width(600)); + } + else + { + int count = m_FailedTestCollection.Count; + GUILayout.Label(count + " tests failed!", Styles.FailedLabelStyle); + + m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition, GUILayout.ExpandWidth(true)); + var text = ""; + + text += "Code-based tests\n"; + text += string.Join("\n", m_FailedTestCollection + .Select(result => result.Name + " " + result.ResultState + "\n" + result.Message) + .ToArray()); + + if (text.Length > k_MaxStringLength) + text = text.Substring(0, k_MaxStringLength); + + GUILayout.TextArea(text, Styles.FailedMessagesStyle); + GUILayout.EndScrollView(); + } + if (GUILayout.Button("Close")) + Application.Quit(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs.meta new file mode 100644 index 0000000..02cca20 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRenderer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ebb87899ca30b743bb4274bc00c02b4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs new file mode 100644 index 0000000..b5d23f7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs @@ -0,0 +1,36 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner.Callbacks +{ + internal class TestResultRendererCallback : MonoBehaviour, ITestRunnerListener + { + private TestResultRenderer m_ResultRenderer; + public void RunStarted(ITest testsToRun) + { + } + + public void RunFinished(ITestResult testResults) + { + if (Camera.main == null) + { + gameObject.AddComponent(); + } + m_ResultRenderer = new TestResultRenderer(testResults); + m_ResultRenderer.ShowResults(); + } + + public void OnGUI() + { + if (m_ResultRenderer != null) + m_ResultRenderer.Draw(); + } + + public void TestStarted(ITest test) + { + } + + public void TestFinished(ITestResult result) + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs.meta new file mode 100644 index 0000000..deaa0ae --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Callbacks/TestResultRendererCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dfc336f10b83bd74eaded16a658275c7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs new file mode 100644 index 0000000..6a2fa5b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs @@ -0,0 +1,26 @@ +using System; +using NUnit.Framework.Interfaces; +using UnityEngine.Events; + +namespace UnityEngine.TestTools.TestRunner +{ + internal interface ITestRunnerListener + { + void RunStarted(ITest testsToRun); + void RunFinished(ITestResult testResults); + void TestStarted(ITest test); + void TestFinished(ITestResult result); + } + + [Serializable] + internal class TestFinishedEvent : UnityEvent {} + + [Serializable] + internal class TestStartedEvent : UnityEvent {} + + [Serializable] + internal class RunFinishedEvent : UnityEvent {} + + [Serializable] + internal class RunStartedEvent : UnityEvent {} +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs.meta new file mode 100644 index 0000000..848ab3d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/ITestRunnerListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1b534518943030499685344fd1d476d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages.meta new file mode 100644 index 0000000..5ab167c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 256a0ca37fa972840bce7fca446e75e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs new file mode 100644 index 0000000..32389ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs @@ -0,0 +1,23 @@ +using System.Collections; + +namespace UnityEngine.TestTools +{ + /// + /// In an Edit Mode test, you can use `IEditModeTestYieldInstruction` interface to implement your own instruction. There are also a couple of commonly used implementations available: + /// - [EnterPlayMore](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/api/UnityEngine.TestTools.EnterPlayMode.html) + /// - + /// - + /// - + /// + public interface IEditModeTestYieldInstruction + { + /// Returns true if the instruction expects a domain reload to occur + bool ExpectDomainReload { get; } + /// + /// Returns true if the instruction expects the Unity Editor to be in **Play Mode**. + /// + bool ExpectedPlaymodeState { get; } + /// Used to define multi-frame operations performed when instantiating a yield instruction. + IEnumerator Perform(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs.meta new file mode 100644 index 0000000..f61c35a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/Messages/IEditModeTestYieldInstruction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 898bc38486fc899428fbe5bd6adfe473 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs new file mode 100644 index 0000000..87091ca --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using UnityEngine.SceneManagement; +using UnityEngine.TestRunner.NUnitExtensions; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.NUnitExtensions; +using UnityEngine.TestTools.Utils; + +namespace UnityEngine.TestTools.TestRunner +{ + [Serializable] + [AddComponentMenu("")] + internal class PlaymodeTestsController : MonoBehaviour + { + private IEnumerator m_TestSteps; + + [SerializeField] + private List m_AssembliesWithTests; + public List AssembliesWithTests + { + get + { + return m_AssembliesWithTests; + } + set + { + m_AssembliesWithTests = value; + } + } + + [SerializeField] + internal TestStartedEvent testStartedEvent = new TestStartedEvent(); + [SerializeField] + internal TestFinishedEvent testFinishedEvent = new TestFinishedEvent(); + [SerializeField] + internal RunStartedEvent runStartedEvent = new RunStartedEvent(); + [SerializeField] + internal RunFinishedEvent runFinishedEvent = new RunFinishedEvent(); + + internal const string kPlaymodeTestControllerName = "Code-based tests runner"; + + [SerializeField] + public PlaymodeTestsControllerSettings settings = new PlaymodeTestsControllerSettings(); + + internal UnityTestAssemblyRunner m_Runner; + + public IEnumerator Start() + { + //Skip 2 frame because Unity. + yield return null; + yield return null; + StartCoroutine(Run()); + } + + internal static bool IsControllerOnScene() + { + return GameObject.Find(kPlaymodeTestControllerName) != null; + } + + internal static PlaymodeTestsController GetController() + { + return GameObject.Find(kPlaymodeTestControllerName).GetComponent(); + } + + public IEnumerator TestRunnerCoroutine() + { + while (m_TestSteps.MoveNext()) + { + yield return m_TestSteps.Current; + } + + if (m_Runner.IsTestComplete) + { + runFinishedEvent.Invoke(m_Runner.Result); + Cleanup(); + + yield return null; + } + } + + public IEnumerator Run() + { + CoroutineTestWorkItem.monoBehaviourCoroutineRunner = this; + gameObject.hideFlags |= HideFlags.DontSave; + + if (settings.sceneBased) + { + SceneManager.LoadScene(1, LoadSceneMode.Additive); + yield return null; + } + + var testListUtil = new PlayerTestAssemblyProvider(new AssemblyLoadProxy(), m_AssembliesWithTests); + m_Runner = new UnityTestAssemblyRunner(new UnityTestAssemblyBuilder(), new PlaymodeWorkItemFactory()); + + var loadedTests = m_Runner.Load(testListUtil.GetUserAssemblies().Select(a => a.Assembly).ToArray(), TestPlatform.PlayMode, UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(TestPlatform.PlayMode)); + loadedTests.ParseForNameDuplicates(); + runStartedEvent.Invoke(m_Runner.LoadedTest); + + var testListenerWrapper = new TestListenerWrapper(testStartedEvent, testFinishedEvent); + m_TestSteps = m_Runner.Run(testListenerWrapper, settings.BuildNUnitFilter()).GetEnumerator(); + + yield return TestRunnerCoroutine(); + } + + public void Cleanup() + { + if (m_Runner != null) + { + m_Runner.StopRun(); + m_Runner = null; + } + if (Application.isEditor) + { + Destroy(gameObject); + } + } + + public static void TryCleanup() + { + var controller = GetController(); + if (controller != null) + { + controller.Cleanup(); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs.meta new file mode 100644 index 0000000..9693778 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 102e512f651ee834f951a2516c1ea3b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs new file mode 100644 index 0000000..cb6bb54 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs @@ -0,0 +1,36 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal.Filters; +using UnityEngine.SceneManagement; +using UnityEngine.TestTools.TestRunner.GUI; + +namespace UnityEngine.TestTools.TestRunner +{ + [Serializable] + internal class PlaymodeTestsControllerSettings + { + [SerializeField] + public RuntimeTestRunnerFilter[] filters; + public bool sceneBased; + public string originalScene; + public string bootstrapScene; + + public static PlaymodeTestsControllerSettings CreateRunnerSettings(RuntimeTestRunnerFilter[] filters) + { + var settings = new PlaymodeTestsControllerSettings + { + filters = filters, + sceneBased = false, + originalScene = SceneManager.GetActiveScene().path, + bootstrapScene = null + }; + return settings; + } + + internal ITestFilter BuildNUnitFilter() + { + return new OrFilter(filters.Select(f => f.BuildNUnitFilter()).ToArray()); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs.meta new file mode 100644 index 0000000..06448a7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/PlaymodeTestsControllerSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2799eb4c84e72e54092a292cf626936b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers.meta new file mode 100644 index 0000000..d23c0a7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 91c20d2c22b8b3a4cb6c816bd225591a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs new file mode 100644 index 0000000..fffba29 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs @@ -0,0 +1,11 @@ +using System; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + internal interface IRemoteTestResultDataFactory + { + RemoteTestResultDataWithTestData CreateFromTestResult(ITestResult result); + RemoteTestResultDataWithTestData CreateFromTest(ITest test); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs.meta new file mode 100644 index 0000000..3bc8e30 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/IRemoteTestResultDataFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 874c0713cdc44f549b0161750b48d2c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs new file mode 100644 index 0000000..162ad0b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs @@ -0,0 +1,14 @@ +using System; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + internal static class PlayerConnectionMessageIds + { + public static Guid runStartedMessageId { get { return new Guid("6a7f53dd-4672-461d-a7b5-9467e9393fd3"); } } + public static Guid runFinishedMessageId { get { return new Guid("ffb622fc-34ad-4901-8d7b-47fb04b0bdd4"); } } + public static Guid testStartedMessageId { get { return new Guid("b54d241e-d88d-4dba-8c8f-ee415d11c030"); } } + public static Guid testFinishedMessageId { get { return new Guid("72f7b7f4-6829-4cd1-afde-78872b9d5adc"); } } + public static Guid quitPlayerMessageId { get { return new Guid("ab44bfe0-bb50-4ee6-9977-69d2ea6bb3a0"); } } + public static Guid playerAliveHeartbeat { get { return new Guid("8c0c307b-f7fd-4216-8623-35b4b3f55fb6"); } } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs.meta new file mode 100644 index 0000000..bf86f7e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/PlayerConnectionMessageIds.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 41d60936b62cc6d4ca7fe628b22b0e40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs new file mode 100644 index 0000000..6559b45 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs @@ -0,0 +1,56 @@ +using System; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestData + { + public string id; + public string name; + public string fullName; + public int testCaseCount; + public int ChildIndex; + public bool hasChildren; + public bool isSuite; + public string[] childrenIds; + public int testCaseTimeout; + public string[] Categories; + public bool IsTestAssembly; + public RunState RunState; + public string Description; + public string SkipReason; + public string ParentId; + public string UniqueName; + public string ParentUniqueName; + public string ParentFullName; + + internal RemoteTestData(ITest test) + { + id = test.Id; + name = test.Name; + fullName = test.FullName; + testCaseCount = test.TestCaseCount; + ChildIndex = -1; + if (test.Properties["childIndex"].Count > 0) + { + ChildIndex = (int)test.Properties["childIndex"][0]; + } + hasChildren = test.HasChildren; + isSuite = test.IsSuite; + childrenIds = test.Tests.Select(t => t.Id).ToArray(); + Categories = test.GetAllCategoriesFromTest().ToArray(); + IsTestAssembly = test is TestAssembly; + RunState = (RunState)Enum.Parse(typeof(RunState), test.RunState.ToString()); + Description = (string)test.Properties.Get(PropertyNames.Description); + SkipReason = test.GetSkipReason(); + ParentId = test.GetParentId(); + UniqueName = test.GetUniqueName(); + ParentUniqueName = test.GetParentUniqueName(); + ParentFullName = test.GetParentFullName(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs.meta new file mode 100644 index 0000000..0c286dc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b135ec222fdcd11468014c90d11d6821 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs new file mode 100644 index 0000000..90f82a4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs @@ -0,0 +1,54 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestResultData + { + public string testId; + public string name; + public string fullName; + public string resultState; + public TestStatus testStatus; + public double duration; + public DateTime startTime; + public DateTime endTime; + public string message; + public string stackTrace; + public int assertCount; + public int failCount; + public int passCount; + public int skipCount; + public int inconclusiveCount; + public bool hasChildren; + public string output; + public string xml; + public string[] childrenIds; + + internal RemoteTestResultData(ITestResult result) + { + testId = result.Test.Id; + name = result.Name; + fullName = result.FullName; + resultState = result.ResultState.ToString(); + testStatus = result.ResultState.Status; + duration = result.Duration; + startTime = result.StartTime; + endTime = result.EndTime; + message = result.Message; + stackTrace = result.StackTrace; + assertCount = result.AssertCount; + failCount = result.FailCount; + passCount = result.PassCount; + skipCount = result.SkipCount; + inconclusiveCount = result.InconclusiveCount; + hasChildren = result.HasChildren; + output = result.Output; + xml = result.ToXml(true).OuterXml; + childrenIds = result.Children.Select(child => child.Test.Id).ToArray(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs.meta new file mode 100644 index 0000000..a213e6b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 03e4d63665d06f04c8a6cf68133c1592 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs new file mode 100644 index 0000000..0b3cd03 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs @@ -0,0 +1,51 @@ +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + internal class RemoteTestResultDataFactory : IRemoteTestResultDataFactory + { + public RemoteTestResultDataWithTestData CreateFromTestResult(ITestResult result) + { + var tests = CreateTestDataList(result.Test); + tests.First().testCaseTimeout = UnityTestExecutionContext.CurrentContext.TestCaseTimeout; + return new RemoteTestResultDataWithTestData() + { + results = CreateTestResultDataList(result), + tests = tests + }; + } + + public RemoteTestResultDataWithTestData CreateFromTest(ITest test) + { + var tests = CreateTestDataList(test); + if (UnityTestExecutionContext.CurrentContext != null) + { + tests.First().testCaseTimeout = UnityTestExecutionContext.CurrentContext.TestCaseTimeout; + } + + return new RemoteTestResultDataWithTestData() + { + tests = tests + }; + } + + private RemoteTestData[] CreateTestDataList(ITest test) + { + var list = new List(); + list.Add(new RemoteTestData(test)); + list.AddRange(test.Tests.SelectMany(CreateTestDataList)); + return list.ToArray(); + } + + private static RemoteTestResultData[] CreateTestResultDataList(ITestResult result) + { + var list = new List(); + list.Add(new RemoteTestResultData(result)); + list.AddRange(result.Children.SelectMany(CreateTestResultDataList)); + return list.ToArray(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs.meta new file mode 100644 index 0000000..bc0dd7c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 826b6becaef90fb458eedebe4c2f3664 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs new file mode 100644 index 0000000..36124cc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestRunner.NUnitExtensions.Runner; + +namespace UnityEngine.TestRunner.TestLaunchers +{ + [Serializable] + internal class RemoteTestResultDataWithTestData + { + public RemoteTestResultData[] results; + public RemoteTestData[] tests; + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs.meta new file mode 100644 index 0000000..ffab8f6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RemoteHelpers/RemoteTestResultDataWithTestData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 475e3699f219c854f8581a9838135002 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RuntimeTestRunnerFilter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RuntimeTestRunnerFilter.cs new file mode 100644 index 0000000..0adca0a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RuntimeTestRunnerFilter.cs @@ -0,0 +1,62 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using NUnit.Framework.Internal.Filters; +using UnityEngine.TestRunner.NUnitExtensions.Filters; + +namespace UnityEngine.TestTools.TestRunner.GUI +{ + [Serializable] + internal class RuntimeTestRunnerFilter + { + public string[] assemblyNames; + public string[] groupNames; + public string[] categoryNames; + public string[] testNames; + public bool synchronousOnly = false; + + public ITestFilter BuildNUnitFilter() + { + var filters = new List(); + + AddFilters(filters, testNames, (s) => new FullNameFilter(s)); + AddFilters(filters, groupNames, (s) => new FullNameFilter(s) {IsRegex = true}); + AddFilters(filters, assemblyNames, (s) => new AssemblyNameFilter(s)); + AddFilters(filters, categoryNames, (s) => new CategoryFilterExtended(s) {IsRegex = true}); + + if (synchronousOnly) + { + filters.Add(new SynchronousFilter()); + } + + return filters.Count == 0 ? TestFilter.Empty : new AndFilter(filters.ToArray()); + } + + private static void AddFilters(List filters, string[] values, Func builder) + { + if (values == null || values.Length == 0) + { + return; + } + + var inclusionFilters = values.Where(v => !v.StartsWith("!")).Select(v => builder(v) as ITestFilter).ToArray(); + var exclusionFilters = values.Where(v => v.StartsWith("!")) + .Select(v => new NotFilter(builder(v.Substring(1))) as ITestFilter) + .ToArray(); + if (inclusionFilters.Length > 0 && exclusionFilters.Length > 0) + { + filters.Add(new AndFilter(new OrFilter(inclusionFilters), new AndFilter(exclusionFilters))); + } + else if (inclusionFilters.Length > 0) + { + filters.Add(new OrFilter(inclusionFilters)); + } + else // Only exclusionFilters + { + filters.Add(new AndFilter(exclusionFilters)); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RuntimeTestRunnerFilter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RuntimeTestRunnerFilter.cs.meta new file mode 100644 index 0000000..5f9aa3b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/RuntimeTestRunnerFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a025ba7ee40d0104db8d08b1d9eabb0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs new file mode 100644 index 0000000..525da47 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs @@ -0,0 +1,51 @@ +using System.Collections; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.TestRunner.GUI +{ + class SynchronousFilter : ITestFilter + { + public TNode ToXml(bool recursive) + { + return new TNode("synchronousOnly"); + } + + public TNode AddToXml(TNode parentNode, bool recursive) + { + return parentNode.AddElement("synchronousOnly"); + } + + public bool Pass(ITest test) + { + if (test.Method == null) + return true; + + if (test.Method.ReturnType.Type == typeof(IEnumerator)) + return false; + + if (test.Method.GetCustomAttributes(true).Any()) + return false; + + if (test.TypeInfo?.Type != null) + { + if (Reflect.GetMethodsWithAttribute(test.TypeInfo.Type, typeof(UnitySetUpAttribute), true) + .Any(mi => mi.ReturnType == typeof(System.Collections.IEnumerator))) + return false; + + if (Reflect.GetMethodsWithAttribute(test.TypeInfo.Type, typeof(UnityTearDownAttribute), true) + .Any(mi => mi.ReturnType == typeof(System.Collections.IEnumerator))) + return false; + } + + return true; + } + + public bool IsExplicitMatch(ITest test) + { + return Pass(test); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs.meta new file mode 100644 index 0000000..08c6010 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/SynchronousFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9aec9d3b0a86466ab4647d01e8fc87d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs new file mode 100644 index 0000000..5ed2ec8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs @@ -0,0 +1,51 @@ +using System; +using System.Collections; +using System.Reflection; +using NUnit.Framework; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class TestEnumeratorWrapper + { + private readonly TestMethod m_TestMethod; + + public TestEnumeratorWrapper(TestMethod testMethod) + { + m_TestMethod = testMethod; + } + + public IEnumerator GetEnumerator(ITestExecutionContext context) + { + if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerator)) + { + return HandleEnumerableTest(context); + } + var message = string.Format("Return type {0} of {1} in {2} is not supported.", + m_TestMethod.Method.ReturnType, m_TestMethod.Method.Name, m_TestMethod.Method.TypeInfo.FullName); + if (m_TestMethod.Method.ReturnType.Type == typeof(IEnumerable)) + { + message += "\nDid you mean IEnumerator?"; + } + throw new InvalidSignatureException(message); + } + + private IEnumerator HandleEnumerableTest(ITestExecutionContext context) + { + try + { + return m_TestMethod.Method.MethodInfo.Invoke(context.TestObject, m_TestMethod.parms != null ? m_TestMethod.parms.OriginalArguments : null) as IEnumerator; + } + catch (TargetInvocationException e) + { + if (e.InnerException is IgnoreException) + { + context.CurrentResult.SetResult(ResultState.Ignored, e.InnerException.Message); + return null; + } + throw; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs.meta new file mode 100644 index 0000000..f19ee3e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestEnumeratorWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ad0b0c865b01af4ca1b414689e71259 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs new file mode 100644 index 0000000..ffa23de --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs @@ -0,0 +1,30 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.TestRunner +{ + internal class TestListenerWrapper : ITestListener + { + private readonly TestFinishedEvent m_TestFinishedEvent; + private readonly TestStartedEvent m_TestStartedEvent; + + public TestListenerWrapper(TestStartedEvent testStartedEvent, TestFinishedEvent testFinishedEvent) + { + m_TestStartedEvent = testStartedEvent; + m_TestFinishedEvent = testFinishedEvent; + } + + public void TestStarted(ITest test) + { + m_TestStartedEvent.Invoke(test); + } + + public void TestFinished(ITestResult result) + { + m_TestFinishedEvent.Invoke(result); + } + + public void TestOutput(TestOutput output) + { + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs.meta new file mode 100644 index 0000000..aefe039 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestListenerWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 73deb9b8722aa284eab27c4dc90956c6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestPlatform.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestPlatform.cs new file mode 100644 index 0000000..ebd7d96 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestPlatform.cs @@ -0,0 +1,33 @@ +using System; + +namespace UnityEngine.TestTools +{ + /// + /// A flag indicating the targeted test platforms. + /// + [Flags] + [Serializable] + public enum TestPlatform : byte + { + /// + /// Both platforms. + /// + All = 0xFF, + /// + /// The EditMode test platform. + /// + EditMode = 1 << 1, + /// + /// The PlayMode test platform. + /// + PlayMode = 1 << 2 + } + + internal static class TestPlatformEnumExtensions + { + public static bool IsFlagIncluded(this TestPlatform flags, TestPlatform flag) + { + return (flags & flag) == flag; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestPlatform.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestPlatform.cs.meta new file mode 100644 index 0000000..6eb087a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/TestRunner/TestPlatform.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 743879b4db4bc1a4b829aae4386f4acf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef new file mode 100644 index 0000000..6dc17da --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef @@ -0,0 +1,13 @@ +{ + "name": "UnityEngine.TestRunner", + "references": [], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": true, + "precompiledReferences": [ + "nunit.framework.dll" + ], + "autoReferenced": false, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef.meta new file mode 100644 index 0000000..a2002fd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/UnityEngine.TestRunner.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 27619889b8ba8c24980f49ee34dbb44a +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils.meta new file mode 100644 index 0000000..d9503ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: bb32bccaf32a6db448d1c0cc99c78688 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider.meta new file mode 100644 index 0000000..a8326f0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51557afa652635743b264a309f0a5c60 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs new file mode 100644 index 0000000..9edc517 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs @@ -0,0 +1,12 @@ +using System.Reflection; + +namespace UnityEngine.TestTools.Utils +{ + internal class AssemblyLoadProxy : IAssemblyLoadProxy + { + public IAssemblyWrapper Load(string assemblyString) + { + return new AssemblyWrapper(Assembly.Load(assemblyString)); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs.meta new file mode 100644 index 0000000..8bb527d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyLoadProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fb593906b7b6d824087dcaebf6c082e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs new file mode 100644 index 0000000..cb46f1b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs @@ -0,0 +1,30 @@ +using System; +using System.Reflection; + +namespace UnityEngine.TestTools.Utils +{ + internal class AssemblyWrapper : IAssemblyWrapper + { + public AssemblyWrapper(Assembly assembly) + { + Assembly = assembly; + } + + public Assembly Assembly { get; } + + public virtual string Location + { + get + { + //Some platforms dont support this + throw new NotImplementedException(); + } + } + + public virtual AssemblyName[] GetReferencedAssemblies() + { + //Some platforms dont support this + throw new NotImplementedException(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs.meta new file mode 100644 index 0000000..1e4a718 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/AssemblyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e3b9bbf2c1a3cd4f88883ca32882ec6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs new file mode 100644 index 0000000..feffa62 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs @@ -0,0 +1,7 @@ +namespace UnityEngine.TestTools.Utils +{ + internal interface IAssemblyLoadProxy + { + IAssemblyWrapper Load(string assemblyString); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs.meta new file mode 100644 index 0000000..284d33b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyLoadProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 12dfd4bdbb5c8e6419432fbc54ef25d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs new file mode 100644 index 0000000..145c682 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs @@ -0,0 +1,11 @@ +using System.Reflection; + +namespace UnityEngine.TestTools.Utils +{ + internal interface IAssemblyWrapper + { + Assembly Assembly { get; } + string Location { get; } + AssemblyName[] GetReferencedAssemblies(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs.meta new file mode 100644 index 0000000..486888d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IAssemblyWrapper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c5afe945b715e149a70113a4be7b32a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs new file mode 100644 index 0000000..0dc2b7f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs @@ -0,0 +1,7 @@ +namespace UnityEngine.TestTools.Utils +{ + internal interface IScriptingRuntimeProxy + { + string[] GetAllUserAssemblies(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs.meta new file mode 100644 index 0000000..85ae985 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/IScriptingRuntimeProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fe4aef60e4ace544c8430da8ef8acba2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs new file mode 100644 index 0000000..74f2769 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs @@ -0,0 +1,10 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools.Utils +{ + internal interface ITestAssemblyProvider + { + ITest GetTestsWithNUnit(); + IAssemblyWrapper[] GetUserAssemblies(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs.meta new file mode 100644 index 0000000..d7e856b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ITestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c5acba6181d845c4e92146009bd4480f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs new file mode 100644 index 0000000..bb0aa94 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs @@ -0,0 +1,66 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; +using NUnit.Framework.Interfaces; +using UnityEngine.TestTools.NUnitExtensions; + +namespace UnityEngine.TestTools.Utils +{ + internal class PlayerTestAssemblyProvider + { + private IAssemblyLoadProxy m_AssemblyLoadProxy; + private readonly List m_AssembliesToLoad; + + //Cached until domain reload + private static List m_LoadedAssemblies; + + internal PlayerTestAssemblyProvider(IAssemblyLoadProxy assemblyLoadProxy, List assembliesToLoad) + { + m_AssemblyLoadProxy = assemblyLoadProxy; + m_AssembliesToLoad = assembliesToLoad; + LoadAssemblies(); + } + + public ITest GetTestsWithNUnit() + { + return BuildTests(TestPlatform.PlayMode, m_LoadedAssemblies.ToArray()); + } + + public List GetUserAssemblies() + { + return m_LoadedAssemblies; + } + + protected static ITest BuildTests(TestPlatform testPlatform, IAssemblyWrapper[] assemblies) + { + var settings = UnityTestAssemblyBuilder.GetNUnitTestBuilderSettings(testPlatform); + var builder = new UnityTestAssemblyBuilder(); + return builder.Build(assemblies.Select(a => a.Assembly).ToArray(), Enumerable.Repeat(testPlatform, assemblies.Length).ToArray(), settings); + } + + private void LoadAssemblies() + { + if (m_LoadedAssemblies != null) + { + return; + } + + m_LoadedAssemblies = new List(); + + foreach (var userAssembly in m_AssembliesToLoad) + { + IAssemblyWrapper a; + try + { + a = m_AssemblyLoadProxy.Load(userAssembly); + } + catch (FileNotFoundException) + { + continue; + } + if (a != null) + m_LoadedAssemblies.Add(a); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs.meta new file mode 100644 index 0000000..ffee12c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/PlayerTestAssemblyProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43a3aec217baa9644a7cf34b5f93fed9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs new file mode 100644 index 0000000..0f1eb2b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs @@ -0,0 +1,10 @@ +namespace UnityEngine.TestTools.Utils +{ + internal class ScriptingRuntimeProxy : IScriptingRuntimeProxy + { + public string[] GetAllUserAssemblies() + { + return ScriptingRuntime.GetAllUserAssemblies(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs.meta new file mode 100644 index 0000000..7b16cb9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AssemblyProvider/ScriptingRuntimeProxy.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3a361a6ad1aff14ba8f48976e94ad76 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AttributeHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AttributeHelper.cs new file mode 100644 index 0000000..7d710cb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AttributeHelper.cs @@ -0,0 +1,45 @@ +using System; +using System.IO; +using System.Linq; + +namespace UnityEngine.TestTools +{ + internal static class AttributeHelper + { + internal static Type GetTargetClassFromName(string targetClassName, Type attributeInterface) + { + Type targetClass = null; + foreach (var assemblyName in ScriptingRuntime.GetAllUserAssemblies()) + { + // we need to pass the assembly name without the .dll extension, so removing that first + var name = Path.GetFileNameWithoutExtension(assemblyName); + targetClass = Type.GetType(targetClassName + "," + name); + if (targetClass != null) + break; + } + + if (targetClass == null) + { + Debug.LogWarningFormat("Class type not found: " + targetClassName); + return null; + } + + ValidateTargetClass(targetClass, attributeInterface); + return targetClass; + } + + private static void ValidateTargetClass(Type targetClass, Type attributeInterface) + { + var constructorInfos = targetClass.GetConstructors(); + if (constructorInfos.All(constructor => constructor.GetParameters().Length != 0)) + { + Debug.LogWarningFormat("{0} does not implement default constructor", targetClass.Name); + } + + if (!attributeInterface.IsAssignableFrom(targetClass)) + { + Debug.LogWarningFormat("{0} does not implement {1}", targetClass.Name, attributeInterface.Name); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AttributeHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AttributeHelper.cs.meta new file mode 100644 index 0000000..cc47e6f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/AttributeHelper.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ae8ce3ffe04ac2c42945fd27e0291fc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs new file mode 100644 index 0000000..ea5fb41 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs @@ -0,0 +1,80 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use this class to compare two Color objects. ColorEqualityComparer.Instance has default calculation error value set to 0.01f. To set a test specific error value instantiate a comparer instance using the one argument constructor. + /// + public class ColorEqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.01f; + private readonly float AllowedError; + + + private static readonly ColorEqualityComparer m_Instance = new ColorEqualityComparer(); + /// + ///A singleton instance of the comparer with a default error value set to 0.01f. + /// > + public static ColorEqualityComparer Instance { get { return m_Instance; } } + + private ColorEqualityComparer() : this(k_DefaultError) + { + } + /// + /// Creates an instance of the comparer with a custom error value. + /// + /// The custom error value. + public ColorEqualityComparer(float error) + { + this.AllowedError = error; + } + + /// + /// Compares the actual and expected Color objects for equality using to compare the RGB and Alpha attributes of Color. Returns true if expected and actual objects are equal otherwise, it returns false. + /// + /// The expected Color value used to compare. + /// The actual Color value to test. + /// True if actual and expected are equal, false otherwise + /// + /// + /// [TestFixture] + /// public class ColorEqualityTest + /// { + /// [Test] + /// public void GivenColorsAreEqual_WithAllowedCalculationError() + /// { + /// // Using default error + /// var firstColor = new Color(0f, 0f, 0f, 0f); + /// var secondColor = new Color(0f, 0f, 0f, 0f); + /// + /// Assert.That(firstColor, Is.EqualTo(secondColor).Using(ColorEqualityComparer.Instance)); + /// + /// // Allowed error 10e-5f + /// var comparer = new ColorEqualityComparer(10e-5f); + /// firstColor = new Color(0f, 0f, 0f, 1f); + /// secondColor = new Color(10e-6f, 0f, 0f, 1f); + /// + /// Assert.That(firstColor, Is.EqualTo(secondColor).Using(comparer)); + /// } + /// } + /// + /// + public bool Equals(Color expected, Color actual) + { + return Utils.AreFloatsEqualAbsoluteError(expected.r, actual.r, AllowedError) && + Utils.AreFloatsEqualAbsoluteError(expected.g, actual.g, AllowedError) && + Utils.AreFloatsEqualAbsoluteError(expected.b, actual.b, AllowedError) && + Utils.AreFloatsEqualAbsoluteError(expected.a, actual.a, AllowedError); + } + + /// + /// Serves as the default hash function. + /// + /// A not null Color object. + /// Returns 0. + public int GetHashCode(Color color) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs.meta new file mode 100644 index 0000000..42da075 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ColorEqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d6105bc8cf5ce544487daca4cbc62583 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/CoroutineRunner.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/CoroutineRunner.cs new file mode 100644 index 0000000..8e7170f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/CoroutineRunner.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections; +using NUnit.Framework.Internal; +using UnityEngine.TestRunner.NUnitExtensions.Runner; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestTools.Utils +{ + internal class CoroutineRunner + { + private bool m_Running; + private bool m_TestFailed; + private bool m_Timeout; + private readonly MonoBehaviour m_Controller; + private readonly UnityTestExecutionContext m_Context; + private Coroutine m_TimeOutCoroutine; + private IEnumerator m_TestCoroutine; + + internal const int k_DefaultTimeout = 1000 * 180; + + public CoroutineRunner(MonoBehaviour playmodeTestsController, UnityTestExecutionContext context) + { + m_Controller = playmodeTestsController; + m_Context = context; + } + + public IEnumerator HandleEnumerableTest(IEnumerator testEnumerator) + { + if (m_Context.TestCaseTimeout == 0) + { + m_Context.TestCaseTimeout = k_DefaultTimeout; + } + do + { + if (!m_Running) + { + m_Running = true; + m_TestCoroutine = ExMethod(testEnumerator, m_Context.TestCaseTimeout); + m_Controller.StartCoroutine(m_TestCoroutine); + } + if (m_TestFailed) + { + StopAllRunningCoroutines(); + m_Context.CurrentResult.RecordException(new UnityTestTimeoutException(m_Context.TestCaseTimeout)); + yield break; + } + + if (m_Context.ExecutionStatus == TestExecutionStatus.StopRequested || m_Context.ExecutionStatus == TestExecutionStatus.AbortRequested) + { + StopAllRunningCoroutines(); + yield break; + } + yield return null; + } + while (m_Running); + } + + private void StopAllRunningCoroutines() + { + if (m_TimeOutCoroutine != null) + { + m_Controller.StopCoroutine(m_TimeOutCoroutine); + } + + if (m_TestCoroutine != null) + { + m_Controller.StopCoroutine(m_TestCoroutine); + } + } + + private IEnumerator ExMethod(IEnumerator e, int timeout) + { + m_TimeOutCoroutine = m_Controller.StartCoroutine(StartTimer(e, timeout, + () => + { + m_TestFailed = true; + m_Timeout = true; + m_Running = false; + })); + + yield return m_Controller.StartCoroutine(e); + m_Controller.StopCoroutine(m_TimeOutCoroutine); + m_Running = false; + } + + private IEnumerator StartTimer(IEnumerator coroutineToBeKilled, int timeout, Action onTimeout) + { + yield return new WaitForSecondsRealtime(timeout / 1000f); + if (coroutineToBeKilled != null) + m_Controller.StopCoroutine(coroutineToBeKilled); + if (onTimeout != null) + onTimeout(); + } + + public bool HasFailedWithTimeout() + { + return m_Timeout; + } + + public int GetDefaultTimeout() + { + return k_DefaultTimeout; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/CoroutineRunner.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/CoroutineRunner.cs.meta new file mode 100644 index 0000000..756d54e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/CoroutineRunner.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 24a158219395ebf44a60547b97784ddc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs new file mode 100644 index 0000000..1602009 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use this class to compare two float values for equality with NUnit constraints. Use FloatEqualityComparer.Instance comparer to have the default error value set to 0.0001f. For any other error, use the one argument constructor to create a comparer. + /// + public class FloatEqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly FloatEqualityComparer m_Instance = new FloatEqualityComparer(); + /// + ///A singleton instance of the comparer with a default error value set to 0.0001f. + /// + public static FloatEqualityComparer Instance { get { return m_Instance; } } + + private FloatEqualityComparer() : this(k_DefaultError) {} + + /// + /// Creates an instance of the comparer with a custom error value. + /// + /// The custom error value + /// A FloatEqualityComparer object with allowedError as error value instead of the custom 0.0001f + public FloatEqualityComparer(float allowedError) + { + this.AllowedError = allowedError; + } + + /// + /// Compares the actual and expected float values for equality using . + /// + /// The expected float value used to compare. + /// The actual float value to test. + /// True if the values are equals, false otherwise. + /// + /// + /// [TestFixture] + /// public class FloatsTest + ///{ + /// [Test] + /// public void VerifyThat_TwoFloatsAreEqual() + /// { + /// var comparer = new FloatEqualityComparer(10e-6f); + /// var actual = -0.00009f; + /// var expected = 0.00009f; + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + /// + /// // Default relative error 0.0001f + /// actual = 10e-8f; + /// expected = 0f; + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(FloatEqualityComparer.Instance)); + /// } + ///} + /// + /// + public bool Equals(float expected, float actual) + { + return Utils.AreFloatsEqual(expected, actual, AllowedError); + } + + /// + /// Serves as the default hash function. + /// + /// A not null float number. + /// Returns 0. + public int GetHashCode(float value) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs.meta new file mode 100644 index 0000000..7497131 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/FloatEqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: af5042802f06c804c8abddd544b77a4a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs new file mode 100644 index 0000000..ff0fe77 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs @@ -0,0 +1,19 @@ +using System.Collections; +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestTools +{ + /// + /// When implemented by an attribute, this interface implemented to provide actions to execute before setup and after teardown of tests. + /// + public interface IOuterUnityTestAction + { + /// Executed before each test is run + /// The test that is going to be run. + IEnumerator BeforeTest(ITest test); + + /// Executed after each test is run + /// The test that has just been run. + IEnumerator AfterTest(ITest test); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs.meta new file mode 100644 index 0000000..93429d4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IOuterUnityTestAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9c2a6302985d3846b7b9f6fd9e2da9a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs new file mode 100644 index 0000000..04d7f32 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs @@ -0,0 +1,13 @@ +namespace UnityEngine.TestTools +{ + /// + /// Implement this interface if you want to define a set of actions to execute as a post-build step. Cleanup runs right away for a standalone test run, but only after all the tests run within the Editor. + /// + public interface IPostBuildCleanup + { + /// + /// Implement this method to specify actions that should run as a post-build cleanup step. + /// + void Cleanup(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs.meta new file mode 100644 index 0000000..f1cb9a9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPostBuildCleanup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff67c526455160f4690a44f74dee4cbe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs new file mode 100644 index 0000000..512b52e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs @@ -0,0 +1,59 @@ +namespace UnityEngine.TestTools +{ + /// + /// Implement this interface if you want to define a set of actions to run as a pre-build step. + /// + public interface IPrebuildSetup + { + /// + /// Implement this method to call actions automatically before the build process. + /// + /// + /// + /// [TestFixture] + /// public class CreateSpriteTest : IPrebuildSetup + /// { + /// Texture2D m_Texture; + /// Sprite m_Sprite; + /// + /// public void Setup() + /// { + /// #if UNITY_EDITOR + /// var spritePath = "Assets/Resources/Circle.png"; + /// + /// var ti = UnityEditor.AssetImporter.GetAtPath(spritePath) as UnityEditor.TextureImporter; + /// + /// ti.textureCompression = UnityEditor.TextureImporterCompression.Uncompressed; + /// + /// ti.SaveAndReimport(); + /// #endif + /// } + /// + /// [SetUp] + /// public void SetUpTest() + /// { + /// m_Texture = Resources.Load<Texture2D>("Circle"); + /// } + /// + /// [Test] + /// public void WhenNullTextureIsPassed_CreateShouldReturnNullSprite() + /// { + /// // Check with Valid Texture. + /// + /// LogAssert.Expect(LogType.Log, "Circle Sprite Created"); + /// + /// Sprite.Create(m_Texture, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f)); + /// + /// Debug.Log("Circle Sprite Created"); + /// + /// // Check with NULL Texture. Should return NULL Sprite. + /// m_Sprite = Sprite.Create(null, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f)); + /// + /// Assert.That(m_Sprite, Is.Null, "Sprite created with null texture should be null"); + /// } + /// } + /// + /// + void Setup(); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs.meta new file mode 100644 index 0000000..77dff87 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/IPrebuildSceneSetup.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acc16f0c684508f44813662a300c574b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ITestRunCallback.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ITestRunCallback.cs new file mode 100644 index 0000000..0bd73b0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ITestRunCallback.cs @@ -0,0 +1,31 @@ +using NUnit.Framework.Interfaces; + +namespace UnityEngine.TestRunner +{ + /// + /// Interface for getting callsbacks on test progress directly from NUnit. This is available both in the editor and directly in the runtime. It is registered by using . + /// + public interface ITestRunCallback + { + /// + /// A callback invoked when a test run is started. + /// + /// The full loaded test tree. + void RunStarted(ITest testsToRun); + /// + /// A callback invoked when a test run is finished. + /// + /// The result of the test run. + void RunFinished(ITestResult testResults); + /// + /// A callback invoked when each individual node of the test tree has started executing. + /// + /// The test node currently executed. + void TestStarted(ITest test); + /// + /// A callback invoked when each individual node of the test tree has finished executing. + /// + /// The result of the test tree node after it had been executed. + void TestFinished(ITestResult result); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ITestRunCallback.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ITestRunCallback.cs.meta new file mode 100644 index 0000000..09f6f53 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/ITestRunCallback.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 38d0b8a87b967304da08a2ae9b955066 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest.meta new file mode 100644 index 0000000..5da2eb9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ce8da628f68c7594b8b9a597fa52db7b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs new file mode 100644 index 0000000..8037c15 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs @@ -0,0 +1,11 @@ +namespace UnityEngine.TestTools +{ + /// + /// An interface implemented by a MonoBehaviour test. + /// + public interface IMonoBehaviourTest + { + /// true when the test is considered finished. + bool IsTestFinished {get; } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs.meta new file mode 100644 index 0000000..9af4004 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/IMonoBehaviourTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a002d3737b873954395b7cf862873ab8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs new file mode 100644 index 0000000..372bc3d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs @@ -0,0 +1,60 @@ +namespace UnityEngine.TestTools +{ + /// + /// This is a wrapper that allows running tests on MonoBehaviour scripts. Inherits from . + /// + /// A MonoBehaviour component created for the test and attached to the tests [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html). + public class MonoBehaviourTest : CustomYieldInstruction where T : MonoBehaviour, IMonoBehaviourTest + { + /// A MonoBehaviour component created for the test and attached to the tests [GameObject](https://docs.unity3d.com/ScriptReference/GameObject.html). + public T component { get; } + /// + /// A `GameObject` created as a container for the test component. + /// + public GameObject gameObject { get { return component.gameObject; } } + /// + /// `MonoBehaviourTest` is a [coroutine](https://docs.unity3d.com/ScriptReference/Coroutine.html) and a helper for writing MonoBehaviour tests. + /// Yield a `MonoBehaviour`Test when using the `UnityTest` attribute to instantiate the `MonoBehaviour` you wish to test and wait for it to finish running. Implement the `IMonoBehaviourTest` interface on the `MonoBehaviour` to state when the test completes. + /// + /// + /// + /// + /// [UnityTest] + /// public IEnumerator MonoBehaviourTest_Works() + /// { + /// yield return new MonoBehaviourTest<MyMonoBehaviourTest>(); + /// } + /// + /// public class MyMonoBehaviourTest : MonoBehaviour, IMonoBehaviourTest + /// { + /// private int frameCount; + /// public bool IsTestFinished + /// { + /// get { return frameCount > 10; } + /// } + /// + /// void Update() + /// { + /// frameCount++; + /// } + /// } + /// + /// + public MonoBehaviourTest(bool dontDestroyOnLoad = true) + { + var go = new GameObject("MonoBehaviourTest: " + typeof(T).FullName); + component = go.AddComponent(); + if (dontDestroyOnLoad) + { + Object.DontDestroyOnLoad(go); + } + } + /// + /// (Inherited) Returns `true`` if the test is not finished yet, which keeps the coroutine suspended + /// + public override bool keepWaiting + { + get { return !component.IsTestFinished; } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs.meta new file mode 100644 index 0000000..c727f85 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/MonoBehaviourTest/MonoBehaviourTest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 164c9b1458eaab743a4b45c37a4d720d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs new file mode 100644 index 0000000..e93804b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs @@ -0,0 +1,23 @@ +using System; + +namespace UnityEngine.TestTools +{ + /// + /// PostBuildCleanup attributes run if the respective test or test class is in the current test run. The test is included either by running all tests or setting a [filter](https://docs.unity3d.com/Packages/com.unity.test-framework@1.1/manual/workflow-create-test.html#filters) that includes the test. If multiple tests reference the same pre-built setup or post-build cleanup, then it only runs once. + /// + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class PostBuildCleanupAttribute : Attribute + { + public PostBuildCleanupAttribute(Type targetClass) + { + TargetClass = targetClass; + } + + public PostBuildCleanupAttribute(string targetClassName) + { + TargetClass = AttributeHelper.GetTargetClassFromName(targetClassName, typeof(IPostBuildCleanup)); + } + + internal Type TargetClass { get; private set; } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs.meta new file mode 100644 index 0000000..b45a7a6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PostBuildCleanupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 621fd19bcb071b64aa1d68f0271aa780 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs new file mode 100644 index 0000000..1e4f2d1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs @@ -0,0 +1,70 @@ +using System; + +namespace UnityEngine.TestTools +{ + /// + /// PrebuildSetup attribute run if the test or test class is in the current test run. The test is included either by running all tests or setting a filter that includes the test. If multiple tests reference the same pre-built setup or post-build cleanup, then it only runs once. + /// + [AttributeUsage(AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Method)] + public class PrebuildSetupAttribute : Attribute + { + public PrebuildSetupAttribute(Type targetClass) + { + TargetClass = targetClass; + } + /// + /// + /// + /// + /// + /// + /// [TestFixture] + /// public class CreateSpriteTest : IPrebuildSetup + /// { + /// Texture2D m_Texture; + /// Sprite m_Sprite; + /// + /// public void Setup() + /// { + /// + /// #if UNITY_EDITOR + /// + /// var spritePath = "Assets/Resources/Circle.png"; + /// var ti = UnityEditor.AssetImporter.GetAtPath(spritePath) as UnityEditor.TextureImporter; + /// ti.textureCompression = UnityEditor.TextureImporterCompression.Uncompressed; + /// ti.SaveAndReimport(); + /// + /// #endif + /// } + /// + /// [SetUp] + /// public void SetUpTest() + /// { + /// m_Texture = Resources.Load<Texture2D>("Circle"); + /// } + /// + /// [Test] + /// public void WhenNullTextureIsPassed_CreateShouldReturnNullSprite() + /// { + /// + /// // Check with Valid Texture. + /// LogAssert.Expect(LogType.Log, "Circle Sprite Created"); + /// Sprite.Create(m_Texture, new Rect(0, 0, m_Texture.width, m_Texture.height), new Vector2(0.5f, 0.5f)); + /// Debug.Log("Circle Sprite Created"); + /// + /// // Check with NULL Texture. Should return NULL Sprite. + /// m_Sprite = Sprite.Create(null, new Rect(0, 0, m_Texture.width, m_Texture.heig`t), new Vector2(0.5f, 0.5f)); + /// Assert.That(m_Sprite, Is.Null, "Sprite created with null texture should be null"); + /// } + /// } + /// + /// Tip: Use `#if UNITY_EDITOR` if you want to access Editor only APIs, but the setup/cleanup is inside a **Play Mode** assembly. + /// + public PrebuildSetupAttribute(string targetClassName) + { + TargetClass = AttributeHelper.GetTargetClassFromName(targetClassName, typeof(IPrebuildSetup)); + } + + internal Type TargetClass { get; private set; } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs.meta new file mode 100644 index 0000000..7b6ae4a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/PrebuildSceneSetupAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1b7ce919aa8864409412e809073cf96 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs new file mode 100644 index 0000000..e33c974 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs @@ -0,0 +1,80 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use this utility to compare two Quaternion objects for equality + /// with NUnit assertion constraints. + /// Use the static instance QuaternionEqualityComparer.Instance + /// to have the default calculation error value set to 0.00001f. + /// For any other custom error value, use the one argument constructor. + /// + public class QuaternionEqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.00001f; + private readonly float AllowedError; + + private static readonly QuaternionEqualityComparer m_Instance = new QuaternionEqualityComparer(); + /// + ///A comparer instance with the default error value 0.00001f. + /// > + public static QuaternionEqualityComparer Instance { get { return m_Instance; } } + + + private QuaternionEqualityComparer() : this(k_DefaultError) {} + /// + /// Creates an instance of the comparer with a custom allowed error value. + /// + /// Describes the custom allowed error value + public QuaternionEqualityComparer(float allowedError) + { + AllowedError = allowedError; + } + + /// + /// Compares the actual and expected Quaternion objects + /// for equality using the method. + /// + /// Expected Quaternion value used for comparison + /// Actual Quaternion value to test + /// True if the quaternion are equals, false otherwise. + /// + /// The following example shows how to verify if two Quaternion are equals + /// + /// [TestFixture] + /// public class QuaternionTest + /// { + /// [Test] + /// public void VerifyThat_TwoQuaternionsAreEqual() + /// { + /// var actual = new Quaternion(10f, 0f, 0f, 0f); + /// var expected = new Quaternion(1f, 10f, 0f, 0f); + /// var comparer = new QuaternionEqualityComparer(10e-6f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + /// + /// //Using default error 0.00001f + /// actual = new Quaternion(10f, 0f, 0.1f, 0f); + /// expected = new Quaternion(1f, 10f, 0.1f, 0f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(QuaternionEqualityComparer.Instance)); + /// } + /// } + /// + /// + public bool Equals(Quaternion expected, Quaternion actual) + { + return Mathf.Abs(Quaternion.Dot(expected, actual)) > (1.0f - AllowedError); + } + + /// + /// Serves as the default hash function. + /// + /// A not null Quaternion + /// Returns 0 + public int GetHashCode(Quaternion quaternion) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs.meta new file mode 100644 index 0000000..31faf0c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/QuaternionEqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3b28913f21577de429da928d6d05219f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/StacktraceFilter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/StacktraceFilter.cs new file mode 100644 index 0000000..af431f3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/StacktraceFilter.cs @@ -0,0 +1,43 @@ +using System.Linq; +using System.Text; + +namespace UnityEngine.TestTools.Utils +{ + internal static class StackTraceFilter + { + private static readonly string[] s_FilteredLogMessages = + { + @"UnityEngine.DebugLogHandler:Internal_Log", + @"UnityEngine.DebugLogHandler:Log", + @"UnityEngine.Logger:Log", + @"UnityEngine.Debug" + }; + + private static readonly string[] s_LastMessages = + { + @"System.Reflection.MonoMethod:InternalInvoke(Object, Object[], Exception&)", + @"UnityEditor.TestTools.TestRunner.EditModeRunner:InvokeDelegator" + }; + + public static string Filter(string inputStackTrace) + { + int idx; + foreach (var lastMessage in s_LastMessages) + { + idx = inputStackTrace.IndexOf(lastMessage); + if (idx != -1) + inputStackTrace = inputStackTrace.Substring(0, idx); + } + + var inputStackTraceLines = inputStackTrace.Split('\n'); + var result = new StringBuilder(); + foreach (var line in inputStackTraceLines) + { + if (s_FilteredLogMessages.Any(s => line.StartsWith(s))) + continue; + result.AppendLine(line); + } + return result.ToString(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/StacktraceFilter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/StacktraceFilter.cs.meta new file mode 100644 index 0000000..4f837a1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/StacktraceFilter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc748d99f1f0d484a811a566fc7915ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs new file mode 100644 index 0000000..bb98f95 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs @@ -0,0 +1,68 @@ +using System; +using UnityEngine.Scripting; + +namespace UnityEngine.TestRunner +{ + /// + /// An assembly level attribute that indicates that a given type should be subscribed for receiving updates on the test progress. + /// + /// + /// + /// using NUnit.Framework.Interfaces; + /// using UnityEngine; + /// using UnityEngine.TestRunner; + /// + /// [assembly:TestRunCallback(typeof(TestListener))] + /// + /// public class TestListener : ITestRunCallback + /// { + /// public void RunStarted(ITest testsToRun) + /// { + /// + /// } + /// + /// public void RunFinished(ITestResult testResults) + /// { + /// Debug.Log($"Run finished with result {testResults.ResultState}."); + /// } + /// + /// public void TestStarted(ITest test) + /// { + /// + /// } + /// + /// public void TestFinished(ITestResult result) + /// { + /// + /// } + ///} + /// + /// + [AttributeUsage(AttributeTargets.Assembly)] + public class TestRunCallbackAttribute : Attribute + { + private Type m_Type; + + /// + /// Constructs a new instance of the class. + /// + /// A target type that implements . + /// Throws an ArgumentException if the provided type does not implement . + public TestRunCallbackAttribute(Type type) + { + var interfaceType = typeof(ITestRunCallback); + if (!interfaceType.IsAssignableFrom(type)) + { + throw new ArgumentException(string.Format( + "Type {2} provided to {0} does not implement {1}. If the stripping level is set to high, the implementing class should have the {3}.", + this.GetType().Name, interfaceType.Name, type.Name, typeof(PreserveAttribute).Name)); + } + m_Type = type; + } + + internal ITestRunCallback ConstructCallback() + { + return Activator.CreateInstance(m_Type) as ITestRunCallback; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs.meta new file mode 100644 index 0000000..06b2018 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76b3a3296de548f48b0c3d088fb4b490 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs new file mode 100644 index 0000000..d4a8c40 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using NUnit.Framework.Interfaces; +using NUnit.Framework.Internal; +using UnityEngine.TestTools.TestRunner; + +namespace UnityEngine.TestRunner.Utils +{ + internal class TestRunCallbackListener : ScriptableObject, ITestRunnerListener + { + private ITestRunCallback[] m_Callbacks; + public void RunStarted(ITest testsToRun) + { + InvokeAllCallbacks(callback => callback.RunStarted(testsToRun)); + } + + private static ITestRunCallback[] GetAllCallbacks() + { + var allAssemblies = AppDomain.CurrentDomain.GetAssemblies(); + allAssemblies = allAssemblies.Where(x => x.GetReferencedAssemblies().Any(z => z.Name == "UnityEngine.TestRunner")).ToArray(); + var attributes = allAssemblies.SelectMany(assembly => assembly.GetCustomAttributes(typeof(TestRunCallbackAttribute), true).OfType()).ToArray(); + return attributes.Select(attribute => attribute.ConstructCallback()).ToArray(); + } + + private void InvokeAllCallbacks(Action invoker) + { + if (m_Callbacks == null) + { + m_Callbacks = GetAllCallbacks(); + } + + foreach (var testRunCallback in m_Callbacks) + { + try + { + invoker(testRunCallback); + } + catch (Exception e) + { + Debug.LogException(e); + throw; + } + } + } + + public void RunFinished(ITestResult testResults) + { + InvokeAllCallbacks(callback => callback.RunFinished(testResults)); + } + + public void TestStarted(ITest test) + { + InvokeAllCallbacks(callback => callback.TestStarted(test)); + } + + public void TestFinished(ITestResult result) + { + InvokeAllCallbacks(callback => callback.TestFinished(result)); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs.meta new file mode 100644 index 0000000..77f82ee --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/TestRunCallbackListener.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68f09f0f82599b5448579854e622a4c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Utils.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Utils.cs new file mode 100644 index 0000000..2d626c4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Utils.cs @@ -0,0 +1,93 @@ +using System; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// This contains test utility functions for float value comparison and creating primitives. + /// + public static class Utils + { + /// + /// Relative epsilon comparison of two float values for equality. + /// The relative error is the absolute error divided by the magnitude of the exact value. + /// + /// The expected float value used to compare. + /// The actual float value to test. + /// Epsilon is the relative error to be used in relative epsilon comparison. + /// Returns true if the actual value is equivalent to the expected value. + /// + /// + /// [TestFixture] + /// class UtilsTests + /// { + /// [Test] + /// public void CheckThat_FloatsAreEqual() + /// { + /// float expected = 10e-8f; + /// float actual = 0f; + /// float allowedRelativeError = 10e-6f; + /// + /// Assert.That(Utils.AreFloatsEqual(expected, actual, allowedRelativeError), Is.True); + /// } + /// } + /// + /// + public static bool AreFloatsEqual(float expected, float actual, float epsilon) + { + // special case for infinity + if (expected == Mathf.Infinity || actual == Mathf.Infinity || expected == Mathf.NegativeInfinity || actual == Mathf.NegativeInfinity) + return expected == actual; + + // we cover both relative and absolute tolerance with this check + // which is better than just relative in case of small (in abs value) args + // please note that "usually" approximation is used [i.e. abs(x)+abs(y)+1] + // but we speak about test code so we dont care that much about performance + // but we do care about checks being more precise + return Math.Abs(actual - expected) <= epsilon * Mathf.Max(Mathf.Max(Mathf.Abs(actual), Mathf.Abs(expected)), 1.0f); + } + + /// + /// Compares two floating point numbers for equality under the given absolute tolerance. + /// + /// The expected float value used to compare. + /// The actual float value to test. + /// AllowedAbsoluteError is the permitted error tolerance. + /// Returns true if the actual value is equivalent to the expected value under the given tolerance. + /// + /// + /// + /// [TestFixture] + /// class UtilsTests + /// { + /// [Test] + /// public void ChechThat_FloatsAreAbsoluteEqual() + /// { + /// float expected = 0f; + /// float actual = 10e-6f; + /// float error = 10e-5f; + /// + /// Assert.That(Utils.AreFloatsEqualAbsoluteError(expected, actual, error), Is.True); + /// } + /// } + /// + /// + public static bool AreFloatsEqualAbsoluteError(float expected, float actual, float allowedAbsoluteError) + { + return Math.Abs(actual - expected) <= allowedAbsoluteError; + } + + /// + /// Analogous to GameObject.CreatePrimitive, but creates a primitive mesh renderer with fast shader instead of a default builtin shader. + /// Optimized for testing performance. + /// + /// A GameObject with primitive mesh renderer and collider. + public static GameObject CreatePrimitive(PrimitiveType type) + { + var prim = GameObject.CreatePrimitive(type); + var renderer = prim.GetComponent(); + if (renderer) + renderer.sharedMaterial = new Material(Shader.Find("VertexLit")); + return prim; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Utils.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Utils.cs.meta new file mode 100644 index 0000000..63b9c66 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Utils.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9502550ba4785e3499d6c9251fa2114b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs new file mode 100644 index 0000000..c82526b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use these classes to compare two objects of the same type for equality within the range of a given tolerance using NUnit or custom constraints . Call Instance to apply the default calculation error value to the comparison. + /// + public class Vector2ComparerWithEqualsOperator : IEqualityComparer + { + private static readonly Vector2ComparerWithEqualsOperator m_Instance = new Vector2ComparerWithEqualsOperator(); + /// + /// A singleton instance of the comparer with a predefined default error value. + /// + public static Vector2ComparerWithEqualsOperator Instance { get { return m_Instance; } } + + private Vector2ComparerWithEqualsOperator() {} + /// + /// Compares the actual and expected objects for equality using a custom comparison mechanism. + /// + /// Expected Vector2 used to compare + /// Actual Vector2 value to test. + /// Returns true if expected and actual objects are equal, otherwise it returns false. + /// + /// + /// [TestFixture] + /// public class Vector2Test + /// { + /// [Test] + /// public void VerifyThat_TwoVector2ObjectsAreEqual() + /// { + /// var actual = new Vector2(10e-7f, 10e-7f); + /// var expected = new Vector2(0f, 0f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(Vector2ComparerWithEqualsOperator.Instance)); + /// } + /// } + /// + /// + public bool Equals(Vector2 expected, Vector2 actual) + { + return expected == actual; + } + /// + /// Serves as the default hash function. + /// + /// A not null Vector2 object + /// Returns 0 + public int GetHashCode(Vector2 vec2) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs.meta new file mode 100644 index 0000000..07662bb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2ComparerWithEqualsOperator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65701ebe8bada6b4785e9c7afe7f5bee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs new file mode 100644 index 0000000..3c0b915 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs @@ -0,0 +1,86 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use this class to compare two Vector2 objects for + /// equality with NUnit constraints. Use the static + /// + /// to have the calculation error value set to default 0.0001f. + /// For any other error value, instantiate a new comparer + /// object with the one argument constructor. + /// + public class Vector2EqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly Vector2EqualityComparer m_Instance = new Vector2EqualityComparer(); + + /// + /// A comparer instance with the default error value set to 0.0001f. + ///> + public static Vector2EqualityComparer Instance { get { return m_Instance; } } + + private Vector2EqualityComparer() : this(k_DefaultError) + { + } + /// + /// Creates an instance with a custom error value. + /// + /// This value identifies the calculation error allowed. + /// A float number. + /// A comparer with custom allowed calculation error + public Vector2EqualityComparer(float error) + { + this.AllowedError = error; + } + /// + /// Compares the actual and expected Vector2 objects for equality using the method. + /// + /// The expected Vector2 used for comparison + /// + /// The actual Vector2 to test + /// + /// True if the vectors are equals, false otherwise. + /// + /// The following example shows how to verify if two Vector2 are equals + /// + ///[TestFixture] + /// public class Vector2Test + /// { + /// [Test] + /// public void VerifyThat_TwoVector2ObjectsAreEqual() + /// { + /// // Custom calculation error + /// var actual = new Vector2(10e-7f, 10e-7f); + /// var expected = new Vector2(0f, 0f); + /// var comparer = new Vector2EqualityComparer(10e-6f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + /// + /// //Default error 0.0001f + /// actual = new Vector2(0.01f, 0.01f); + /// expected = new Vector2(0.01f, 0.01f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(Vector2EqualityComparer.Instance)); + /// } + /// } + /// + /// + public bool Equals(Vector2 expected, Vector2 actual) + { + return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && + Utils.AreFloatsEqual(expected.y, actual.y, AllowedError); + } + /// + /// Serves as the default hash function. + /// + /// A not null Vector2 + /// Returns 0 + public int GetHashCode(Vector2 vec2) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs.meta new file mode 100644 index 0000000..ed2951a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector2EqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58ad09607a0d62d458a78d7174665566 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs new file mode 100644 index 0000000..7918f86 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use these classes to compare two objects of the same type for equality within the range of a given tolerance using NUnit or custom constraints . Call Instance to apply the default calculation error value to the comparison. + /// + public class Vector3ComparerWithEqualsOperator : IEqualityComparer + { + private static readonly Vector3ComparerWithEqualsOperator m_Instance = new Vector3ComparerWithEqualsOperator(); + /// + /// A singleton instance of the comparer with a predefined default error value. + /// + public static Vector3ComparerWithEqualsOperator Instance { get { return m_Instance; } } + + private Vector3ComparerWithEqualsOperator() {} + /// + /// Compares the actual and expected objects for equality using a custom comparison mechanism. + /// + /// Expected Vector3 used to compare + /// Actual Vector3 value to test. + /// Returns true if expected and actual objects are equal, otherwise it returns false. + /// + /// + /// [TestFixture] + /// public class Vector3Test + /// { + /// [Test] + /// public void VerifyThat_TwoVector3ObjectsAreEqual() + /// { + /// var actual = new Vector2(10e-7f, 10e-7f, 10e-7f); + /// var expected = new Vector2(0f, 0f, 0f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(Vector3ComparerWithEqualsOperator.Instance)); + /// } + /// } + /// + /// + public bool Equals(Vector3 expected, Vector3 actual) + { + return expected == actual; + } + /// + /// Serves as the default hash function. + /// + /// A not null Vector3 object + /// Returns 0 + public int GetHashCode(Vector3 vec3) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs.meta new file mode 100644 index 0000000..01662a4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3ComparerWithEqualsOperator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5b994928117e3db418da69c821da7e19 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs new file mode 100644 index 0000000..aab9713 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs @@ -0,0 +1,82 @@ +using System.Collections.Generic; + + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use this class to compare two Vector3 objects for equality with NUnit constraints. Call Vector3EqualityComparer.Instance comparer to perform a comparison with the default calculation error value 0.0001f. To specify a different error value, use the one argument constructor to instantiate a new comparer. + /// + public class Vector3EqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly Vector3EqualityComparer m_Instance = new Vector3EqualityComparer(); + + /// A comparer instance with the default calculation error value equal to 0.0001f. + /// + public static Vector3EqualityComparer Instance { get { return m_Instance; } } + + private Vector3EqualityComparer() : this(k_DefaultError) {} + + /// This value identifies the calculation error allowed. + /// A float number. + /// A comparer with custom allowed calculation error + public Vector3EqualityComparer(float allowedError) + { + this.AllowedError = allowedError; + } + /// + /// Compares the actual and expected Vector3 objects + /// for equality using to compare the x, y, and z attributes of Vector3. + /// + /// The expected Vector3 used for comparison + /// + /// The actual Vector3 to test + /// + /// True if the vectors are equals, false otherwise. + /// + /// The following example shows how to verify if two Vector3 are equals + /// + /// [TestFixture] + /// public class Vector3Test + /// { + /// [Test] + /// public void VerifyThat_TwoVector3ObjectsAreEqual() + /// { + /// //Custom error 10e-6f + /// var actual = new Vector3(10e-8f, 10e-8f, 10e-8f); + /// var expected = new Vector3(0f, 0f, 0f); + /// var comparer = new Vector3EqualityComparer(10e-6f); + /// + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + /// + /// //Default error 0.0001f + /// actual = new Vector3(0.01f, 0.01f, 0f); + /// expected = new Vector3(0.01f, 0.01f, 0f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(Vector3EqualityComparer.Instance)); + /// } + /// } + /// + /// + + public bool Equals(Vector3 expected, Vector3 actual) + { + return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && + Utils.AreFloatsEqual(expected.y, actual.y, AllowedError) && + Utils.AreFloatsEqual(expected.z, actual.z, AllowedError); + } + + /// + /// Serves as the default hash function. + /// + /// A not null Vector3 + /// Returns 0 + public int GetHashCode(Vector3 vec3) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs.meta new file mode 100644 index 0000000..37e0a03 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector3EqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4bd2bc28ff24d5c488844851cb785db0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs new file mode 100644 index 0000000..ce32670 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use these classes to compare two objects of the same type for equality within the range of a given tolerance using NUnit or custom constraints . Call Instance to apply the default calculation error value to the comparison. + /// + public class Vector4ComparerWithEqualsOperator : IEqualityComparer + { + private static readonly Vector4ComparerWithEqualsOperator m_Instance = new Vector4ComparerWithEqualsOperator(); + /// + /// A singleton instance of the comparer with a predefined default error value. + /// + public static Vector4ComparerWithEqualsOperator Instance { get { return m_Instance; } } + + private Vector4ComparerWithEqualsOperator() {} + /// + /// Compares the actual and expected objects for equality using a custom comparison mechanism. + /// + /// Expected Vector4 used to compare + /// Actual Vector4 value to test. + /// Returns true if expected and actual objects are equal, otherwise it returns false. + /// + /// + /// [TestFixture] + /// public class Vector4Test + /// { + /// [Test] + /// public void VerifyThat_TwoVector4ObjectsAreEqual() + /// { + /// var actual = new Vector4(10e-7f, 10e-7f, 10e-7f, 10e-7f); + /// var expected = new Vector4(0f, 0f, 0f, 0f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(Vector4ComparerWithEqualsOperator.Instance)); + /// } + /// } + /// + /// + public bool Equals(Vector4 expected, Vector4 actual) + { + return expected == actual; + } + /// + /// Serves as the default hash function. + /// + /// A not null Vector4 object + /// Returns 0 + public int GetHashCode(Vector4 vec4) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs.meta new file mode 100644 index 0000000..a23cf66 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4ComparerWithEqualsOperator.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 44100f5f60f351348b9719b46d46cebe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs new file mode 100644 index 0000000..1683c95 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs @@ -0,0 +1,77 @@ +using System.Collections.Generic; + +namespace UnityEngine.TestTools.Utils +{ + /// + /// Use this class to compare two Vector4 objects for equality with NUnit constraints. Call Vector4EqualityComparer.Instance to perform comparisons using default calculation error value 0.0001f. To set a custom test value, instantiate a new comparer using the one argument constructor. + /// + public class Vector4EqualityComparer : IEqualityComparer + { + private const float k_DefaultError = 0.0001f; + private readonly float AllowedError; + + private static readonly Vector4EqualityComparer m_Instance = new Vector4EqualityComparer(); + /// + /// A comparer instance with the default calculation error value set to 0.0001f. + /// + public static Vector4EqualityComparer Instance { get { return m_Instance; } } + + private Vector4EqualityComparer() : this(k_DefaultError) {} + /// + /// Creates an instance with a custom error value. + /// + /// This value identifies the calculation error allowed. + public Vector4EqualityComparer(float allowedError) + { + this.AllowedError = allowedError; + } + + /// + /// Compares the actual and expected Vector4 objects for equality using to compare the x, y, z, and w attributes of Vector4. + /// + /// The expected Vector4 used for comparison + /// The actual Vector4 to test + /// True if the vectors are equals, false otherwise. + /// + /// + ///[TestFixture] + /// public class Vector4Test + /// { + /// [Test] + /// public void VerifyThat_TwoVector4ObjectsAreEqual() + /// { + /// // Custom error 10e-6f + /// var actual = new Vector4(0, 0, 1e-6f, 1e-6f); + /// var expected = new Vector4(1e-6f, 0f, 0f, 0f); + /// var comparer = new Vector4EqualityComparer(10e-6f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(comparer)); + /// + /// // Default error 0.0001f + /// actual = new Vector4(0.01f, 0.01f, 0f, 0f); + /// expected = new Vector4(0.01f, 0.01f, 0f, 0f); + /// + /// Assert.That(actual, Is.EqualTo(expected).Using(Vector4EqualityComparer.Instance)); + /// } + /// } + /// + /// + public bool Equals(Vector4 expected, Vector4 actual) + { + return Utils.AreFloatsEqual(expected.x, actual.x, AllowedError) && + Utils.AreFloatsEqual(expected.y, actual.y, AllowedError) && + Utils.AreFloatsEqual(expected.z, actual.z, AllowedError) && + Utils.AreFloatsEqual(expected.w, actual.w, AllowedError); + } + + /// + /// Serves as the default hash function. + /// + /// A not null Vector4 object + /// Returns 0 + public int GetHashCode(Vector4 vec4) + { + return 0; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs.meta new file mode 100644 index 0000000..149157d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/UnityEngine.TestRunner/Utils/Vector4EqualityComparer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32da81683c22faf458026716a2b821aa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/package.json b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/package.json new file mode 100644 index 0000000..ad15da0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/package.json @@ -0,0 +1,29 @@ +{ + "name": "com.unity.test-framework", + "displayName": "Test Framework", + "version": "1.1.20", + "unity": "2019.2", + "unityRelease": "0a10", + "description": "Test framework for running Edit mode and Play mode tests in Unity.", + "keywords": [ + "Test", + "TestFramework" + ], + "category": "Unity Test Framework", + "repository": { + "url": "https://github.com/Unity-Technologies/com.unity.test-framework.git", + "type": "git", + "revision": "f04391d9987f4a534f886a9638b011d53e5871d8" + }, + "dependencies": { + "com.unity.ext.nunit": "1.0.6", + "com.unity.modules.imgui": "1.0.0", + "com.unity.modules.jsonserialize": "1.0.0" + }, + "relatedPackages": { + "com.unity.test-framework.tests": "1.1.20" + }, + "upmCi": { + "footprint": "6bbcd578b4d1dff0f4db7da389f8cff13f752297" + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/package.json.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/package.json.meta new file mode 100644 index 0000000..63170c3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.test-framework@1.1.20/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d6a2e6e4803de7b43baacdc355fc144d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/CHANGELOG.md b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/CHANGELOG.md new file mode 100644 index 0000000..594a0e2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/CHANGELOG.md @@ -0,0 +1,449 @@ +# Changelog +These are the release notes for the TextMesh Pro UPM package which was first introduced with Unity 2018.1. Please see the following link for the Release Notes for prior versions of TextMesh Pro. http://digitalnativestudios.com/forum/index.php?topic=1363.0 + +## [2.1.1] - 2020-07-26 +## [1.5.1] +## [3.0.1] +### Changes +- Addressed compiler warning related to the new virtual event OnPreRenderText. +- Added one additional layer of missing character search where in the even the missing glyph character \u0000 or space character \u0020 is not available in any font asset or potential fallbacks, the End of Text (ETX) \u0003 will be used instead. +- Input Field Integer or Decimal validation will now take into account the current culture. See [forum post](https://forum.unity.com/threads/currentculture-decimal-separator-in-input-fields.908999/) for details. +- Added Editor only font asset post processor to handle font assets being modified outside of the Unity Editor. +- Fixed potential Array Out of Bounds error that could occur when using </style> without first using a valid <style>. Case #1263787 and See [forum post](https://forum.unity.com/threads/missingreferenceexception-occurs-on-selecting-a-tmp-dropdown-in-the-hierarchy-after-a-play-occurs.728018/#post-6094317) for details. +- Fixed potential issue when using multiple <font> tag in the same text object where these referencing several font assets derived from the same font file. Since their Default Material all have the same name, this was causing an issue in the Material Reference Manager. See [forum post](https://forum.unity.com/threads/argumentexception-on-v2-1-0-unity-2019-4-4f1-identified-bug.934789/) for details. Case #1264596. + +## [2.1.0] - 2020-06-30 +## [1.5.0] +## [3.0.0] +### Changes +- Added support to control if a text object is Maskable and affected by UI Mask components. The new setting is found in the Extra Settings section of the <TextMeshProUGUI> component inspector. +- Fixed potential Null Reference Exception when trying to add characters and / or glyphs to a font asset via scripting and before it has been initialized or ReadFontAssetDefinition() has been called. +- Fixed incorrect preferred width values when using alternative font weight font assets. Case #1255336 +- Enabling or disabling the Mesh Renderer of a <TextMeshPro> text object should now also mirror that state on any sub text object renderers as well. +- Fixed <sprite> incorrect position when this sprite is the only character in the text and when the sprite asset face info has not been defined. +- Fixed potential Null Reference Exception related to culling when entering play mode. +- Added OnPreRenderText event delegate to allow potential modification of the text geometry before it is uploaded to the mesh and rendered. +- Fixed missing warning when the requested character is missing from the font asset or any potential fallbacks. Case #1256879 +- Fixed potential issue with Underline and StrikeThrough when using alternative typeface. Case #1255336 +- Fixed potential errors in the Text StyleSheet Inspector when adding or removing Text Styles after resetting the asset. Case #1254602 +- Fixed text Margin property values not being draggable in the Extra Settings section of the text inspector. Case #1253447 +- It will no longer be possible to create Editor Presets for the TMP_FontAsset, TMP_SpriteAsset, TMP_StyleSheet, TMP_ColorGradient and TMP_Settings as these are persistent and runtime assets. Case #1251229 + +## [2.1.0-preview.14] - 2020-06-08 +## [1.5.0-preview.14] +## [3.0.0-preview.14] +### Changes +- Fixed sprite character and sprite glyph scale not being reflected in the text layout. See [forum post](https://forum.unity.com/threads/glyph-scale-dont-change-line-height.898817/) for details. +- Fixed potential null reference exception in the CrossFadeColor or CrossFadeAlpha functions. See [forum post](https://forum.unity.com/threads/version-1-5-0-2-1-0-3-0-0-preview-13-now-available-for-testing.753587/page-4#post-5885075) for details. +- Minor improvements to the Sprite Asset Importer to improve allocations and address potential error encountered when creating multiple sprite assets. +- TMP GUID Remapping Tool - Removed "UnityEditor.Animations.AnimatorController" from the exclusion search list. +- Fixed potential culling issue when dynamically updating the content of child text objects of RectMask2D components. Case #1253625 +- Fixed InvalidOperationException that could occur when changing text Overflow linked components via code. Case #1251283 + +## [2.1.0-preview.13] - 2020-05-22 +## [1.5.0-preview.13] +## [3.0.0-preview.13] +### Changes +- Fixed potential issue where the Font Asset Creator could get stuck in the packing phase of the atlas generation process. See [forum post](https://forum.unity.com/threads/font-asset-creator-stuck-at-packing-glyphs-pass-8.811863/) for details. +- Fixed issue potentially affecting text layout as a result of the width of the RectTransform being incorrectly reported. See [forum post](https://forum.unity.com/threads/textmesh-pro-forcemeshupdate-true-not-working-when-object-inactive.524507/#post-5798515) for details. +- Previously created prefabs containing sub text objects will now have their HideFlags updated to HideFlags.DontSave to be consistent with newly created prefabs whose sub text objects are no longer serialized. Case #1247184 +- Fixed culling issue where lossy scale was not considered in the determination of the bounds of the text geometry. + +## [2.1.0-preview.12] - 2020-05-09 +## [1.5.0-preview.12] +## [3.0.0-preview.12] +### Changes +- Added synchronization of the RaycastTarget property of the parent <TextMeshProUGUI> with potential child sub text objects. Case #1240784 +- Fixed Font Asset Bold Spacing adjustment scaling based on the text object point size instead of current point size. Case #1241132 +- Improved text alignment when using RTL in conjunction with character, word and other spacing adjustments. +- Fixed TMP Input Field caret potentially not being visible when reaching the right side of the viewport. See [forum post](https://forum.unity.com/threads/inputfield-bug-2.879244/) for more details. +- Fixed TMP Input Field incorrect text RectTransform horizontal adjustment when using the Backspace key. See [forum post](https://forum.unity.com/threads/inputfield-bug4-delete-and-backspace-bug.879283/) for more details. +- Fixed potential null reference in the TextMeshProUGUI.Cull function when using a workflow that involves enabling / disabling Canvases in the scene. +- Fixed ArgumentOutOfRangeException when using the "Update Sprite Asset" inspector option on a sprite asset that does not contain any sprites. Case #1242936 +- Fixed incorrect culling of the text geometry by the RectMask2D component on newly created text objects. Case #1245445 +- It is now possible to use the Material Context Menu options to Copy / Paste Material Properties or Atlas Texture originally created for TMP with all other non TMP specific materials. Case #1242671 +- Fixed NullReferenceException when setting the Atlas Texture to None in the Debug Settings of the Material Inspector of a text object. Case #1245104 + +## [2.1.0-preview.11] - 2020-04-22 +## [1.5.0-preview.11] +## [3.0.0-preview.11] +### Changes +- Fixed incorrect culling of text object by RectMask2D component when the parent Canvas Render Mode is set to Screen Space - Camera or World Space. Case #1240595 +- Added special handling to ForceMeshUpdate() when the parent Canvas is disabled. + +## [2.1.0-preview.10] - 2020-04-21 +## [1.5.0-preview.10] +## [3.0.0-preview.10] +### Changes +- Revised caching of Preferred Width and Height to further reduce the amount of time it has to be recomputed when using a complex structure of Layout components. +- Fixed potential issue when using Text Overflow Ellipsis and Truncate modes when the text contains characters using superscript, subscript or using the <voffset> tag. +- Revised culling of text objects when using a RectMask2D where the bounds of the text geometry instead of the RectTransform define the culling rect. +- Added HDR support to material preset colors. +- Fixed various formatting issues in this ChangeLog. +- Added the ability to define a unicode value for a missing sprite character in the TMP Settings. +- Added support for displaying a missing sprite character when the requested sprite character is not present in the sprite asset or potential fallback(s). This new functionality is only available when trying to reference a sprite by name. +- Sprite Characters will now have a default Unicode value of 0xFFFE (Private NonCharacter) instead of a Unicode value of 0x0 (default unicode value for missing character). +- Using the sprite asset context menu option "Update Sprite Asset" will now remap sprite characters with unicode value of 0x0 to 0xFFFE in addition to its currently functionality. +- Updating TMP Essential Resources via the "Window - TextMeshPro - Import TMP Essential Resources" menu option will no longer override existing TMP Settings. +- Minor optimization where SDF Scale on some text objects could be unnecessarily updated due to floating point rounding errors in their lossy scale. Case #1230799 +- Fixed minor issue where text objects created before importing the required TMP Essential Resources would have no default text. +- Improvements to line breaking for CJK and mixed Latin and CJK characters. See the following [forum post](https://forum.unity.com/threads/tmp-bug.852733/#post-5688274) for more details. +- Fixed potential NullReferenceException that could occur in the TMP InputField on some platforms if the InputSystem reference is null. Case #1232433 +- Added small padding to bitmap character geometry to prevent potential clipping. +- Added optimization to ignore very small RectTransform pivot changes that are usually the result of rounding errors when using Layout Components. Case #1237700 +- Sorting Layer ID and Sorting Order properties located in the Extra Settings of <TextMeshPro> text objects will now serialized when creating Editor Presets. Case #1215750 +- TextMeshProUGUI sub text objects will now be set as first sibling of their parent to prevent them from being rendered over other non text object child in the scene hierarchy. +- Fixed text objects becoming visible when set to empty or null as a result of a scale change. Case #1238408 +- Fixed useMaxVisibleDescender property now getting set properly via scripting. Case #1218526 +- Fixed SortingLayerID and SortingOrder not getting set correctly when multiple <TextMeshPro> objects are selected. Case #1171272 +- Fixed default settings getting applied to disabled text objects in the scene hierarchy whose text property was set to null. Case #1151621 +- Fixed mouse cursor flickering when hovering the Text Input Box of a text prefab with RTL enabled. Case #1206395 + +## [2.1.0-preview.8] - 2020-03-14 +## [1.5.0-preview.8] +## [3.0.0-preview.8] +### Changes +- Fixed a minor issue where the preferred width of a text object can be incorrect when using multiple font assets, fallbacks and sprites in the same line of text. +- Added Alpha Fade Speed property to the TMP_DropDown inspector. +- Minor improvements to the LogWarning related to missing characters in a font asset or fallback being replaced by a space character. +- Fixed text object geometry not getting clipped when object is outside of RectMask2D. +- Improved search for potential missing character to include the primary font asset and potential fallbacks when the current font asset is not the primary. +- Ignorable / Synthesized characters in font assets will only be created if they do not exist in the source font file. +- Trying to use Text Overflow Ellipsis mode when no Ellipsis character is available in the primary font asset or potential fallbacks will now issue a warning and switch Text Overflow mode to Truncate. +- Added <color=lightblue> and <color=grey> to pre-defined rich text tag colors. +- Fixed compatibility issue when using TexturePacker - JSON (Array) mode and the TMP Sprite Asset Importer to create SpriteAssets. +- Simple fix to prevent the underline rich text tag becoming visible in the TMP Input Field when in IME composition mode with Rich Text disabled on the TMP Input Field. This is a temporary fix until a more robust and flexible solution is implemented. Case #1219969 +- Sub Text Objects which are created when the text requires the use of a fallback font asset or sprite asset will now use HideFlags.DontSave to prevent them from being save with Prefabs as they are created on demand. +- Fix incorrect material reference when current font asset is not the primary or a fallback that is missing a character which is present in the primary font asset. + +## [2.1.0-preview.7] - 2020-03-07 +## [1.5.0-preview.7] +## [3.0.0-preview.7] +### Changes +- Reverted recent change to the TMP_SubMeshUI OnDisable() function that could result in a Missing Reference Exception in the GraphicRaycaster.cs script. See the following [forum post](https://forum.unity.com/threads/version-1-5-0-2-1-0-preview-5-now-available-for-testing.753587/page-2#post-5523412). +- Added support for Stadia for Unity 2019.3 or newer. +- Addressed warning that would appear in the console in Unity 2019.3 related to recent Preset API changes. Case #1223257 +- Fixed glyph drawing issue in the Font Asset Inspector Glyph Adjustment Table when Multi Atlas Texture is enabled and the glyph is not located in the main atlas texture or at atlasTextures[0]. +- Added support for <ZWSP> tag which is internally replaced by a zero width space or \u200B. +- Improved line breaking handling when using <NBSP> and / or <NOBR> tags where instead of breaking these line segments per character, they will break at any possible soft breaking space when these segments exceed the width of the text container. +- Improved PreferredHeight calculations and handling when using Text Auto Size. +- Fixed incorrect color being applied to the underline or strikethrough line segments when using and / or tags along with a tag while at the same time applying an Underline or Strikethrough font style on the whole text object. +- Fixed SDF Scale not getting updated when using SetText() with StringBuilder when the lossyScale of the text object changes. Case #1216007 +- Added Non Breaking Space \u00A0 and Soft Hyphen \u00AD to list of synthesized characters in the event they are not present in the source font file. +- Fixed stack overflow issue when using TMP_FontAsset.HasCharacter and TMP_FontAsset.HasCharacters function on font assets that have circular fallback references. Case #1222574 +- Fixed atlas texture not getting set correctly to IsReadable when switching a static font asset to dynamic in the Generation Settings of the Font Asset Inspector. +- Added check for RectTransform.sizeDelta change when OnRectTransformDimensionsChange() is called by the Canvas system to get around potential rounding error that erroneously trigger this callback when the RectTransform is using Stretch Anchor mode. +- As requested by a few users, TMP_FontAsset.faceInfo setter is now public instead of internal. + +## [2.1.0-preview.5] - 2020-02-25 +## [1.5.0-preview.5] +## [3.0.0-preview.5] +### Changes +- Revised SetText function formatting options to including ability to specify padding for integral part of the value. Revised format is as follows: {Arg Index:Integral Padding.Decimal Precision} Example: TMP_Text.SetText("Value = {0:000.00}", 10.375f); result in "Value = 010.38". +- Fixed issue where text objects isTextObjectScaleStatic property would be ignored when OnCanvasHierarchyChanged() is called. +- Added a Character, Glyph and Record count to those respective tables in the Font Asset Inspector. +- Fixed potential Null Reference Exception that would occur when using text Overflow Ellipsis mode with a primary font asset that doesn't contain the Ellipsis character. Case #1209771 +- Fixed a potential Editor lockup when using text Overflow Page mode. Case #1219055 +- Fixed Input Field incorrect caret vertical alignment when using the Midline / Vertical Geometry alignment option. +- Added initial / minimal support for the New Input System. Please use with caution and report any issues. +- Changes to Font Asset Generation Settings via the Font Asset Inspector will now update the existing glyphs and characters for the new settings instead of clearing them. +- Text object InternalUpdate() used to handle potential scale changes of text objects now uses willRenderCanvases event instead of onPreCull. This avoids a potential one frame delay in updating of objects and no impact on objects. Case #1216007 + +## [2.1.0-preview.4] - 2020-01-31 +## [1.5.0-preview.4] +## [3.0.0-preview.4] +### Changes +- Fixed Input Field issue where scrolling events could prevent OnEndEdit event from firing. See [forum post](https://forum.unity.com/threads/mouse-wheel-on-multiline-input-field-with-no-scrollbar-hangs-input-field-stops-event-firing.794607/) for details. +- Improved Input Field handling of Vertical Scrollbar in conjunction with the ResetOnDeActivation property. Using the Vertical Scrollbar no longer triggers OnEndEdit event. +- Fixed MissingReferenceException when deleting a TMP prefab that is part of a nested prefab. Case #1207793 +- Improved handling of allocations of newly created text objects with large amount of text. As a result of these revisions, allocations will potentially be reduce by 10X. See #1205923 +- Fixed potential Null Reference Exception with the TMP DropDown that could occur when using the experimental Editor "Enter Play Mode" feature. Case #1207915 +- Fixed potential issue with the assignment of sub text object materials. +- Add support for hiding the soft keyboard for Switch in the TMP Input Field. +- Fixed incorrect Preferred Height when Word Wrapping is disabled on text objects. See [forum post](https://forum.unity.com/threads/incorrect-wordwrapping-preferredsize-textmespro-2-1-preview-3.812376/) for details. +- Added support for the new Selected state and color to the TMP Input Field. Case #1210496 +- Fixed additional instances of TMP Resource Importer window being created when deleting the "TextMesh Pro" folder just after having imported them. Case #1205848 +- Added public ITextPreprocessor textPreprocessor; property to allow setting the text preprocessor for a given text component. + +## [2.1.0-preview.3] - 2019-12-16 +## [1.5.0-preview.3] +### Changes +- Fixed potential issue with TMP Dropdown where calling Show() and Hide() in very short interval could result in additional Blockers. Case #1194114 +- Fixed potential issues that could occur when upgrading to version 1.5.0-preview.2 or newer of the TMP package without also updating the TMP Essential Resources in the project. +- Added check and warning when trying to create a font asset whose source font file has "Incl. Font Data" disabled in the Font Import Settings. Case #1198587 and #1198112 +- Fixed Ellipsis overflow mode issue when using small caps. Case #1198392 +- Fixed potential layout issue when adding a Layout Group to the text object itself. Case #1197614 +- Fixed Font Asset Creator issue where too many adjustment records with adjustment value of zero were added to the font asset. +- Added support for Line Separator \u2028 and Paragraph Separator \u2029. +- TMP shaders have been moved from "TextMesh Pro/Resources/Shaders" folder to "TextMesh Pro/Shaders" folder. See the following [post](https://forum.unity.com/threads/version-1-5-0-2-1-0-preview-2-now-available-for-testing.753587/#post-5206853) for details. +- Added new experimental SDF and Mobile SDF Shaders that use Screen Space Derivatives (SSD) where these shaders no longer require SDF Scale to be passed via Vertex Attributes. These shaders have higher performance overhead but are more flexible. This overhead should only be noticeable on mobile platforms. +- Fixed potential text alignment issue where upgrading from package version 1.4.1 to 1.5.0-preview.2 would result in incorrect alignment on prefabs. Case #1198833 +- Added \u061C Arabic Letter Mark, \u200E Left-to-Right Mark and \u200F Right-to-Left Mark to list of control and non renderable characters. +- Fixed Missing Reference Exception that would appear when expanding the Extra Settings of a TextMeshPro Preset asset. Case #1201072 +- Fixed Missing Reference Exception that would appear when editing the Vertex Color or Color Gradient of a TMP component Preset asset. Case #1201069 +- Fixed Inspector layout issue preventing enabling or disabling the Outline, Underlay, Lighting and Glow features when selecting a Preset asset material. Case #1196963 +- Revised the Create Material Preset context menu option to issue a warning and ignore materials outside the project. Case #1200109 +- Added experimental ITextPreprocessor interface to allow users to create custom components to handle text preprocessing and shaping. This interface includes a PreprocessText(string text) function that is called when the object contains a component that inherits from this interface. +- Added support for Unity Presets in the Editor for both and components. Case #1191793 +- Optimization to ensure the TMP Update Manager only rebuilds text objects once per frame regardless of the number of cameras in the scene. + +## [2.1.0-preview.2] - 2019-10-30 +## [1.5.0-preview.2] +### Changes +- Fixed Input Field issue when Read Only flag is set preventing the initial setting of the text. Also fixed Read Only flag not being respected when using IME input. +- Fixed potential infinite loop when using text overflow mode ScrollRect. See Case #1188867 +- Fixed Input Field culling related issue(s) where text would be incorrectly culled. See https://forum.unity.com/threads/version-1-5-0-2-1-0-preview-1-now-available-for-testing.753587/#post-5023700 +- Revised handling and referencing of the CanvasRenderer in anticipation of an incoming change to the MaskableGraphic class where it will no longer automatically add a CanvasRenderer to components inheriting from it. As a result, objects will no longer have a CanvasRenderer. +- Fixed potential NRE when using Overflow Truncate mode with sprites. See https://forum.unity.com/threads/tmpro-stackoverflow-caused-by-tmpro-textmeshprougui-generatetextmesh.750398/page-2#post-5042822 +- Fixed issue when using font weights in combination of font styles in the editor. +- Fixed for potential incorrect preferred height. +- Improved handling of StyleSheet options to reorder, add or delete styles. +- Fixed Input Field Caret & Selection Highlight potential culling issue when the object was instantiated outside the culling region. +- Fixed potential issue with registration of text objects in the TMP_UpdateManager. +- Optimization to suppress callback to InternalUpdate when parent Canvas is disabled. Case #1189820 +- Fixed Fallback material not getting updated correctly when changing Generation Settings on the Fallback Font Asset. +- Fixed a typo in the Font Weight section of the Font Asset Editor. +- Fixed potential ArgumentOutOfRangeException in the Input Field when using Hide Mobile Input and deleting a long string. Case #1162514 +- Added "Is Scale Static" option in the Extra Settings to exclude text objects from InternalUpdate callbacks to improve performance when the object's scale is static. This InternalUpdate callback is used to track potential changes to the scale of text objects to update their SDF Scale. +- Added the ability to control culling modes for the TMP Shaders. This new option is available in the Debug section of the Material Inspector. New feature requires updating the TMP Essential Resources. See the following post https://forum.unity.com/threads/not-see-textmeshpro-rendering-from-the-back.767510/#post-5112461. +- Fixed Material Inspector issue when toggling the Record button in the Animation window. Case #1174960 +- Improved Line Breaking handling for CJK. This also addresses a few reported issues. Case #1171603 +- Added support for <NBSP> tag which is internally replaced by a non-breaking space or \u00A0. +- Improved performance when retrieving glyph adjustment records when using dynamic font assets. +- Fixed potential Null Reference Exception in the Editor when assigning new font asset to disabled game object when no previous font asset was assigned. + +## [2.1.0-preview.1] - 2019-09-30 +## [1.5.0-preview.1] +### Changes +- Fixed an issue when using Overflow Ellipsis mode where the Ellipsis character would not be displayed correctly when the preceding character is a sprite. +- Added the ability to define the Resource path for Style Sheets in the TMP Settings. +- TMP Style Sheets can now be assigned to text objects in the Extra Settings section of the text object inspector. +- Added the ability to assign a Style to text objects using the new Text Style property in the text object inspector. A new public property TMP_Text.textStyle was also added. +- Improved Style Sheet editor to allow sorting of styles in the style sheet. +- Improved handling of nested styles. +- Added public TMP_Style GetStyle(string name) to get the potential style by name. +- Revised the ForceMeshUpdate() function as follows: public void ForceMeshUpdate(bool ignoreActiveState = false, bool forceTextReparsing = false). +- Fixed SubMeshUI objects text disappearing when saving a scene. +- Creating Material Presets via the Material Context menu with multi selection will now work as expected and assign the newly created material preset to all selected text objects. +- Fixed minor issue when changing Material Preset in prefab isolation mode with multiple text objects selected where the new material preset would not be assigned to disabled text objects. +- Revised Character, Word, Line and Paragraph spacing adjustments to be in font units (em) where a value of 1 represents 1/100 em. +- Added TMP_Text.onFontAssetRequest and TMP_Text.onSpriteAssetRequest events to allow users to implement custom asset loading when using the <font="Font Asset Name"> and <sprite="Sprite Asset Name"> tags. +- Additional Shader Channels on the Canvas will be set to TexCoord1, Normal and Tangents or Mixed when using TMP Surface Shaders. Otherwise it will be set to TexCoord1 only. Case #1100696 +- Added new attribute to the <mark> tag to allow users to define a padding value for the mark / highlight region. Example: <mark color=#FFFF0080 padding="1.0,1.0,0.0,0.0"> where padding="Left, Right, Top, Bottom". +- Fixed an issue which could result in out of range exception when referencing sprites contained in fallback sprite assets using unicode values. +- Fixed an issue in the Font Asset Creator where the source font file property of the newly created font asset was not getting set. +- Added .blend files to exclusion asset scan list of the Project GUID Remapping tool. +- Fixed issue where Caret position would be incorrect when using IME. Case #1146626 +- Clamped Outline Softness to a value of 0-1 in the TMP Distance Field shader which makes it consistent with other SDF Shaders. Case #1136161 +- Text Auto-Sizing Min and Max values are now clamped between 0 and 32767. Case #1067717 +- Text Font Size Min and Max values are now clamped between 0 and 32767. Case #1164407 +- Rich Text Tag values are now limited to a maximum value of 32767. +- Added Placeholder option to TMP Dropdown. Placeholder text is displayed when selection value is -1. Also added example scene in the TMP Examples & Extras. +- Added the ability to define Face Info metrics per Sprite Assets. This will provide for more consistent scaling of the sprites regardless of the font asset used. Sprite Assets with undefined Face Info will continue to inherit the Face Info metrics of the current font asset. +- Added Update Sprite Asset option in the header of the Sprite Asset inspector. This increases the discoverability of this option already available via the Sprite Asset Context Menu. +- Revised the text auto-sizing handling in regards to maximum iteration threshold which could result in a crash on some Android devices. Case #1141328 +- Font Asset Generation Settings are now disabled in the inspector if the Source Font File is missing or if the Atlas Population Mode is set to static. +- Fixed vertical alignment issue when using Overflow Page mode. +- Improved handling of text auto-size line adjustment spacing resulting in fewer iterations and more accurate resulting point size. +- Added support for Layout Elements to the TMP Input Field. += Fixed text alignment issue with TMP Input Field when using Center alignment on the underlying text component. +- Setting ContentType.Custom on the TMP Input Field will no longer hide the Soft Keyboard. The Soft Keyboard can now be control independently via the shouldHideSoftKeyboard property. +- Added new Font Asset Context Menu option "Force Upgrade To Version 1.1.0" for convenience purposes in case a font asset didn't get upgraded automatically when migrating from version 1.3.0 to 1.4.x or 2.0.x. +- The <gradient> tag now as an optional attribute "tint=0" or "tint=1" controlling whether or not the gradient will be affect by vertex color. The alpha of the gradient will continue to be affected by the vertex color alpha. +- Added new angle=x attribute to the <i> tag where the value of x define the italic slant angle. +- Since the legacy TextContainer used by TMP has been deprecated, it was removed from the Layout Context Menu options. +- Improved character positioning when using italic text where large angle / slant would potentially result in uneven spacing between normal and italic blocks of text. +- Fixed an issue where <mspace> and <cspace> tags would not be handled correctly in conjunction with word wrapping. +- Fixed issue in the TMP_Dropdown.cs that was affecting navigation. Case 1162600. See https://forum.unity.com/threads/huge-bug-missing-a-code-line-since-1-4-0.693421/ +- Fixed an issue related to kerning where the glyph adjustment values did not account for the upsampling of the legacy SDF modes like SDF8 / SDF16 and SDF32. +- Made the TMP_Text.text property virtual. +- Fixed Material Preset of fallback materials getting modified when the TMP Settings Match Material Preset option is disabled. +- Added ShaderUtilities.ID_GlowInner to list of material property IDs. +- Fixed potential null reference exception when creating new text objects when no default font asset has been assigned in the TMP Settings and the LiberationSans SDF font asset has been deleted from the project. Case #1161120 +- Fixed import TMP Essential Resources button being disabled when importing the TMP Examples & Extras first. Case #1163979 +- Fixed potential ArgumentOutOfRangeException when Hide Mobile Input is enabled and deleting the last character in the text. Case #1162514 +- Improved handling of manual addition of glyph positional adjustment pairs for both dynamic and static font assets. Case #1165763 +- Fixed issue where text in the TMP_InputField would disappear due to incorrect culling. Case #1164096 +- Fixed potential IndexOutOfRangeException that could be thrown when using the Pinyin IME interface and typing very fast to enter Chinese text. Case #1164383 +- Added support for Vertical Tab \v which inserts a line break but not a paragraph break. +- Added support for Shift Enter in the TMP Input Field which inserts a Vertical Tab in the text in Multi Line mode. +- Fixed text horizontal alignment when lines of text only contain the Ellipsis \u2026 Unicode character. Case #1162685 +- Text alignment is now serialized into separate fields for horizontal and vertical alignment and can now be get / set independently via TMP_Text.horizontalAlignment and TMP_Text.verticalAlignment. The TMP_Text.alignment property remains and uses the new serialized fields for horizontal and vertical alignment. +- Improved handling of Soft Hyphens when using Text Auto-Size. +- Fixed Null character being passed to Validate method of the TMP_InputField. Case #1172102 +- Fixed an issue where the Preferred Width and Height were not correct when using Tabs. +- The Cull Transparent Mesh flag on TMP_SubMeshUI objects will now mirror the settings on the parent text object's CanvasRenderer. +- Updated Sprite Importer to improve compatibility with Texture Packer Json Array export format. +- Newly created StyleSheets will be pinged in the project tab. Case #1182117 +- Added new option in the TMP Settings to control line breaking rules for Hangul to enabled Modern line breaking or traditional line breaking. +- Fixed potential issue related to SDF Scaling when the scale of the text object is negative. See https://forum.unity.com/threads/version-1-4-1-preview-1-with-dynamic-sdf-for-unity-2018-3-now-available.622420/page-5#post-4958240 for details. +- Added validation check for Sprite Data Source file in the Sprite Asset Importer. Case #1186620 +- Added warning when using Create - TextMeshPro - Sprite Asset menu when no valid texture is selected. Case #1163982 +- Fixed potential cosmetic issue in the text component inspector when using Overflow Linked mode. Case #1177640 + +## [1.4.1] - 2019-04-12 +### Changes +- Improved handling of font asset automatic upgrade to version 1.1.0 which is required to support the new Dynamic SDF system. +- Made release compatible with .Net 3.5 scripting runtime. + +## [1.4.0] - 2019-03-07 +### Changes +- Same release as 1.4.0-preview.3a. + +## [1.4.0-preview.3a] - 2019-02-28 +### Changes +- Improved performance of the Project Files GUID Remapping Tool. +- Fixed an issue with the TMP_FontAsset.TryAddCharacters() functions which was resulting in an error when added characters exceeded the capacity of the atlas texture. +- Updated TMP_FontAsset.TryAddCharacters functions to add new overloads returning list of characters that could not be added. +- Added function in OnEnable of FontAsset Editor's to clean up Fallback list to remove any null / empty entries. +- Added support for Stereo rendering to the TMP Distance Field and Mobile Distance Field shaders. + +## [1.4.0-preview.2a] - 2019-02-14 +### Changes +- Fixed an issue with SDF Scale handling where the text object would not render correctly after the object scale had been set to zero. +- Fixed an issue with the TMP_UpdateManager where text objects were not getting unregistered correctly. +- Any changes to Font Asset Creation Settings' padding, atlas width and / or atlas height will now result in all Material Presets for the given font asset to also be updated. +- Added new section in the TMP Settings related to the new Dynamic Font System. +- Added new property in the Dynamic Font System section to determine if OpenType Font Features will be retrieved from source font files at runtime as new characters are added to font assets. Glyph Adjustment Data (Kerning) is the only feature currently supported. +- Fix an issue where font assets created at runtime were not getting their asset version number set to "1.1.0". +- Improved parsing of the text file used in the Font Asset Creator and "Characters from File" option to handle UTF16 "\u" and UTF32 "\U" escape character sequences. +- Fixed a Null Reference Error (NRE) that could occur when using the <font> tag with an invalid font name followed by the <sprite> tag. +- The Glyph Adjustment Table presentation and internal data structure has been changed to facilitate the future addition of OpenType font features. See https://forum.unity.com/threads/version-1-4-0-preview-with-dynamic-sdf-for-unity-2018-3-now-available.622420/#post-4206595 for more details. +- Fixed an issue with the <rotate> tag incorrectly affecting character spacing. + +## [1.4.0-preview.1] - 2019-01-30 +### Changes +- Renamed TMPro_FontUtilities to TMP_FontAssetCommon to more accurately reflect the content of this file. +- Accessing the TextMesh Pro Settings via the new Edit - Settings menu when TMP Essential Resources have not yet been imported in the project will no longer open a new window to provide the options to import these resources. +- Fixed an issue where using int.MaxValue, int.MinValue, float.MaxValue and float.MinValue in conjunction with SetText() would display incorrect numerical values. Case #1078521. +- Added public setter to the TMP Settings' missingGlyphCharacter to allow changing which character will be used for missing characters via scripting. +- Fixed a potential Null Reference Exception related to loading the Default Style Sheet. +- Added compiler conditional to TMP_UpdateManager.cs to address changes to SRP. +- Improved the <margin> tag to make it possible to define both left and right margin values. Example: <margin left=10% right=10px>. +- Added new menu option to allow the quick creation of a UI Button using TMP. New menu option is located in Create - UI - Button (TextMeshPro). +- Renamed TMP related create menu options. +- Fixed TMP object creation handling when using Prefab isolation mode. Case #1077392 +- Fixed another issue related to Prefabs where some serialized properties of the text object would incorrectly show up in the Overrides prefab options. Case #1093101 +- Fixed issue where changing the Sorting Layer or Sorting Order of a object would not dirty the scene. Case #1069776 +- Fixed a text alignment issue when setting text alignment on disabled text objects. Case #1047771 +- Fixed an issue where text object bounds were not set correctly on newly created text objects or in some cases when setting the text to null or string.empty. Case #1093388 +- Fixed an issue in the IntToString() function that could result in Index Out Of Bounds error. Case #1102007 +- Changed the TMP_InputField IsValidChar function to protected virtual. +- The "Allow Rich Text Editing" property of the TMP_InputField is now set to false by default. +- Added new option to the Sprite Asset context menu to make it easier to update sprite glyphs edited via the Unity Sprite Editor. +- Added new Sharpness slider in the Debug section of the SDF Material inspector. +- Fixed an error that would occur when using the context menu Reset on text component. Case #1044726 +- Fixed issue where CharacterInfo.index would be incorrect as a result of using Surrogate Pairs in the text. Case #1037828 +- The TMP_EditorPanel and TMP_UiEditorPanel now have their "UseForChildren" flag set to true to enable user / custom inspectors to inherit from them. +- Fixed an issue where rich text tags using pixel (px) or font units (em) were not correctly accounting for orthographic camera mode. This change only affects the normal TMP text component. +- Fixed an inspector issue related to changes to the margin in the TMP Extra Settings panel. Case #1114253 +- Added new property to Glyph Adjustment Pairs which determines if Character Spacing Adjustments should affect the given pair. +- Updated the Glyph Adjustment Table where ID now represents the unicode (hex) value for the character instead of its decimal value. +- Added new SetValueWithoutNotify() function to TMP_DropDown and SetTextWithoutNotify() function to TMP_InputField allowing these to be set without triggering OnValueChanged event. +- Geometry buffer deallocation which normally takes place when current allocations exceed those of the new text by more than 256 characters will no longer occur if the new text is set to null or string.empty. +- Fixed a minor issue where the underline SDF scale would be incorrect when the underline text sequence contained normal size characters and ended with a subscript or superscript character. +- Fixed an error that would occur when using the Reset Context menu on a Material using the SDF Surface or Mobile SDF Surface Shaders. Case #1122279 +- Resolved a Null Reference Error that would appear when cycling through the text overflow modes. Case #1121624 + +## [1.3.0] - 2018-08-09 +### Changes +- Revamped UI to conform to Unity Human Interface Guidelines. +- Updated the title text on the Font Asset Creator window tab to "Font Asset Creator". +- Using TMP_Text.SetCharArray() with an empty char[] array will now clear the text. +- Made a small improvement to the TMP Input Field when using nested 2d RectMasks. +- Renamed symbol defines used by TMP to append TMP_ in front of the define to avoid potential conflicts with user defines. +- Improved the Project Files GUID Remapping tool to allow specifying a target folder to scan. +- Added the ability to cancel the scanning process used by the Project Files GUID Remapping tool. +- Moved TMP Settings to universal settings window in 2018.3 and above. +- Changing style sheet in the TMP Settings will now be reflected automatically on existing text objects in the editor. +- Added new function TMP_StyleSheet.UpdateStyleSheet() to update the internal reference to which style sheet text objects should be using in conjunction with the style tag. + +## [1.2.4] - 2018-06-10 +### Changes +- Fixed a minor issue when using Justified and Flush alignment in conjunction with \u00A0. +- The Font Asset creationSettings field is no longer an Editor only serialized field. + +## [1.2.3] - 2018-05-29 +### Changes +- Added new bitmap shader with support for Custom Font Atlas texture. This shader also includes a new property "Padding" to provide control over the geometry padding to closely fit a modified / custom font atlas texture. +- Fixed an issue with ForceMeshUpdate(bool ignoreActiveState) not being handled correctly. +- Cleaned up memory allocations from repeated use of the Font Asset Creator. +- Sprites are now scaled based on the current font instead of the primary font asset assigned to the text object. +- It is now possible to recall the most recent settings used when creating a font asset in the Font Asset Creator. +- Newly created font assets now contain the settings used when they were last created. This will make the process of updating / regenerating font assets much easier. +- New context menu "Update Font Asset" was added to the Font Asset inspector which will open the Font Asset Creator with the most recently used settings for that font asset. +- New Context Menu "Create Font Asset" was added to the Font inspector panel which will open the Font Asset Creator with this source font file already selected. +- Fixed 3 compiler warnings that would appear when using .Net 4.x. +- Modified the TMP Settings to place the Missing Glyph options in their own section. +- Renamed a symbol used for internal debugging to avoid potential conflicts with other user project defines. +- TMP Sprite Importer "Create Sprite Asset" and "Save Sprite Asset" options are disabled unless a Sprite Data Source, Import Format and Sprite Texture Atlas are provided. +- Improved the performance of the Project Files GUID Remapping tool. +- Users will now be prompted to import the TMP Essential Resources when using the Font Asset Creator if such resources have not already been imported. + +## [1.2.2] - 2018-03-28 +### Changes +- Calling SetAllDirty() on a TMP text component will now force a regeneration of the text object including re-parsing of the text. +- Fixed potential Null Reference Exception that could occur when assigning a new fallback font asset. +- Removed public from test classes. +- Fixed an issue where using nested links (which doesn't make sense conceptually) would result in an error. Should accidental use of nested links occurs, the last / most nested ends up being used. +- Fixed a potential text alignment issue where an hyphen at the end of a line followed by a new line containing a single word too long to fit the text container would result in miss alignment of the hyphen. +- Updated package license. +- Non-Breaking Space character (0xA0) will now be excluded from word spacing adjustments when using Justified or Flush text alignment. +- Improved handling of Underline, Strikethrough and Mark tag with regards to vertex color and Color tag alpha. +- Improved TMP_FontAsset.HasCharacter(char character, bool searchFallbacks) to include a recursive search of fallbacks as well as TMP Settings fallback list and default font asset. +- The <gradient> tag will now also apply to sprites provided the sprite tint attribute is set to a value of 1. Ex. <sprite="Sprite Asset" index=0 tint=1>. +- Updated Font Asset Creator Plugin to allow for cancellation of the font asset generation process. +- Added callback to support the Scriptable Render Pipeline (SRP) with the normal TextMeshPro component. +- Improved handling of some non-breaking space characters which should not be ignored at the end of a line. +- Sprite Asset fallbacks will now be searched when using the <sprite> tag and referencing a sprite by Unicode or by Name. +- Updated EmojiOne samples from https://www.emojione.com/ and added attribution. +- Removed the 32bit versions of the TMP Plugins used by the Font Asset Creator since the Unity Editor is now only available as 64bit. +- The isTextTruncated property is now serialized. +- Added new event handler to the TMP_TextEventHandler.cs script included in Example 12a to allow tracking of interactions with Sprites. + +## [1.2.1] - 2018-02-14 +### Changes +- Package is now backwards compatible with Unity 2018.1. +- Renamed Assembly Definitions (.asmdef) to new UPM package conventions. +- Added DisplayName for TMP UPM package. +- Revised Editor and Playmode tests to ignore / skip over the tests if the required resources are not present in the project. +- Revised implementation of Font Asset Creator progress bar to use Unity's EditorGUI.ProgressBar instead of custom texture. +- Fixed an issue where using the material tag in conjunction with fallback font assets was not handled correctly. +- Fixed an issue where changing the fontStyle property in conjunction with using alternative typefaces / font weights would not correctly trigger a regeneration of the text object. + +## [1.2.0] - 2018-01-23 +### Changes +- Package version # increased to 1.2.0 which is the first release for Unity 2018.2. + +## [1.1.0] - 2018-01-23 +### Changes +- Package version # increased to 1.1.0 which is the first release for Unity 2018.1. + +## [1.0.27] - 2018-01-16 +### Changes +- Fixed an issue where setting the TMP_InputField.text property to null would result in an error. +- Fixed issue with Raycast Target state not getting serialized properly when saving / reloading a scene. +- Changed reference to PrefabUtility.GetPrefabParent() to PrefabUtility.GetCorrespondingObjectFromSource() to reflect public API change in 2018.2 +- Option to import package essential resources will only be presented to users when accessing a TMP component or the TMP Settings file via the project menu. + +## [1.0.26] - 2018-01-10 +### Added +- Removed Tizen player references in the TMP_InputField as the Tizen player is no longer supported as of Unity 2018.1. + +## [1.0.25] - 2018-01-05 +### Added +- Fixed a minor issue with PreferredValues calculation in conjunction with using text auto-sizing. +- Improved Kerning handling where it is now possible to define positional adjustments for the first and second glyph in the pair. +- Renamed Kerning Info Table to Glyph Adjustment Table to better reflect the added functionality of this table. +- Added Search toolbar to the Glyph Adjustment Table. +- Fixed incorrect detection / handling of Asset Serialization mode in the Project Conversion Utility. +- Removed SelectionBase attribute from TMP components. +- Revised TMP Shaders to support the new UNITY_UI_CLIP_RECT shader keyword which can provide a performance improvement of up to 30% on some devices. +- Added TMP_PRESENT define as per the request of several third party asset publishers. + +## [1.0.23] - 2017-11-14 +### Added +- New menu option added to Import Examples and additional content like Font Assets, Materials Presets, etc for TextMesh Pro. This new menu option is located in "Window -> TextMeshPro -> Import Examples and Extra Content". +- New menu option added to Convert existing project files and assets created with either the Source Code or DLL only version of TextMesh Pro. Please be sure to backup your project before using this option. The new menu option is located in "Window -> TextMeshPro -> Project Files GUID Remapping Tool". +- Added Assembly Definitions for the TMP Runtime and Editor scripts. +- Added support for the UI DirtyLayoutCallback, DirtyVerticesCallback and DirtyMaterialCallback. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/CHANGELOG.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/CHANGELOG.md.meta new file mode 100644 index 0000000..edf5c32 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 22464cf7ab0243a6bf9c79851183b002 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Documentation~/TextMeshPro.md b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Documentation~/TextMeshPro.md new file mode 100644 index 0000000..8f8c092 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Documentation~/TextMeshPro.md @@ -0,0 +1,35 @@ +# **_TextMesh Pro User Guide_** + +#### **Overview** +This User Guide was designed to provide first time users of TextMesh Pro with a basic overview of the features and functionality of the tool. + +#### **Installation** +The TextMesh Pro UPM package is already included with the Unity Editor and as such does not require installation. TextMesh Pro "TMP" does however require adding resources to your project which are essential for using TextMesh Pro. + +To import the "*TMP Essential Resources*", please use the "*Window -> TextMeshPro -> Import TMP Essential Resources*" menu option. These resources will be added at the root of your project in the "*TextMesh Pro*" folder. + +The TextMesh Pro package also includes additional resources and examples that will make discovering and learning about TextMesh Pro's powerful features easier. It is strongly recommended that first time users import these additional resources. + +To import the "*TMP Examples & Extras*", please use the "*Window -> TextMeshPro -> Import TMP Examples & Extras*" menu option. These resources will also be added in the same "*TextMesh Pro*" folder inside your project. + + +#### **Quick Start** +There are two TextMesh Pro components available. The first TMP text component is of type <TextMeshPro> and designed to work with the MeshRenderer. This component is an ideal replacement for the legacy TextMesh component. + +To add a new <TextMeshPro> text object, go to: *GameObject->3D Object->TextMeshPro Text*. + +The second TMP text component is of type <TextMeshProUGUI> and designed to work with the CanvasRenderer and Canvas system. This component is an ideal replacement for the UI.Text component. + +To add a new <TextMeshProUGUI> text object, go to: *GameObject->UI->TextMeshPro Text*. + +You may also wish to watch this [Getting Started](https://youtu.be/olnxlo-Wri4) short video which covers this topic. + +We strongly recommend that you also watch the [Font Asset Creation](https://youtu.be/qzJNIGCFFtY) video as well as the [Working with Material Presets](https://youtu.be/d2MARbDNeaA) as these two topics is also key to working and getting the most out of TextMesh Pro. + +As mentionned in the Installation section of this guide, it is recommended that you import the "*TMP Examples & Extras*" and take the time to explore each of the examples as they provide a great overview of the functionality of the tool and the many text layout and [rich text tags](http://digitalnativestudios.com/textmeshpro/docs/rich-text/) available in TextMesh Pro. + +#### **Support & API Documentation** +Should you have questions or require assistance, please visit the [Unity UI & TextMesh Pro](https://forum.unity.com/forums/unity-ui-textmesh-pro.60/) section of the Unity forum as well as the [TextMesh Pro User Forum](http://digitalnativestudios.com/forum/index.php) where you will find additional information, [Video Tutorials](http://digitalnativestudios.com/forum/index.php?board=4.0) and [FAQ](http://digitalnativestudios.com/forum/index.php?topic=890.0). In the event you are unable to find the information you seek, always feel free to post on the [Unity UI & TextMesh Pro](https://forum.unity.com/forums/unity-ui-textmesh-pro.60/) section user forum. + +[Online Documentation](http://digitalnativestudios.com/textmeshpro/docs/) is also available on TextMesh Pro including Rich Text tags, Shaders, Scripting API and more. + diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Documentation~/TextMeshPro.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Documentation~/TextMeshPro.md.meta new file mode 100644 index 0000000..8c72f72 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Documentation~/TextMeshPro.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ca77d26d10b9455ca5a4b22c93be2a31 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources.meta new file mode 100644 index 0000000..7c07b00 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d1a0a27327b54c3bac52a08929c33f81 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos.meta new file mode 100644 index 0000000..f2596c7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e93ec7eb6de342aabd156833e253f838 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd new file mode 100644 index 0000000..93f5a2c Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta new file mode 100644 index 0000000..7bdb473 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Dropdown Icon.psd.meta @@ -0,0 +1,143 @@ +fileFormatVersion: 2 +guid: a7ec9e7ad8b847b7ae4510af83c5d868 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 7 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 1 + 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 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: -2 + maxTextureSize: 128 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: 1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + 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: 2 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: iPhone + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: 2 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 128 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 0 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + pSDRemoveMatte: 1 + pSDShowRemoveMatteOption: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd new file mode 100644 index 0000000..2fb1164 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta new file mode 100644 index 0000000..bd64ad7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Font Asset Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ee148e281f3c41c5b4ff5f8a5afe5a6c +timeCreated: 1463559213 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd new file mode 100644 index 0000000..f0360d3 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta new file mode 100644 index 0000000..eb2e1ce --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Input Field Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: 3ee40aa79cd242a5b53b0b0ca4f13f0f +timeCreated: 1457860876 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd new file mode 100644 index 0000000..7036296 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta new file mode 100644 index 0000000..a22cdf1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Sprite Asset Icon.psd.meta @@ -0,0 +1,57 @@ +fileFormatVersion: 2 +guid: ec7c645d93308c04d8840982af12101e +timeCreated: 1463559213 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd new file mode 100644 index 0000000..3cc4163 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta new file mode 100644 index 0000000..623993d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Gizmos/TMP - Text Component Icon.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 2fd6421f253b4ef1a19526541f9ffc0c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 128 + textureSettings: + filterMode: -1 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders.meta new file mode 100644 index 0000000..95efe2b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2da27f5fe80a3a549ac7331d9f52f5f0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_Properties.cginc b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_Properties.cginc new file mode 100644 index 0000000..2e96258 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_Properties.cginc @@ -0,0 +1,85 @@ +// UI Editable properties +uniform sampler2D _FaceTex; // Alpha : Signed Distance +uniform float _FaceUVSpeedX; +uniform float _FaceUVSpeedY; +uniform fixed4 _FaceColor; // RGBA : Color + Opacity +uniform float _FaceDilate; // v[ 0, 1] +uniform float _OutlineSoftness; // v[ 0, 1] + +uniform sampler2D _OutlineTex; // RGBA : Color + Opacity +uniform float _OutlineUVSpeedX; +uniform float _OutlineUVSpeedY; +uniform fixed4 _OutlineColor; // RGBA : Color + Opacity +uniform float _OutlineWidth; // v[ 0, 1] + +uniform float _Bevel; // v[ 0, 1] +uniform float _BevelOffset; // v[-1, 1] +uniform float _BevelWidth; // v[-1, 1] +uniform float _BevelClamp; // v[ 0, 1] +uniform float _BevelRoundness; // v[ 0, 1] + +uniform sampler2D _BumpMap; // Normal map +uniform float _BumpOutline; // v[ 0, 1] +uniform float _BumpFace; // v[ 0, 1] + +uniform samplerCUBE _Cube; // Cube / sphere map +uniform fixed4 _ReflectFaceColor; // RGB intensity +uniform fixed4 _ReflectOutlineColor; +//uniform float _EnvTiltX; // v[-1, 1] +//uniform float _EnvTiltY; // v[-1, 1] +uniform float3 _EnvMatrixRotation; +uniform float4x4 _EnvMatrix; + +uniform fixed4 _SpecularColor; // RGB intensity +uniform float _LightAngle; // v[ 0,Tau] +uniform float _SpecularPower; // v[ 0, 1] +uniform float _Reflectivity; // v[ 5, 15] +uniform float _Diffuse; // v[ 0, 1] +uniform float _Ambient; // v[ 0, 1] + +uniform fixed4 _UnderlayColor; // RGBA : Color + Opacity +uniform float _UnderlayOffsetX; // v[-1, 1] +uniform float _UnderlayOffsetY; // v[-1, 1] +uniform float _UnderlayDilate; // v[-1, 1] +uniform float _UnderlaySoftness; // v[ 0, 1] + +uniform fixed4 _GlowColor; // RGBA : Color + Intesity +uniform float _GlowOffset; // v[-1, 1] +uniform float _GlowOuter; // v[ 0, 1] +uniform float _GlowInner; // v[ 0, 1] +uniform float _GlowPower; // v[ 1, 1/(1+4*4)] + +// API Editable properties +uniform float _ShaderFlags; +uniform float _WeightNormal; +uniform float _WeightBold; + +uniform float _ScaleRatioA; +uniform float _ScaleRatioB; +uniform float _ScaleRatioC; + +uniform float _VertexOffsetX; +uniform float _VertexOffsetY; + +//uniform float _UseClipRect; +uniform float _MaskID; +uniform sampler2D _MaskTex; +uniform float4 _MaskCoord; +uniform float4 _ClipRect; // bottom left(x,y) : top right(z,w) +//uniform float _MaskWipeControl; +//uniform float _MaskEdgeSoftness; +//uniform fixed4 _MaskEdgeColor; +//uniform bool _MaskInverse; + +uniform float _MaskSoftnessX; +uniform float _MaskSoftnessY; + +// Font Atlas properties +uniform sampler2D _MainTex; +uniform float _TextureWidth; +uniform float _TextureHeight; +uniform float _GradientScale; +uniform float _ScaleX; +uniform float _ScaleY; +uniform float _PerspectiveFilter; +uniform float _Sharpness; diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_Properties.cginc.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_Properties.cginc.meta new file mode 100644 index 0000000..e6dcc0a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_Properties.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 3c6c403084eacec478a1129ce20061ea +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF Internal Editor.shader b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF Internal Editor.shader new file mode 100644 index 0000000..baf4501 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF Internal Editor.shader @@ -0,0 +1,75 @@ +// Simplified SDF shader: +// - No Shading Option (bevel / bump / env map) +// - No Glow Option +// - Softness is applied on both side of the outline + +Shader "Hidden/TMP/Internal/Editor/Distance Field SSD" { + + Properties{ + _FaceColor("Face Color", Color) = (1,1,1,1) + _FaceDilate("Face Dilate", Range(-1,1)) = 0 + + _OutlineColor("Outline Color", Color) = (0,0,0,1) + _OutlineWidth("Outline Thickness", Range(0,1)) = 0 + _OutlineSoftness("Outline Softness", Range(0,1)) = 0 + + _UnderlayColor("Border Color", Color) = (0,0,0,.5) + _UnderlayOffsetX("Border OffsetX", Range(-1,1)) = 0 + _UnderlayOffsetY("Border OffsetY", Range(-1,1)) = 0 + _UnderlayDilate("Border Dilate", Range(-1,1)) = 0 + _UnderlaySoftness("Border Softness", Range(0,1)) = 0 + + _WeightNormal("Weight Normal", float) = 0 + _WeightBold("Weight Bold", float) = .5 + + _ShaderFlags("Flags", float) = 0 + _ScaleRatioA("Scale RatioA", float) = 1 + _ScaleRatioB("Scale RatioB", float) = 1 + _ScaleRatioC("Scale RatioC", float) = 1 + + _MainTex("Font Atlas", 2D) = "white" {} + _TextureWidth("Texture Width", float) = 1024 + _TextureHeight("Texture Height", float) = 1024 + _GradientScale("Gradient Scale", float) = 1 + _ScaleX("Scale X", float) = 1 + _ScaleY("Scale Y", float) = 1 + _PerspectiveFilter("Perspective Correction", Range(0, 1)) = 0.875 + _Sharpness("Sharpness", Range(-1,1)) = 0 + + _VertexOffsetX("Vertex OffsetX", float) = 0 + _VertexOffsetY("Vertex OffsetY", float) = 0 + } + + SubShader + { + Tags + { + "ForceSupported" = "True" + } + + Lighting Off + Blend One OneMinusSrcAlpha + Cull Off + ZWrite Off + ZTest Always + + Pass + { + CGPROGRAM + #pragma vertex VertShader + #pragma fragment PixShader + #pragma shader_feature __ OUTLINE_ON + #pragma shader_feature __ UNDERLAY_ON UNDERLAY_INNER + + #include "UnityCG.cginc" + #include "UnityUI.cginc" + #include "TMP_Properties.cginc" + + #include "TMP_SDF_SSD.cginc" + + ENDCG + } + } + + CustomEditor "TMPro.EditorUtilities.TMP_SDFShaderGUI" +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF Internal Editor.shader.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF Internal Editor.shader.meta new file mode 100644 index 0000000..5ba708d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF Internal Editor.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 9c442dc870b456e48b615cd8add0e9ef +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF_SSD.cginc b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF_SSD.cginc new file mode 100644 index 0000000..0f587bd --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF_SSD.cginc @@ -0,0 +1,132 @@ +struct vertex_t +{ + float4 position : POSITION; + float3 normal : NORMAL; + float4 color : COLOR; + float2 texcoord0 : TEXCOORD0; + float2 texcoord1 : TEXCOORD1; +}; + +struct pixel_t +{ + float4 position : SV_POSITION; + float4 faceColor : COLOR; + float4 outlineColor : COLOR1; + float2 texcoord0 : TEXCOORD0; + float4 param : TEXCOORD1; // weight, scaleRatio + float2 clipUV : TEXCOORD2; + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 texcoord2 : TEXCOORD3; + float4 underlayColor : COLOR2; + #endif +}; + +sampler2D _GUIClipTexture; +uniform float4x4 unity_GUIClipTextureMatrix; +float4 _MainTex_TexelSize; + +float4 SRGBToLinear(float4 rgba) +{ + return float4(lerp(rgba.rgb / 12.92f, pow((rgba.rgb + 0.055f) / 1.055f, 2.4f), step(0.04045f, rgba.rgb)), rgba.a); +} + +pixel_t VertShader(vertex_t input) +{ + pixel_t output; + + float bold = step(input.texcoord1.y, 0); + + float4 vert = input.position; + vert.x += _VertexOffsetX; + vert.y += _VertexOffsetY; + + float4 vPosition = UnityObjectToClipPos(vert); + + float weight = lerp(_WeightNormal, _WeightBold, bold) / 4.0; + weight = (weight + _FaceDilate) * _ScaleRatioA * 0.5; + + // Generate UV for the Clip Texture + float3 eyePos = UnityObjectToViewPos(input.position); + float2 clipUV = mul(unity_GUIClipTextureMatrix, float4(eyePos.xy, 0, 1.0)); + + float4 color = input.color; + #if (FORCE_LINEAR && !UNITY_COLORSPACE_GAMMA) + color = SRGBToLinear(input.color); + #endif + + float opacity = color.a; + #if (UNDERLAY_ON | UNDERLAY_INNER) + opacity = 1.0; + #endif + + float4 faceColor = float4(color.rgb, opacity) * _FaceColor; + faceColor.rgb *= faceColor.a; + + float4 outlineColor = _OutlineColor; + outlineColor.a *= opacity; + outlineColor.rgb *= outlineColor.a; + + output.position = vPosition; + output.faceColor = faceColor; + output.outlineColor = outlineColor; + output.texcoord0 = float2(input.texcoord0.xy); + output.param = float4(0.5 - weight, 1.3333 * _GradientScale * (_Sharpness + 1) / _MainTex_TexelSize.z , _OutlineWidth * _ScaleRatioA * 0.5, 0); + output.clipUV = clipUV; + + #if (UNDERLAY_ON || UNDERLAY_INNER) + float4 underlayColor = _UnderlayColor; + underlayColor.rgb *= underlayColor.a; + + float x = -(_UnderlayOffsetX * _ScaleRatioC) * _GradientScale / _MainTex_TexelSize.z; + float y = -(_UnderlayOffsetY * _ScaleRatioC) * _GradientScale / _MainTex_TexelSize.w; + + output.texcoord2 = float4(input.texcoord0 + float2(x, y), input.color.a, 0); + output.underlayColor = underlayColor; + #endif + + return output; +} + +float4 PixShader(pixel_t input) : SV_Target +{ + float d = tex2D(_MainTex, input.texcoord0.xy).a; + + float2 UV = input.texcoord0.xy; + float scale = rsqrt(abs(ddx(UV.x) * ddy(UV.y) - ddy(UV.x) * ddx(UV.y))) * input.param.y; + + #if (UNDERLAY_ON | UNDERLAY_INNER) + float layerScale = scale; + layerScale /= 1 + ((_UnderlaySoftness * _ScaleRatioC) * layerScale); + float layerBias = input.param.x * layerScale - .5 - ((_UnderlayDilate * _ScaleRatioC) * .5 * layerScale); + #endif + + scale /= 1 + (_OutlineSoftness * _ScaleRatioA * scale); + + float4 faceColor = input.faceColor * saturate((d - input.param.x) * scale + 0.5); + + #ifdef OUTLINE_ON + float4 outlineColor = lerp(input.faceColor, input.outlineColor, sqrt(min(1.0, input.param.z * scale * 2))); + faceColor = lerp(outlineColor, input.faceColor, saturate((d - input.param.x - input.param.z) * scale + 0.5)); + faceColor *= saturate((d - input.param.x + input.param.z) * scale + 0.5); + #endif + + #if UNDERLAY_ON + d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; + faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * saturate(d - layerBias) * (1 - faceColor.a); + #endif + + #if UNDERLAY_INNER + float bias = input.param.x * scale - 0.5; + float sd = saturate(d * scale - bias - input.param.z); + d = tex2D(_MainTex, input.texcoord2.xy).a * layerScale; + faceColor += float4(_UnderlayColor.rgb * _UnderlayColor.a, _UnderlayColor.a) * (1 - saturate(d - layerBias)) * sd * (1 - faceColor.a); + #endif + + #if (UNDERLAY_ON | UNDERLAY_INNER) + faceColor *= input.texcoord2.z; + #endif + + faceColor *= tex2D(_GUIClipTexture, input.clipUV).a; + + return faceColor; +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF_SSD.cginc.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF_SSD.cginc.meta new file mode 100644 index 0000000..3d0b3bf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Shaders/TMP_SDF_SSD.cginc.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: abe6991365a27d341a10580f3b7c0f44 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures.meta new file mode 100644 index 0000000..d6754b0 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f8e6a2d47aba4c6c9b3c5a72d9f48da5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Dark.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Dark.psd new file mode 100644 index 0000000..8ebaa27 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Dark.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta new file mode 100644 index 0000000..ed7250a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Dark.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: fb5730e24283d0c489e5c7d0bee023d9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Light.psd new file mode 100644 index 0000000..e598e6d Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Light.psd.meta new file mode 100644 index 0000000..1e747b2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/SectionHeader_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: e3b0f810fdea84e40ab4ba20f256f7e8 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine.psd new file mode 100644 index 0000000..3da358a Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta new file mode 100644 index 0000000..09deb3c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 8bc445bb79654bf496c92d0407840a92 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd new file mode 100644 index 0000000..cf49b6c Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta new file mode 100644 index 0000000..78e14cb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBaseLine_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 18775b51e3bd42299fd30bd036ea982f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom.psd new file mode 100644 index 0000000..1f35779 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom.psd.meta new file mode 100644 index 0000000..8e79b48 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: ca51b19024094d1b87f3e07edb0a75fb +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom_Light.psd new file mode 100644 index 0000000..d8af55b Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta new file mode 100644 index 0000000..9c9a6fc --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignBottom_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 585b70cb75dd43efbfead809c30a1731 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine.psd new file mode 100644 index 0000000..7eefe6b Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta new file mode 100644 index 0000000..0455a2f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 0d9a36012a224080966c7b55896aa0f9 +timeCreated: 1467964791 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd new file mode 100644 index 0000000..f08bb6c Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta new file mode 100644 index 0000000..dfd05a1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCapLine_Light.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: 49679f302ac6408697f6b9314a38985c +timeCreated: 1467964413 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter.psd new file mode 100644 index 0000000..939bc6d Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter.psd.meta new file mode 100644 index 0000000..d189fc2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 81ed8c76d2bc4a4c95d092c98af4e58f +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo.psd new file mode 100644 index 0000000..f9ce9a8 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta new file mode 100644 index 0000000..555bb1b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo.psd.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: c76700ea0062413d9f69409b4e9e151b +timeCreated: 1484171296 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd new file mode 100644 index 0000000..e37b2e2 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta new file mode 100644 index 0000000..044d0c2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd.meta @@ -0,0 +1,56 @@ +fileFormatVersion: 2 +guid: 35ff0937876540d3bd4b6a941df62a92 +timeCreated: 1484171296 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter_Light.psd new file mode 100644 index 0000000..7274887 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta new file mode 100644 index 0000000..d98d377 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignCenter_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 6ace62d30f494c948b71d5594afce11d +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush.psd new file mode 100644 index 0000000..eeeea67 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush.psd.meta new file mode 100644 index 0000000..84ed28c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 691475c57a824010be0c6f474caeb7e1 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush_Light.psd new file mode 100644 index 0000000..b69f6a2 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta new file mode 100644 index 0000000..b9e6124 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignFlush_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 64b9fad609434c489c32b1cdf2004a1c +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified.psd new file mode 100644 index 0000000..3ce55c4 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified.psd.meta new file mode 100644 index 0000000..f8a90b4 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: 92027f7f8cfc4feaa477da0dc38d3d46 +timeCreated: 1472535271 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified_Light.psd new file mode 100644 index 0000000..d7fd5c8 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta new file mode 100644 index 0000000..e5b5aa8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignJustified_Light.psd.meta @@ -0,0 +1,59 @@ +fileFormatVersion: 2 +guid: fa6bd40a216346b783a4cce741d277a5 +timeCreated: 1472535778 +licenseType: Pro +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 7 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft.psd new file mode 100644 index 0000000..fc7e10b Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft.psd.meta new file mode 100644 index 0000000..8023379 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 9288066c33474b94b6ee5465f4df1cc0 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft_Light.psd new file mode 100644 index 0000000..5522c37 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta new file mode 100644 index 0000000..aaa8b81 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignLeft_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 12736c98af174f91827a26b66d2b01b9 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidLine.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidLine.psd new file mode 100644 index 0000000..14d28a2 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidLine.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta new file mode 100644 index 0000000..e481463 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidLine.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: c2f7f6a88b4c4f20a53deb72f3d9144c +timeCreated: 1426240649 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle.psd new file mode 100644 index 0000000..c4483db Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta new file mode 100644 index 0000000..d1ec528 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 41b96614b2e6494ba995ddcd252d11ae +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd new file mode 100644 index 0000000..4263bf9 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta new file mode 100644 index 0000000..7cda20b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMiddle_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 066619c9c9c84f89acb1b48c11a7efe2 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidline_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidline_Light.psd new file mode 100644 index 0000000..a5bed37 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidline_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta new file mode 100644 index 0000000..6fabec5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignMidline_Light.psd.meta @@ -0,0 +1,58 @@ +fileFormatVersion: 2 +guid: bb42b2d967d6427983c901a4ffc8ecd9 +timeCreated: 1426240650 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + allowsAlphaSplitting: 0 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight.psd new file mode 100644 index 0000000..4ef1998 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight.psd.meta new file mode 100644 index 0000000..cf5c764 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 342a0f8aca7f4f0691338912faec0494 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight_Light.psd new file mode 100644 index 0000000..bdeff41 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta new file mode 100644 index 0000000..dab7997 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignRight_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: e05ace3bd15740cda0bad60d89092a5b +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop.psd new file mode 100644 index 0000000..b00d458 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop.psd.meta new file mode 100644 index 0000000..74931bf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: 48d034c499ee4697af9dd6e327110249 +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop_Light.psd b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop_Light.psd new file mode 100644 index 0000000..84f0e61 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop_Light.psd differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta new file mode 100644 index 0000000..bbd509d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Editor Resources/Textures/btn_AlignTop_Light.psd.meta @@ -0,0 +1,53 @@ +fileFormatVersion: 2 +guid: ed041e68439749a69d0efa0e3d896c2e +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 2 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + linearTexture: 1 + correctGamma: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: .25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 0 + cubemapConvolution: 0 + cubemapConvolutionSteps: 8 + cubemapConvolutionExponent: 1.5 + seamlessCubemap: 0 + textureFormat: -3 + maxTextureSize: 32 + textureSettings: + filterMode: 0 + aniso: 1 + mipBias: -1 + wrapMode: 1 + nPOTScale: 0 + lightmap: 0 + rGBM: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: .5, y: .5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaIsTransparency: 1 + textureType: 2 + buildTargetSettings: [] + spriteSheet: + sprites: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/LICENSE.md b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/LICENSE.md new file mode 100644 index 0000000..37d0615 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/LICENSE.md @@ -0,0 +1,5 @@ +TextMesh Pro copyright © 2014-2019 Unity Technologies ApS + +Licensed under the Unity Companion License for Unity-dependent projects--see [Unity Companion License](http://www.unity3d.com/legal/licenses/Unity_Companion_License). + +Unless expressly provided otherwise, the Software under this license is made available strictly on an “AS IS” BASIS WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED. Please review the license for details on these and other terms and conditions. \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/LICENSE.md.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/LICENSE.md.meta new file mode 100644 index 0000000..1df9555 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0d2d0f36e67d4518a07df76235e91f9a +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources.meta new file mode 100644 index 0000000..e8a96b8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5ec95f4d5b2d1f14e9ff8682562553f9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Essential Resources.unitypackage b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Essential Resources.unitypackage new file mode 100644 index 0000000..aa27eb5 Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Essential Resources.unitypackage differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Essential Resources.unitypackage.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Essential Resources.unitypackage.meta new file mode 100644 index 0000000..bc49ab3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Essential Resources.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ce4ff17ca867d2b48b5c8a4181611901 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Examples & Extras.unitypackage b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Examples & Extras.unitypackage new file mode 100644 index 0000000..ea3a62b Binary files /dev/null and b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Examples & Extras.unitypackage differ diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Examples & Extras.unitypackage.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Examples & Extras.unitypackage.meta new file mode 100644 index 0000000..aaf21f7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Package Resources/TMP Examples & Extras.unitypackage.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bc00e25696e4132499f56528d3fed2e3 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData.json b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData.json new file mode 100644 index 0000000..05c193e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData.json @@ -0,0 +1,654 @@ +{ + "assetRecords": [ + { + "referencedResource": "Blue to Purple - Vertical.asset", + "target": "guid: 1e643bbd7e13d46418da3774e72bef60", + "replacement": "guid: 479a66fa4b094512a62b0a8e553ad95a" + }, + { + "referencedResource": "Dark to Light Green - Vertical.asset", + "target": "guid: 90c9133b254e2184b8084dea4f392337", + "replacement": "guid: 4c86a3366cd840348ebe8dc438570ee4" + }, + { + "referencedResource": "Light to Dark Green - Vertical.asset", + "target": "guid: 33c745f0979f3984182a138bcc6e57ec", + "replacement": "guid: 5cf8ae092ca54931b443bec5148f3c59" + }, + { + "referencedResource": "Yellow to Orange - Vertical.asset", + "target": "guid: e002cb2a36d9e4a439a062867fa24e1e", + "replacement": "guid: 69a525efa7e6472eab268f6ea605f06e" + }, + { + "referencedResource": "Crate - Surface Shader Scene.mat", + "target": "guid: e177c46c2a091564d88df2c2ca9dcf97", + "replacement": "guid: e6b9b44320f4448d9d5e0ee634259966" + }, + { + "referencedResource": "Ground - Logo Scene.mat", + "target": "guid: 504ae362e57fc464b847f1e9fd0e4035", + "replacement": "guid: c719e38f25a9480abd2480ab621a2949" + }, + { + "referencedResource": "Ground - Surface Shader Scene.mat", + "target": "guid: 9ed9aa864ec2d7f4dad266b9534c6d85", + "replacement": "guid: aadd5a709a48466c887296bb5b1b8110" + }, + { + "referencedResource": "Small Crate_diffuse.mat", + "target": "guid: 92f161029a6d3c54a92d9d283352a135", + "replacement": "guid: 22262639920f43d6be32430e4e58350d" + }, + { + "referencedResource": "Text Popup.prefab", + "target": "guid: c879e892866c8db4f8930b25672233ac", + "replacement": "guid: b06f0e6c1dfa4356ac918da1bb32c603" + }, + { + "referencedResource": "TextMeshPro - Prefab 1.prefab", + "target": "guid: a6a60659abb4d9d4b934feebd3dcc952", + "replacement": "guid: a6e39ced0ea046bcb636c3f0b2e2a745" + }, + { + "referencedResource": "TextMeshPro - Prefab 2.prefab", + "target": "guid: 1b190e3e0ab4c8e4881656b9160c59c2", + "replacement": "guid: fdad9d952ae84cafb74c63f2e694d042" + }, + { + "referencedResource": "Anton SDF.asset", + "target": "guid: f76ef802b8b940c46a31f9027f2b0158", + "replacement": "guid: 8a89fa14b10d46a99122fd4f73fca9a2" + }, + { + "referencedResource": "Anton SDF - Drop Shadow.mat", + "target": "guid: 250a1a103b3b4914c9707e6a423446d6", + "replacement": "guid: 749b9069dc4742c5bfa5c74644049926" + }, + { + "referencedResource": "Anton SDF - Outline.mat", + "target": "guid: e077dc203e948b740859c1c0ca8b9691", + "replacement": "guid: a00013af81304728b2be1f4309ee2433" + }, + { + "referencedResource": "Bangers SDF.asset", + "target": "guid: 808aa8f1ab804104aa7d0c337a6c1481", + "replacement": "guid: 125cb55b44b24c4393181402bc6200e6" + }, + { + "referencedResource": "Bangers SDF - Drop Shadow.mat", + "target": "guid: c26f698d4eee19e4a8b8f42cd299bab5", + "replacement": "guid: f2dcf029949142e28b974630369c8b4e" + }, + { + "referencedResource": "Bangers SDF - Outline.mat", + "target": "guid: db7f2cfbf23d6d54ca4e74a9abd55326", + "replacement": "guid: f629c6e43dba4bf38cb74d8860150664" + }, + { + "referencedResource": "Bangers SDF Glow.mat", + "target": "guid: 7dd7006c58d8a3148a73aa211d8c13d0", + "replacement": "guid: d75b8f41e959450c84ac6e967084d3e1" + }, + { + "referencedResource": "Bangers SDF Logo.mat", + "target": "guid: 4fb51aa7001a2244395ddf6a15d37389", + "replacement": "guid: f4e195ac1e204eff960149d1cb34e18c" + }, + { + "referencedResource": "Electronic Highway Sign SDF.asset", + "target": "guid: 163292f6f226d954593d45b079f8aae0", + "replacement": "guid: dc36b3fdc14f47ebb36fd484a67e268a" + }, + { + "referencedResource": "LiberationSans SDF - Drop Shadow.mat", + "target": "guid: 33db60c37b63f08448ded4b385e74e38", + "replacement": "guid: e73a58f6e2794ae7b1b7e50b7fb811b0" + }, + { + "referencedResource": "LiberationSans SDF - Metalic Green.mat", + "target": "guid: 4f9843c79516ed1468b9b5a4f32e67e3", + "replacement": "guid: 8b29aaa3eec7468097ff07adfcf29ac9" + }, + { + "referencedResource": "LiberationSans SDF - Outline.mat", + "target": "guid: 83a1b0fe6c3dbac44b66f09c82e1d509", + "replacement": "guid: 79459efec17a4d00a321bdcc27bbc385" + }, + { + "referencedResource": "LiberationSans SDF - Overlay.mat", + "target": "guid: 55eb086ae18c76e4bb6cc7106d0dd6e2", + "replacement": "guid: 9ad269c99dcf42b7aedefd83dd5a7b9d" + }, + { + "referencedResource": "LiberationSans SDF - Soft Mask.mat", + "target": "guid: 74e06d99c1657fc4abd33f20685ea9ff", + "replacement": "guid: 42df1c7856584b6b8db9a509b6b10074" + }, + { + "referencedResource": "Oswald Bold SDF.asset", + "target": "guid: 09641b029dfa78843902b548a9de7553", + "replacement": "guid: 0161d805a3764c089bef00bfe00793f5" + }, + { + "referencedResource": "Roboto-Bold SDF.asset", + "target": "guid: d62a573c923f5cb47b8ff65261033b90", + "replacement": "guid: 5302535af1044152a457ed104f1f4b91" + }, + { + "referencedResource": "Roboto-Bold SDF - Drop Shadow.mat", + "target": "guid: 102e7c5c5e3b1f3468518cb166967d77", + "replacement": "guid: b246c4190f4e46ec9352fe15a7b09ce0" + }, + { + "referencedResource": "Roboto-Bold SDF - Surface.mat", + "target": "guid: e2da38ead8f8238449c54a1ef49e080f", + "replacement": "guid: e6b276ec991f467aa14ef1f3cc665993" + }, + { + "referencedResource": "DropCap Numbers.asset", + "target": "guid: c4fd2a959a50b584b92dedfefec1ffda", + "replacement": "guid: 14aa93acbb234d16aaef0e8b46814db6" + }, + { + "referencedResource": "Benchmark01.cs", + "target": "guid: c5fb1b5c24460f745be29cc0eb06a58c", + "replacement": "guid: f970ea55f9f84bf79b05dab180b8c125" + }, + { + "referencedResource": "Benchmark01_UGUI.cs", + "target": "guid: 5e6abf300e36c0a4eb43969c3f2172f8", + "replacement": "guid: 8ef7be1c625941f7ba8ed7cc71718c0d" + }, + { + "referencedResource": "Benchmark02.cs", + "target": "guid: 3467f4170568a484d8b57e2051a27363", + "replacement": "guid: e8538afcddc14efbb5d9e94b7ae50197" + }, + { + "referencedResource": "Benchmark03.cs", + "target": "guid: e6e9d20624a23da4c8b2b6fb7608bb9a", + "replacement": "guid: a73109742c8d47ac822895a473300c29" + }, + { + "referencedResource": "Benchmark04.cs", + "target": "guid: 481dd67bdedc3104ea2156ed49f3acd5", + "replacement": "guid: dc20866c0d5e413ab7559440e15333ae" + }, + { + "referencedResource": "CameraController.cs", + "target": "guid: a9f0e07aefca0cc459134ff9df622278", + "replacement": "guid: 2d687537154440a3913a9a3c7977978c" + }, + { + "referencedResource": "ChatController.cs", + "target": "guid: eba5a4db2591a5844aea5f6f3ad8548e", + "replacement": "guid: 53d91f98a2664f5cb9af11de72ac54ec" + }, + { + "referencedResource": "EnvMapAnimator.cs", + "target": "guid: 7e69f3f28c520ce4d9ab9964b2895b1a", + "replacement": "guid: a4b6f99e8bc54541bbd149b014ff441c" + }, + { + "referencedResource": "ObjectSpin.cs", + "target": "guid: 5e7872ff51989434dabf7807265ada3c", + "replacement": "guid: 4f19c7f94c794c5097d8bd11e39c750d" + }, + { + "referencedResource": "ShaderPropAnimator.cs", + "target": "guid: c56cf968fb6a5b6488e709242718845d", + "replacement": "guid: 2787a46a4dc848c1b4b7b9307b614bfd" + }, + { + "referencedResource": "SimpleScript.cs", + "target": "guid: c64808ff5137c9044a583750e5b0468a", + "replacement": "guid: 9eff140b25d64601aabc6ba32245d099" + }, + { + "referencedResource": "SkewTextExample.cs", + "target": "guid: 48d40dfeb33b717488f55ddbf676643a", + "replacement": "guid: d412675cfb3441efa3bf8dcd9b7624dc" + }, + { + "referencedResource": "TeleType.cs", + "target": "guid: 9094c5c777af3f14489e8947748e86e6", + "replacement": "guid: e32c266ee6204b21a427753cb0694c81" + }, + { + "referencedResource": "TextConsoleSimulator.cs", + "target": "guid: 45757dcc8f119454dac6365e8fd15e8b", + "replacement": "guid: 43bcd35a1c0c40ccb6d472893fe2093f" + }, + { + "referencedResource": "TextMeshProFloatingText.cs", + "target": "guid: dd0e4b969aa70504382a89d2f208ae6c", + "replacement": "guid: a4d4c76e63944cba8c7d00f56334b98c" + }, + { + "referencedResource": "TextMeshSpawner.cs", + "target": "guid: 385939aed18e82d41894437798c30ed8", + "replacement": "guid: 76c11bbcfddf44e0ba17d6c2751c8d84" + }, + { + "referencedResource": "TMP_ExampleScript_01.cs", + "target": "guid: 36bafabb5572c6347923b971425ab3be", + "replacement": "guid: 6f2c5b59b6874405865e2616e4ec276a" + }, + { + "referencedResource": "TMP_FrameRateCounter.cs", + "target": "guid: c0357609254b68d4881cab18f04dd4dc", + "replacement": "guid: 686ec78b56aa445795335fbadafcfaa4" + }, + { + "referencedResource": "TMP_TextEventCheck.cs", + "target": "guid: ba181bda76b7f6047ba2188e94bf0894", + "replacement": "guid: d736ce056cf444ca96e424f4d9c42b76" + }, + { + "referencedResource": "TMP_TextEventHandler.cs", + "target": "guid: 48a2fdbd95acd794caf78a85a0b6926a", + "replacement": "guid: 1312ae25639a4bae8e25ae223209cc50" + }, + { + "referencedResource": "TMP_TextInfoDebugTool.cs", + "target": "guid: 5eeee4467ee5b6a4884a1ec94812d93e", + "replacement": "guid: 21256c5b62f346f18640dad779911e20" + }, + { + "referencedResource": "TMP_TextSelector_A.cs", + "target": "guid: 68baf2864c88f4a43a50f16709de8717", + "replacement": "guid: 103e0a6a1d404693b9fb1a5173e0e979" + }, + { + "referencedResource": "TMP_TextSelector_B.cs", + "target": "guid: f499ff45b9a3d0840a0df48d01b2877b", + "replacement": "guid: a05dcd8be7ec4ccbb35c26219884aa37" + }, + { + "referencedResource": "TMP_UiFrameRateCounter.cs", + "target": "guid: dc33b7a34d20d5e4e8d54b6867ce81e3", + "replacement": "guid: 24b0dc2d1d494adbbec1f4db26b4cf83" + }, + { + "referencedResource": "TMPro_InstructionOverlay.cs", + "target": "guid: 53b866620ba77504eaf52cab7dbd95c9", + "replacement": "guid: c3c1afeda5e545e0b19add5373896d2e" + }, + { + "referencedResource": "VertexColorCycler.cs", + "target": "guid: c8d54cdd5913d4e4bb7b655d7d16835b", + "replacement": "guid: 91b8ba3d52e041fab2d0e0f169855539" + }, + { + "referencedResource": "VertexJitter.cs", + "target": "guid: e4769cb37968ea948a763a9a89f9e583", + "replacement": "guid: 2ed57967c52645d390a89dcf8f61ba73" + }, + { + "referencedResource": "VertexShakeA.cs", + "target": "guid: eaa12d191e718c945ac55da73fa469db", + "replacement": "guid: f7cfa58e417a46ea8889989684c2522e" + }, + { + "referencedResource": "VertexShakeB.cs", + "target": "guid: 32c83a5d3ba42b84aa26386eac47566b", + "replacement": "guid: e4e0d9ccee5f4950be8979268c9014e0" + }, + { + "referencedResource": "VertexZoom.cs", + "target": "guid: 5305493000edc7d4ea4302757dc19a99", + "replacement": "guid: 52ec835d14bd486f900952b77698b7eb" + }, + { + "referencedResource": "WarpTextExample.cs", + "target": "guid: f3eef864a10f51045a7530e2afe7c179", + "replacement": "guid: 790744c462254b7ba8038e6ed28b3db2" + }, + { + "referencedResource": "DropCap Numbers.psd", + "target": "guid: 28b41fef228d6814f90e541deaf9f262", + "replacement": "guid: fd09957580ac4326916010f1f260975b" + }, + { + "referencedResource": "Brushed Metal 3.jpg", + "target": "guid: c30270e41dccf9441ab56d94261bdcfa", + "replacement": "guid: f88677df267a41d6be1e7a6133e7d227" + }, + { + "referencedResource": "Engraved Wall.jpg", + "target": "guid: 93d6f74f2ef358e41989d4152b195f88", + "replacement": "guid: e0f91e6569da4934a48d85bf8d3063f0" + }, + { + "referencedResource": "Engraved Wall Normal.jpg", + "target": "guid: 1edd0950293e8664094053a041548c23", + "replacement": "guid: 20f91c93e7fb490f9496609c52ef3904" + }, + { + "referencedResource": "Floor Cement.jpg", + "target": "guid: ac5a0a5373b36e049bb7f98f88dbc244", + "replacement": "guid: 283f897e4925411ebbaa758b4cb13fc2" + }, + { + "referencedResource": "Floor Tiles 1 - diffuse.jpg", + "target": "guid: 7bbfb8818476e4641ba3e75f5225eb69", + "replacement": "guid: 85ac55597b97403c82fc6601a93cf241" + }, + { + "referencedResource": "Floor Tiles 1 - normal.jpg", + "target": "guid: e00d5a9a0944134448432ccacf221b95", + "replacement": "guid: c45cd05946364f32aba704f0853a975b" + }, + { + "referencedResource": "Fruit Jelly (B&W).jpg", + "target": "guid: 74d8c208a0193e14ca6916bea88a2c52", + "replacement": "guid: 1cdc5b506b1a4a33a53c30669ced1f51" + }, + { + "referencedResource": "Gradient Diagonal (Color).jpg", + "target": "guid: 2421a4955e71725448211e6bfbc7d7fb", + "replacement": "guid: 2ce5c55e85304b819a1826ecbc839aa5" + }, + { + "referencedResource": "Gradient Horizontal (Color).jpg", + "target": "guid: 0bbb43aff4f7811419ffceb1b16cf3d6", + "replacement": "guid: 6eb184de103d4b3f812b38561065192f" + }, + { + "referencedResource": "Gradient Vertical (Color).jpg", + "target": "guid: 3359915af07779e4e9a966df9eed764f", + "replacement": "guid: 03d0538de6e24c0f819bfc9ce084dfa9" + }, + { + "referencedResource": "Mask Zig-n-Zag.psd", + "target": "guid: 04eb87e72b3c1c648ba47a869ee00505", + "replacement": "guid: bb8dfcd263ad4eb383a33d74a720be6f" + }, + { + "referencedResource": "Sand Normal Map.jpg", + "target": "guid: 89e1b1c005d29cf4598ea861deb35a80", + "replacement": "guid: 8b8c8a10edf94ddc8cc4cc4fcd5696a9" + }, + { + "referencedResource": "Small Crate_diffuse.jpg", + "target": "guid: 64734c9bc6df32149a0c9cb0b18693e1", + "replacement": "guid: 602cb87b6a29443b8636370ea0751574" + }, + { + "referencedResource": "Small Crate_normal.jpg", + "target": "guid: 81b50d9cb6f3104448ec54c00a80101a", + "replacement": "guid: 8878a782f4334ecbbcf683b3ac780966" + }, + { + "referencedResource": "Stainless 03.png", + "target": "guid: 40d7f27f614cc1043a1f7e19074f461c", + "replacement": "guid: 83cb272f9ee046f6ab6636ca38af8db4" + }, + { + "referencedResource": "Text Overflow - Linked Text Image 1.png", + "target": "guid: 1fd8c568b1fcdbe43be65c1619cf3293", + "replacement": "guid: 4ccf43d26c4748c792174516f4a8fcef" + }, + { + "referencedResource": "Text Overflow - Linked Text UI Screenshot.png", + "target": "guid: 7983d2ec0427c114a916ae3c4769dc10", + "replacement": "guid: c76d18757a194d618355f05f815cb0a1" + }, + { + "referencedResource": "Wipe Pattern - Circle.psd", + "target": "guid: 6f5e9497d22a7a84193ec825e2eb41ac", + "replacement": "guid: 10c49fcd9c64421db7c0133e61e55f97" + }, + { + "referencedResource": "Wipe Pattern - Diagonal.psd", + "target": "guid: 8ee4d366b96418044aa9f94b3e2de645", + "replacement": "guid: ed5290d8df18488780e2996b9b882f01" + }, + { + "referencedResource": "Wipe Pattern - Radial Double.psd", + "target": "guid: 3e0e22da7c9570b498205179ef58ef38", + "replacement": "guid: 7631f4eff8f74ed38eb3eb9db17134e1" + }, + { + "referencedResource": "Wipe Pattern - Radial Quad.psd", + "target": "guid: 05ffd580f33f74644a6025ec196860af", + "replacement": "guid: 2b5e9ae96c5644d8bae932f8b4ca68a2" + }, + { + "referencedResource": "LiberationSans SDF.asset", + "target": "guid: 715b80e429c437e40867928a4e1fc975", + "replacement": "guid: 8f586378b4e144a9851e7b34d9b748ee" + }, + { + "referencedResource": "LineBreaking Following Characters.txt", + "target": "guid: 312ba5b9e90627940866e19549a788cf", + "replacement": "guid: fade42e8bc714b018fac513c043d323b" + }, + { + "referencedResource": "LineBreaking Leading Characters.txt", + "target": "guid: 8d713940fcbede142ae4a33ea0062b33", + "replacement": "guid: d82c1b31c7e74239bff1220585707d2b" + }, + { + "referencedResource": "TMP_Bitmap.shader", + "target": "guid: edfcf888cd11d9245b91d2883049a57e", + "replacement": "guid: 128e987d567d4e2c824d754223b3f3b0" + }, + { + "referencedResource": "TMP_Bitmap-Mobile.shader", + "target": "guid: d1cf17907700cb647aa3ea423ba38f2e", + "replacement": "guid: 1e3b057af24249748ff873be7fafee47" + }, + { + "referencedResource": "TMP_SDF.shader", + "target": "guid: dca26082f9cb439469295791d9f76fe5", + "replacement": "guid: 68e6db2ebdc24f95958faec2be5558d6" + }, + { + "referencedResource": "TMP_SDF Overlay.shader", + "target": "guid: 4a7755d6b5b67874f89c85f56f95fe97", + "replacement": "guid: dd89cf5b9246416f84610a006f916af7" + }, + { + "referencedResource": "TMP_SDF-Mobile.shader", + "target": "guid: cafd18099dfc0114896e0a8b277b81b6", + "replacement": "guid: fe393ace9b354375a9cb14cdbbc28be4" + }, + { + "referencedResource": "TMP_SDF-Mobile Masking.shader", + "target": "guid: afc255f7c2be52e41973a3d10a2e632d", + "replacement": "guid: bc1ede39bf3643ee8e493720e4259791" + }, + { + "referencedResource": "TMP_SDF-Mobile Overlay.shader", + "target": "guid: 9ecb3fe313cb5f7478141eba4a2d54ed", + "replacement": "guid: a02a7d8c237544f1962732b55a9aebf1" + }, + { + "referencedResource": "TMP_SDF-Surface.shader", + "target": "guid: 8e6b9842dbb1a5a4887378afab854e63", + "replacement": "guid: f7ada0af4f174f0694ca6a487b8f543d" + }, + { + "referencedResource": "TMP_SDF-Surface-Mobile.shader", + "target": "guid: 3c2ea7753c1425145a74d106ec1cd852", + "replacement": "guid: 85187c2149c549c5b33f0cdb02836b17" + }, + { + "referencedResource": "TMP_Sprite.shader", + "target": "guid: 3a1c68c8292caf046bd21158886c5e40", + "replacement": "guid: cf81c85f95fe47e1a27f6ae460cf182c" + }, + { + "referencedResource": "Default Sprite Asset.asset", + "target": "guid: 273ca6c80b4b5d746b5e548f532bffd8", + "replacement": "guid: fbef3c704dce48f08a44612d6c856c8d" + }, + { + "referencedResource": "EmojiOne.asset", + "target": "guid: 9a952e2781ef26940ae089f1053ef4ef", + "replacement": "guid: c41005c129ba4d66911b75229fd70b45" + }, + { + "referencedResource": "TMP Default Style Sheet.asset", + "target": "guid: 54d1085f9a2fdea4587fcfc7dddcd4bc", + "replacement": "guid: f952c082cb03451daed3ee968ac6c63e" + }, + { + "referencedResource": "TMP Settings.asset", + "target": "guid: 69ed5bac41eebaa4c97e9d2a4168c54f", + "replacement": "guid: 3f5b5dff67a942289a9defa416b206f3" + }, + { + "referencedResource": "TextContainer.cs", + "target": "guid: 3b34fc186f40e8043b977d4fa70db8c5", + "replacement": "guid: 32d40088a6124c578ad6b428df586e2e" + }, + { + "referencedResource": "TextContainer.cs", + "target": "fileID: 311004786, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 32d40088a6124c578ad6b428df586e2e" + }, + { + "referencedResource": "TextMeshPro.cs", + "target": "guid: 1a1578b9753d2604f98d608cb4239e2f", + "replacement": "guid: 9541d86e2fd84c1d9990edf0852d74ab" + }, + { + "referencedResource": "TextMeshPro.cs", + "target": "fileID: -806885394, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 9541d86e2fd84c1d9990edf0852d74ab" + }, + { + "referencedResource": "TextMeshProUGUI.cs", + "target": "guid: 496f2e385b0c62542b5c739ccfafd8da", + "replacement": "guid: f4688fdb7df04437aeb418b961361dc5" + }, + { + "referencedResource": "TextMeshProUGUI.cs", + "target": "fileID: 1453722849, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5" + }, + { + "referencedResource": "TMP_Asset.cs", + "target": "guid: e2c4405608b405a4680436e183e53c45", + "replacement": "guid: 3bda1886f58f4e0ab1139400b160c3ee" + }, + { + "referencedResource": "TMP_Asset.cs", + "target": "fileID: -659140726, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 3bda1886f58f4e0ab1139400b160c3ee" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "guid: e90e18dd4a044ff4394833216e6bf4d2", + "replacement": "guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "fileID: 2108210716, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_Dropdown.cs", + "target": "guid: 44cb1d34ddab9d449a05fc3747876be1", + "replacement": "guid: 7b743370ac3e4ec2a1668f5455a8ef8a" + }, + { + "referencedResource": "TMP_Dropdown.cs", + "target": "fileID: 1148083418, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 7b743370ac3e4ec2a1668f5455a8ef8a" + }, + { + "referencedResource": "TMP_FontAsset.cs", + "target": "guid: 74dfce233ddb29b4294c3e23c1d3650d", + "replacement": "guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "TMP_FontAsset.cs", + "target": "fileID: -667331979, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "TMP_InputField.cs", + "target": "guid: 7b85855a3deaa2e44ac6741a6bbc85f6", + "replacement": "guid: 2da0c512f12947e489f739169773d7ca" + }, + { + "referencedResource": "TMP_InputField.cs", + "target": "fileID: -1620774994, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "guid: aafc3c7b9e915d64e8ec3d2c88b3a231", + "replacement": "guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "fileID: -395462249, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "guid: 90940d439ca0ef746af0b48419b92d2e", + "replacement": "guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "fileID: 2019389346, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "guid: 13259b4ce497b194eb52a33d8eda0bdc", + "replacement": "guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "fileID: -1936749209, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP_SubMesh.cs", + "target": "guid: bd950677b2d06c74494b1c1118584fff", + "replacement": "guid: 07994bfe8b0e4adb97d706de5dea48d5" + }, + { + "referencedResource": "TMP_SubMesh.cs", + "target": "fileID: 1330537494, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 07994bfe8b0e4adb97d706de5dea48d5" + }, + { + "referencedResource": "TMP_SubMeshUI.cs", + "target": "guid: a5378e1f14d974d419f811d6b0861f20", + "replacement": "guid: 058cba836c1846c3aa1c5fd2e28aea77" + }, + { + "referencedResource": "TMP_SubMeshUI.cs", + "target": "fileID: 1908110080, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 058cba836c1846c3aa1c5fd2e28aea77" + }, + { + "referencedResource": "TMP_Text.cs", + "target": "guid: 9ec8dc9c3fa2e5d41b939b5888d2f1e8", + "replacement": "guid: 5143f58107604835ab1a5efa2d8818fd" + }, + { + "referencedResource": "TMP_Text.cs", + "target": "fileID: -1385168320, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 5143f58107604835ab1a5efa2d8818fd" + }, + { + "referencedResource": "Default Sprite Asset.png", + "target": "guid: 5b32c2d36abe44540bed74c1f787033b", + "replacement": "guid: a0fc465d6cf04254a2938578735e2383" + }, + { + "referencedResource": "EmojiOne.png", + "target": "guid: 6ec706981a919c3489f0b061a40054e2", + "replacement": "guid: dffef66376be4fa480fb02b19edbe903" + } + ] +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData.json.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData.json.meta new file mode 100644 index 0000000..a7a2790 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 05f5bfd584002f948982a1498890f9a9 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData_Assets.json b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData_Assets.json new file mode 100644 index 0000000..f07aa23 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData_Assets.json @@ -0,0 +1,184 @@ +{ + "assetRecords": [ + { + "referencedResource": "TMP_FontAsset.cs", + "target": "guid: 74dfce233ddb29b4294c3e23c1d3650d", + "replacement": "guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "TMP_FontAsset.cs", + "target": "fileID: -667331979, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 71c1514a6bd24e1e882cebbe1904ce04" + }, + { + "referencedResource": "Anton SDF.asset", + "target": "guid: f76ef802b8b940c46a31f9027f2b0158", + "replacement": "guid: 8a89fa14b10d46a99122fd4f73fca9a2" + }, + { + "referencedResource": "Bangers SDF.asset", + "target": "guid: 808aa8f1ab804104aa7d0c337a6c1481", + "replacement": "guid: 125cb55b44b24c4393181402bc6200e6" + }, + { + "referencedResource": "Electronic Highway Sign SDF.asset", + "target": "guid: 163292f6f226d954593d45b079f8aae0", + "replacement": "guid: dc36b3fdc14f47ebb36fd484a67e268a" + }, + { + "referencedResource": "Oswald Bold SDF.asset", + "target": "guid: 09641b029dfa78843902b548a9de7553", + "replacement": "guid: 0161d805a3764c089bef00bfe00793f5" + }, + { + "referencedResource": "Roboto-Bold SDF.asset", + "target": "guid: d62a573c923f5cb47b8ff65261033b90", + "replacement": "guid: 5302535af1044152a457ed104f1f4b91" + }, + { + "referencedResource": "LiberationSans SDF.asset", + "target": "guid: 715b80e429c437e40867928a4e1fc975", + "replacement": "guid: 8f586378b4e144a9851e7b34d9b748ee" + }, + { + "referencedResource": "TMP_Bitmap.shader", + "target": "guid: edfcf888cd11d9245b91d2883049a57e", + "replacement": "guid: 128e987d567d4e2c824d754223b3f3b0" + }, + { + "referencedResource": "TMP_Bitmap-Mobile.shader", + "target": "guid: d1cf17907700cb647aa3ea423ba38f2e", + "replacement": "guid: 1e3b057af24249748ff873be7fafee47" + }, + { + "referencedResource": "TMP_SDF.shader", + "target": "guid: dca26082f9cb439469295791d9f76fe5", + "replacement": "guid: 68e6db2ebdc24f95958faec2be5558d6" + }, + { + "referencedResource": "TMP_SDF Overlay.shader", + "target": "guid: 4a7755d6b5b67874f89c85f56f95fe97", + "replacement": "guid: dd89cf5b9246416f84610a006f916af7" + }, + { + "referencedResource": "TMP_SDF-Mobile.shader", + "target": "guid: cafd18099dfc0114896e0a8b277b81b6", + "replacement": "guid: fe393ace9b354375a9cb14cdbbc28be4" + }, + { + "referencedResource": "TMP_SDF-Mobile Masking.shader", + "target": "guid: afc255f7c2be52e41973a3d10a2e632d", + "replacement": "guid: bc1ede39bf3643ee8e493720e4259791" + }, + { + "referencedResource": "TMP_SDF-Mobile Overlay.shader", + "target": "guid: 9ecb3fe313cb5f7478141eba4a2d54ed", + "replacement": "guid: a02a7d8c237544f1962732b55a9aebf1" + }, + { + "referencedResource": "TMP_SDF-Surface.shader", + "target": "guid: 8e6b9842dbb1a5a4887378afab854e63", + "replacement": "guid: f7ada0af4f174f0694ca6a487b8f543d" + }, + { + "referencedResource": "TMP_SDF-Surface-Mobile.shader", + "target": "guid: 3c2ea7753c1425145a74d106ec1cd852", + "replacement": "guid: 85187c2149c549c5b33f0cdb02836b17" + }, + { + "referencedResource": "TMP_Sprite.shader", + "target": "guid: 3a1c68c8292caf046bd21158886c5e40", + "replacement": "guid: cf81c85f95fe47e1a27f6ae460cf182c" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "guid: e90e18dd4a044ff4394833216e6bf4d2", + "replacement": "guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_ColorGradient.cs", + "target": "fileID: 2108210716, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 54d21f6ece3b46479f0c328f8c6007e0" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "guid: aafc3c7b9e915d64e8ec3d2c88b3a231", + "replacement": "guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP_Settings.cs", + "target": "fileID: -395462249, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 2705215ac5b84b70bacc50632be6e391" + }, + { + "referencedResource": "TMP Settings.asset", + "target": "guid: 69ed5bac41eebaa4c97e9d2a4168c54f", + "replacement": "guid: 3f5b5dff67a942289a9defa416b206f3" + }, + { + "referencedResource": "LineBreaking Following Characters.txt", + "target": "guid: 312ba5b9e90627940866e19549a788cf", + "replacement": "guid: fade42e8bc714b018fac513c043d323b" + }, + { + "referencedResource": "LineBreaking Leading Characters.txt", + "target": "guid: 8d713940fcbede142ae4a33ea0062b33", + "replacement": "guid: d82c1b31c7e74239bff1220585707d2b" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "guid: 13259b4ce497b194eb52a33d8eda0bdc", + "replacement": "guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP_StyleSheet.cs", + "target": "fileID: -1936749209, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: ab2114bdc8544297b417dfefe9f1e410" + }, + { + "referencedResource": "TMP Default Style Sheet.asset", + "target": "guid: 54d1085f9a2fdea4587fcfc7dddcd4bc", + "replacement": "guid: f952c082cb03451daed3ee968ac6c63e" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "guid: 90940d439ca0ef746af0b48419b92d2e", + "replacement": "guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "TMP_SpriteAsset.cs", + "target": "fileID: 2019389346, guid: 89f0137620f6af44b9ba852b4190e64e", + "replacement": "fileID: 11500000, guid: 84a92b25f83d49b9bc132d206b370281" + }, + { + "referencedResource": "Default Sprite Asset.asset", + "target": "guid: 273ca6c80b4b5d746b5e548f532bffd8", + "replacement": "guid: fbef3c704dce48f08a44612d6c856c8d" + }, + { + "referencedResource": "Default Sprite Asset.png", + "target": "guid: 5b32c2d36abe44540bed74c1f787033b", + "replacement": "guid: a0fc465d6cf04254a2938578735e2383" + }, + { + "referencedResource": "EmojiOne.asset", + "target": "guid: 9a952e2781ef26940ae089f1053ef4ef", + "replacement": "guid: c41005c129ba4d66911b75229fd70b45" + }, + { + "referencedResource": "EmojiOne.png", + "target": "guid: 6ec706981a919c3489f0b061a40054e2", + "replacement": "guid: dffef66376be4fa480fb02b19edbe903" + }, + { + "referencedResource": "DropCap Numbers.asset", + "target": "guid: c4fd2a959a50b584b92dedfefec1ffda", + "replacement": "guid: 14aa93acbb234d16aaef0e8b46814db6" + }, + { + "referencedResource": "DropCap Numbers.psd", + "target": "guid: 28b41fef228d6814f90e541deaf9f262", + "replacement": "guid: fd09957580ac4326916010f1f260975b" + } + ] +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData_Assets.json.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData_Assets.json.meta new file mode 100644 index 0000000..f534ac1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/PackageConversionData_Assets.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e0afa652c0031c48896a97b424d027b +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts.meta new file mode 100644 index 0000000..3c2e4cf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6a1d1e3d2384453a7371b4a07a41ca4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor.meta new file mode 100644 index 0000000..af509a3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b5d6c28ed7b94775be9e2560f300247c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/DropdownOptionListDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/DropdownOptionListDrawer.cs new file mode 100644 index 0000000..2b7dc85 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/DropdownOptionListDrawer.cs @@ -0,0 +1,60 @@ +using UnityEditorInternal; +using UnityEngine; +using UnityEngine.UI; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + [CustomPropertyDrawer(typeof(TMP_Dropdown.OptionDataList), true)] + class DropdownOptionListDrawer : PropertyDrawer + { + private ReorderableList m_ReorderableList; + + private void Init(SerializedProperty property) + { + if (m_ReorderableList != null) + return; + + SerializedProperty array = property.FindPropertyRelative("m_Options"); + + m_ReorderableList = new ReorderableList(property.serializedObject, array); + m_ReorderableList.drawElementCallback = DrawOptionData; + m_ReorderableList.drawHeaderCallback = DrawHeader; + m_ReorderableList.elementHeight += 16; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + Init(property); + + m_ReorderableList.DoList(position); + } + + private void DrawHeader(Rect rect) + { + GUI.Label(rect, "Options"); + } + + private void DrawOptionData(Rect rect, int index, bool isActive, bool isFocused) + { + SerializedProperty itemData = m_ReorderableList.serializedProperty.GetArrayElementAtIndex(index); + SerializedProperty itemText = itemData.FindPropertyRelative("m_Text"); + SerializedProperty itemImage = itemData.FindPropertyRelative("m_Image"); + + RectOffset offset = new RectOffset(0, 0, -1, -3); + rect = offset.Add(rect); + rect.height = EditorGUIUtility.singleLineHeight; + + EditorGUI.PropertyField(rect, itemText, GUIContent.none); + rect.y += EditorGUIUtility.singleLineHeight; + EditorGUI.PropertyField(rect, itemImage, GUIContent.none); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + Init(property); + + return m_ReorderableList.GetHeight(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta new file mode 100644 index 0000000..f7f4c56 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/DropdownOptionListDrawer.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 9545c9eb3bf94265810463794fec8334 +timeCreated: 1464818008 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphInfoDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphInfoDrawer.cs new file mode 100644 index 0000000..0936dc7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphInfoDrawer.cs @@ -0,0 +1,61 @@ +/* +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_Glyph))] + public class GlyphInfoDrawer : PropertyDrawer + { + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_id = property.FindPropertyRelative("id"); + SerializedProperty prop_x = property.FindPropertyRelative("x"); + SerializedProperty prop_y = property.FindPropertyRelative("y"); + SerializedProperty prop_width = property.FindPropertyRelative("width"); + SerializedProperty prop_height = property.FindPropertyRelative("height"); + SerializedProperty prop_xOffset = property.FindPropertyRelative("xOffset"); + SerializedProperty prop_yOffset = property.FindPropertyRelative("yOffset"); + SerializedProperty prop_xAdvance = property.FindPropertyRelative("xAdvance"); + SerializedProperty prop_scale = property.FindPropertyRelative("scale"); + + + // We get Rect since a valid position may not be provided by the caller. + Rect rect = GUILayoutUtility.GetRect(position.width, 48); + rect.y -= 15; + + //GUI.enabled = false; + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 45f; + + bool prevGuiState = GUI.enabled; + GUI.enabled = true; + EditorGUI.LabelField(new Rect(rect.x + 5f, rect.y, 80f, 18), new GUIContent("Ascii: " + prop_id.intValue + ""), TMP_UIStyleManager.label); + EditorGUI.LabelField(new Rect(rect.x + 90f, rect.y, 80f, 18), new GUIContent("Hex: " + prop_id.intValue.ToString("X") + ""), TMP_UIStyleManager.label); + EditorGUI.LabelField(new Rect(rect.x + 170f, rect.y, 80, 18), "Char: [ " + (char)prop_id.intValue + " ]", TMP_UIStyleManager.label); + GUI.enabled = prevGuiState; + + EditorGUIUtility.labelWidth = 35f; + EditorGUIUtility.fieldWidth = 10f; + + float width = (rect.width - 5f) / 4; + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 22, width - 5f, 18), prop_x, new GUIContent("X:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 22, width - 5f, 18), prop_y, new GUIContent("Y:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 22, width - 5f, 18), prop_width, new GUIContent("W:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 22, width - 5f, 18), prop_height, new GUIContent("H:")); + + //GUI.enabled = true; + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 0, rect.y + 44, width - 5f, 18), prop_xOffset, new GUIContent("OX:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 1, rect.y + 44, width - 5f, 18), prop_yOffset, new GUIContent("OY:")); + //GUI.enabled = true; + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 2, rect.y + 44, width - 5f, 18), prop_xAdvance, new GUIContent("ADV:")); + EditorGUI.PropertyField(new Rect(rect.x + 5f + width * 3, rect.y + 44, width - 5f, 18), prop_scale, new GUIContent("SF:")); + } + + } +} +*/ \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphInfoDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphInfoDrawer.cs.meta new file mode 100644 index 0000000..10ed151 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphInfoDrawer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 900f1a451c764dc3bdcc0de815a15935 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs new file mode 100644 index 0000000..bcd25a6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(GlyphMetrics))] + public class GlyphMetricsPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_Width = property.FindPropertyRelative("m_Width"); + SerializedProperty prop_Height = property.FindPropertyRelative("m_Height"); + SerializedProperty prop_HoriBearingX = property.FindPropertyRelative("m_HorizontalBearingX"); + SerializedProperty prop_HoriBearingY = property.FindPropertyRelative("m_HorizontalBearingY"); + SerializedProperty prop_HoriAdvance = property.FindPropertyRelative("m_HorizontalAdvance"); + + // We get Rect since a valid position may not be provided by the caller. + Rect rect = new Rect(position.x, position.y, position.width, 49); + + EditorGUI.LabelField(new Rect(rect.x, rect.y - 2.5f, rect.width, 18), new GUIContent("Glyph Metrics")); + + EditorGUIUtility.labelWidth = 50f; + EditorGUIUtility.fieldWidth = 15f; + + //GUI.enabled = false; + float width = (rect.width - 75f) / 2; + EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 20, width - 5f, 18), prop_Width, new GUIContent("W:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 20, width - 5f, 18), prop_Height, new GUIContent("H:")); + + //GUI.enabled = true; + + width = (rect.width - 75f) / 3; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 40, width - 5f, 18), prop_HoriBearingX, new GUIContent("BX:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 40, width - 5f, 18), prop_HoriBearingY, new GUIContent("BY:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 2, rect.y + 40, width - 5f, 18), prop_HoriAdvance, new GUIContent("AD:")); + if (EditorGUI.EndChangeCheck()) + { + + } + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 65f; + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta new file mode 100644 index 0000000..d91f579 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphMetricsPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e3882522a08b6f5459b4dea6f8791278 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphRectPropertyDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphRectPropertyDrawer.cs new file mode 100644 index 0000000..c9be74e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphRectPropertyDrawer.cs @@ -0,0 +1,44 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(GlyphRect))] + public class GlyphRectPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + //EditorGUI.BeginProperty(position, label, property); + + SerializedProperty prop_X = property.FindPropertyRelative("m_X"); + SerializedProperty prop_Y = property.FindPropertyRelative("m_Y"); + SerializedProperty prop_Width = property.FindPropertyRelative("m_Width"); + SerializedProperty prop_Height = property.FindPropertyRelative("m_Height"); + + // We get Rect since a valid position may not be provided by the caller. + Rect rect = new Rect(position.x, position.y, position.width, 49); + EditorGUI.LabelField(new Rect(rect.x, rect.y - 2.5f, rect.width, 18), new GUIContent("Glyph Rect")); + + EditorGUIUtility.labelWidth = 50f; + EditorGUIUtility.fieldWidth = 20f; + + //GUI.enabled = false; + float width = (rect.width - 75f) / 4; + EditorGUI.PropertyField(new Rect(rect.x + width * 0, rect.y + 20, width - 5f, 18), prop_X, new GUIContent("X:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 1, rect.y + 20, width - 5f, 18), prop_Y, new GUIContent("Y:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 2, rect.y + 20, width - 5f, 18), prop_Width, new GUIContent("W:")); + EditorGUI.PropertyField(new Rect(rect.x + width * 3, rect.y + 20, width - 5f, 18), prop_Height, new GUIContent("H:")); + + //EditorGUI.EndProperty(); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 45f; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta new file mode 100644 index 0000000..9323279 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/GlyphRectPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8bc2b083b068f3546a9509c805e0541c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseEditorPanel.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseEditorPanel.cs new file mode 100644 index 0000000..5896c33 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseEditorPanel.cs @@ -0,0 +1,1336 @@ +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Linq; + + +namespace TMPro.EditorUtilities +{ + public abstract class TMP_BaseEditorPanel : Editor + { + //Labels and Tooltips + static readonly GUIContent k_RtlToggleLabel = new GUIContent("Enable RTL Editor", "Reverses text direction and allows right to left editing."); + //static readonly GUIContent k_MainSettingsLabel = new GUIContent("Main Settings"); + static readonly GUIContent k_FontAssetLabel = new GUIContent("Font Asset", "The Font Asset containing the glyphs that can be rendered for this text."); + static readonly GUIContent k_MaterialPresetLabel = new GUIContent("Material Preset", "The material used for rendering. Only materials created from the Font Asset can be used."); + static readonly GUIContent k_StyleLabel = new GUIContent("Text Style", "The style from a style sheet to be applied to the text."); + static readonly GUIContent k_AutoSizeLabel = new GUIContent("Auto Size", "Auto sizes the text to fit the available space."); + static readonly GUIContent k_FontSizeLabel = new GUIContent("Font Size", "The size the text will be rendered at in points."); + static readonly GUIContent k_AutoSizeOptionsLabel = new GUIContent("Auto Size Options"); + static readonly GUIContent k_MinLabel = new GUIContent("Min", "The minimum font size."); + static readonly GUIContent k_MaxLabel = new GUIContent("Max", "The maximum font size."); + static readonly GUIContent k_WdLabel = new GUIContent("WD%", "Compresses character width up to this value before reducing font size."); + static readonly GUIContent k_LineLabel = new GUIContent("Line", "Negative value only. Compresses line height down to this value before reducing font size."); + static readonly GUIContent k_FontStyleLabel = new GUIContent("Font Style", "Styles to apply to the text such as Bold or Italic."); + + static readonly GUIContent k_BoldLabel = new GUIContent("B", "Bold"); + static readonly GUIContent k_ItalicLabel = new GUIContent("I", "Italic"); + static readonly GUIContent k_UnderlineLabel = new GUIContent("U", "Underline"); + static readonly GUIContent k_StrikethroughLabel = new GUIContent("S", "Strikethrough"); + static readonly GUIContent k_LowercaseLabel = new GUIContent("ab", "Lowercase"); + static readonly GUIContent k_UppercaseLabel = new GUIContent("AB", "Uppercase"); + static readonly GUIContent k_SmallcapsLabel = new GUIContent("SC", "Smallcaps"); + + static readonly GUIContent k_ColorModeLabel = new GUIContent("Color Mode", "The type of gradient to use."); + static readonly GUIContent k_BaseColorLabel = new GUIContent("Vertex Color", "The base color of the text vertices."); + static readonly GUIContent k_ColorPresetLabel = new GUIContent("Color Preset", "A Color Preset which override the local color settings."); + static readonly GUIContent k_ColorGradientLabel = new GUIContent("Color Gradient", "The gradient color applied over the Vertex Color. Can be locally set or driven by a Gradient Asset."); + static readonly GUIContent k_CorenerColorsLabel = new GUIContent("Colors", "The color composition of the gradient."); + static readonly GUIContent k_OverrideTagsLabel = new GUIContent("Override Tags", "Whether the color settings override the tag."); + + static readonly GUIContent k_SpacingOptionsLabel = new GUIContent("Spacing Options (em)", "Spacing adjustments between different elements of the text. Values are in font units where a value of 1 equals 1/100em."); + static readonly GUIContent k_CharacterSpacingLabel = new GUIContent("Character"); + static readonly GUIContent k_WordSpacingLabel = new GUIContent("Word"); + static readonly GUIContent k_LineSpacingLabel = new GUIContent("Line"); + static readonly GUIContent k_ParagraphSpacingLabel = new GUIContent("Paragraph"); + + static readonly GUIContent k_AlignmentLabel = new GUIContent("Alignment", "Horizontal and vertical aligment of the text within its container."); + static readonly GUIContent k_WrapMixLabel = new GUIContent("Wrap Mix (W <-> C)", "How much to favor words versus characters when distributing the text."); + + static readonly GUIContent k_WrappingLabel = new GUIContent("Wrapping", "Wraps text to the next line when reaching the edge of the container."); + static readonly GUIContent[] k_WrappingOptions = { new GUIContent("Disabled"), new GUIContent("Enabled") }; + static readonly GUIContent k_OverflowLabel = new GUIContent("Overflow", "How to display text which goes past the edge of the container."); + + static readonly GUIContent k_MarginsLabel = new GUIContent("Margins", "The space between the text and the edge of its container."); + static readonly GUIContent k_GeometrySortingLabel = new GUIContent("Geometry Sorting", "The order in which text geometry is sorted. Used to adjust the way overlapping characters are displayed."); + static readonly GUIContent k_IsTextObjectScaleStatic = new GUIContent("Is Scale Static", "Controls whether a text object will be excluded from the InteralUpdate callback to handle scale changes of the text object or its parent(s)."); + static readonly GUIContent k_RichTextLabel = new GUIContent("Rich Text", "Enables the use of rich text tags such as and ."); + static readonly GUIContent k_EscapeCharactersLabel = new GUIContent("Parse Escape Characters", "Whether to display strings such as \"\\n\" as is or replace them by the character they represent."); + static readonly GUIContent k_VisibleDescenderLabel = new GUIContent("Visible Descender", "Compute descender values from visible characters only. Used to adjust layout behavior when hiding and revealing characters dynamically."); + static readonly GUIContent k_SpriteAssetLabel = new GUIContent("Sprite Asset", "The Sprite Asset used when NOT specifically referencing one using ."); + static readonly GUIContent k_StyleSheetAssetLabel = new GUIContent("Style Sheet Asset", "The Style Sheet Asset used by this text object."); + + static readonly GUIContent k_HorizontalMappingLabel = new GUIContent("Horizontal Mapping", "Horizontal UV mapping when using a shader with a texture face option."); + static readonly GUIContent k_VerticalMappingLabel = new GUIContent("Vertical Mapping", "Vertical UV mapping when using a shader with a texture face option."); + static readonly GUIContent k_LineOffsetLabel = new GUIContent("Line Offset", "Adds an horizontal offset to each successive line. Used for slanted texturing."); + + static readonly GUIContent k_KerningLabel = new GUIContent("Kerning", "Enables character specific spacing between pairs of characters."); + static readonly GUIContent k_PaddingLabel = new GUIContent("Extra Padding", "Adds some padding between the characters and the edge of the text mesh. Can reduce graphical errors when displaying small text."); + + static readonly GUIContent k_LeftLabel = new GUIContent("Left"); + static readonly GUIContent k_TopLabel = new GUIContent("Top"); + static readonly GUIContent k_RightLabel = new GUIContent("Right"); + static readonly GUIContent k_BottomLabel = new GUIContent("Bottom"); + + protected static readonly GUIContent k_ExtraSettingsLabel = new GUIContent("Extra Settings"); + protected static string[] k_UiStateLabel = new string[] { "(Click to collapse) ", "(Click to expand) " }; + + static Dictionary k_AvailableStyles = new Dictionary(); + protected Dictionary m_TextStyleIndexLookup = new Dictionary(); + + protected struct Foldout + { + // Track Inspector foldout panel states, globally. + public static bool extraSettings = false; + public static bool materialInspector = true; + } + + protected static int s_EventId; + + public int selAlignGridA; + public int selAlignGridB; + + protected SerializedProperty m_TextProp; + + protected SerializedProperty m_IsRightToLeftProp; + protected string m_RtlText; + + protected SerializedProperty m_FontAssetProp; + + protected SerializedProperty m_FontSharedMaterialProp; + protected Material[] m_MaterialPresets; + protected GUIContent[] m_MaterialPresetNames; + protected Dictionary m_MaterialPresetIndexLookup = new Dictionary(); + protected int m_MaterialPresetSelectionIndex; + protected bool m_IsPresetListDirty; + + protected List m_Styles = new List(); + protected GUIContent[] m_StyleNames; + protected int m_StyleSelectionIndex; + + protected SerializedProperty m_FontStyleProp; + + protected SerializedProperty m_FontColorProp; + protected SerializedProperty m_EnableVertexGradientProp; + protected SerializedProperty m_FontColorGradientProp; + protected SerializedProperty m_FontColorGradientPresetProp; + protected SerializedProperty m_OverrideHtmlColorProp; + + protected SerializedProperty m_FontSizeProp; + protected SerializedProperty m_FontSizeBaseProp; + + protected SerializedProperty m_AutoSizingProp; + protected SerializedProperty m_FontSizeMinProp; + protected SerializedProperty m_FontSizeMaxProp; + + protected SerializedProperty m_LineSpacingMaxProp; + protected SerializedProperty m_CharWidthMaxAdjProp; + + protected SerializedProperty m_CharacterSpacingProp; + protected SerializedProperty m_WordSpacingProp; + protected SerializedProperty m_LineSpacingProp; + protected SerializedProperty m_ParagraphSpacingProp; + + protected SerializedProperty m_TextAlignmentProp; + + protected SerializedProperty m_HorizontalAlignmentProp; + protected SerializedProperty m_VerticalAlignmentProp; + + protected SerializedProperty m_HorizontalMappingProp; + protected SerializedProperty m_VerticalMappingProp; + protected SerializedProperty m_UvLineOffsetProp; + + protected SerializedProperty m_EnableWordWrappingProp; + protected SerializedProperty m_WordWrappingRatiosProp; + protected SerializedProperty m_TextOverflowModeProp; + protected SerializedProperty m_PageToDisplayProp; + protected SerializedProperty m_LinkedTextComponentProp; + protected SerializedProperty m_ParentLinkedTextComponentProp; + + protected SerializedProperty m_EnableKerningProp; + + protected SerializedProperty m_IsRichTextProp; + + protected SerializedProperty m_HasFontAssetChangedProp; + + protected SerializedProperty m_EnableExtraPaddingProp; + protected SerializedProperty m_CheckPaddingRequiredProp; + protected SerializedProperty m_EnableEscapeCharacterParsingProp; + protected SerializedProperty m_UseMaxVisibleDescenderProp; + protected SerializedProperty m_GeometrySortingOrderProp; + protected SerializedProperty m_IsTextObjectScaleStaticProp; + + protected SerializedProperty m_SpriteAssetProp; + + protected SerializedProperty m_StyleSheetAssetProp; + protected SerializedProperty m_TextStyleHashCodeProp; + + protected SerializedProperty m_MarginProp; + + protected SerializedProperty m_ColorModeProp; + + protected bool m_HavePropertiesChanged; + + protected TMP_Text m_TextComponent; + protected TMP_Text m_PreviousLinkedTextComponent; + protected RectTransform m_RectTransform; + + protected Material m_TargetMaterial; + + protected Vector3[] m_RectCorners = new Vector3[4]; + protected Vector3[] m_HandlePoints = new Vector3[4]; + + protected virtual void OnEnable() + { + m_TextProp = serializedObject.FindProperty("m_text"); + m_IsRightToLeftProp = serializedObject.FindProperty("m_isRightToLeft"); + m_FontAssetProp = serializedObject.FindProperty("m_fontAsset"); + m_FontSharedMaterialProp = serializedObject.FindProperty("m_sharedMaterial"); + + m_FontStyleProp = serializedObject.FindProperty("m_fontStyle"); + + m_FontSizeProp = serializedObject.FindProperty("m_fontSize"); + m_FontSizeBaseProp = serializedObject.FindProperty("m_fontSizeBase"); + + m_AutoSizingProp = serializedObject.FindProperty("m_enableAutoSizing"); + m_FontSizeMinProp = serializedObject.FindProperty("m_fontSizeMin"); + m_FontSizeMaxProp = serializedObject.FindProperty("m_fontSizeMax"); + + m_LineSpacingMaxProp = serializedObject.FindProperty("m_lineSpacingMax"); + m_CharWidthMaxAdjProp = serializedObject.FindProperty("m_charWidthMaxAdj"); + + // Colors & Gradient + m_FontColorProp = serializedObject.FindProperty("m_fontColor"); + m_EnableVertexGradientProp = serializedObject.FindProperty("m_enableVertexGradient"); + m_FontColorGradientProp = serializedObject.FindProperty("m_fontColorGradient"); + m_FontColorGradientPresetProp = serializedObject.FindProperty("m_fontColorGradientPreset"); + m_OverrideHtmlColorProp = serializedObject.FindProperty("m_overrideHtmlColors"); + + m_CharacterSpacingProp = serializedObject.FindProperty("m_characterSpacing"); + m_WordSpacingProp = serializedObject.FindProperty("m_wordSpacing"); + m_LineSpacingProp = serializedObject.FindProperty("m_lineSpacing"); + m_ParagraphSpacingProp = serializedObject.FindProperty("m_paragraphSpacing"); + + m_TextAlignmentProp = serializedObject.FindProperty("m_textAlignment"); + m_HorizontalAlignmentProp = serializedObject.FindProperty("m_HorizontalAlignment"); + m_VerticalAlignmentProp = serializedObject.FindProperty("m_VerticalAlignment"); + + m_HorizontalMappingProp = serializedObject.FindProperty("m_horizontalMapping"); + m_VerticalMappingProp = serializedObject.FindProperty("m_verticalMapping"); + m_UvLineOffsetProp = serializedObject.FindProperty("m_uvLineOffset"); + + m_EnableWordWrappingProp = serializedObject.FindProperty("m_enableWordWrapping"); + m_WordWrappingRatiosProp = serializedObject.FindProperty("m_wordWrappingRatios"); + m_TextOverflowModeProp = serializedObject.FindProperty("m_overflowMode"); + m_PageToDisplayProp = serializedObject.FindProperty("m_pageToDisplay"); + m_LinkedTextComponentProp = serializedObject.FindProperty("m_linkedTextComponent"); + m_ParentLinkedTextComponentProp = serializedObject.FindProperty("parentLinkedComponent"); + + m_EnableKerningProp = serializedObject.FindProperty("m_enableKerning"); + + m_EnableExtraPaddingProp = serializedObject.FindProperty("m_enableExtraPadding"); + m_IsRichTextProp = serializedObject.FindProperty("m_isRichText"); + m_CheckPaddingRequiredProp = serializedObject.FindProperty("checkPaddingRequired"); + m_EnableEscapeCharacterParsingProp = serializedObject.FindProperty("m_parseCtrlCharacters"); + m_UseMaxVisibleDescenderProp = serializedObject.FindProperty("m_useMaxVisibleDescender"); + + m_GeometrySortingOrderProp = serializedObject.FindProperty("m_geometrySortingOrder"); + m_IsTextObjectScaleStaticProp = serializedObject.FindProperty("m_IsTextObjectScaleStatic"); + + m_SpriteAssetProp = serializedObject.FindProperty("m_spriteAsset"); + + m_StyleSheetAssetProp = serializedObject.FindProperty("m_StyleSheet"); + m_TextStyleHashCodeProp = serializedObject.FindProperty("m_TextStyleHashCode"); + + m_MarginProp = serializedObject.FindProperty("m_margin"); + + m_HasFontAssetChangedProp = serializedObject.FindProperty("m_hasFontAssetChanged"); + + m_ColorModeProp = serializedObject.FindProperty("m_colorMode"); + + m_TextComponent = (TMP_Text)target; + m_RectTransform = m_TextComponent.rectTransform; + + // Restore Previous Linked Text Component + m_PreviousLinkedTextComponent = m_TextComponent.linkedTextComponent; + + // Create new Material Editor if one does not exists + m_TargetMaterial = m_TextComponent.fontSharedMaterial; + + // Set material inspector visibility + if (m_TargetMaterial != null) + UnityEditorInternal.InternalEditorUtility.SetIsInspectorExpanded(m_TargetMaterial, Foldout.materialInspector); + + // Find all Material Presets matching the current Font Asset Material + m_MaterialPresetNames = GetMaterialPresets(); + + // Get Styles from Style Sheet + if (!m_TextComponent.m_isWaitingOnResourceLoad) + m_StyleNames = GetStyleNames(); + + // Register to receive events when style sheets are modified. + TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Add(ON_TEXT_STYLE_CHANGED); + + // Initialize the Event Listener for Undo Events. + Undo.undoRedoPerformed += OnUndoRedo; + } + + protected virtual void OnDisable() + { + // Set material inspector visibility + if (m_TargetMaterial != null) + Foldout.materialInspector = UnityEditorInternal.InternalEditorUtility.GetIsInspectorExpanded(m_TargetMaterial); + + if (Undo.undoRedoPerformed != null) + Undo.undoRedoPerformed -= OnUndoRedo; + + // Unregister from style sheet related events. + TMPro_EventManager.TEXT_STYLE_PROPERTY_EVENT.Remove(ON_TEXT_STYLE_CHANGED); + } + + // Event received when Text Styles are changed. + void ON_TEXT_STYLE_CHANGED(bool isChanged) + { + m_StyleNames = GetStyleNames(); + } + + public override void OnInspectorGUI() + { + // Make sure Multi selection only includes TMP Text objects. + if (IsMixSelectionTypes()) return; + + serializedObject.Update(); + + DrawTextInput(); + + DrawMainSettings(); + + DrawExtraSettings(); + + EditorGUILayout.Space(); + + if (serializedObject.ApplyModifiedProperties() || m_HavePropertiesChanged) + { + m_TextComponent.havePropertiesChanged = true; + m_HavePropertiesChanged = false; + EditorUtility.SetDirty(target); + } + } + + public void OnSceneGUI() + { + if (IsMixSelectionTypes()) return; + + // Margin Frame & Handles + m_RectTransform.GetWorldCorners(m_RectCorners); + Vector4 marginOffset = m_TextComponent.margin; + Vector3 lossyScale = m_RectTransform.lossyScale; + + m_HandlePoints[0] = m_RectCorners[0] + m_RectTransform.TransformDirection(new Vector3(marginOffset.x * lossyScale.x, marginOffset.w * lossyScale.y, 0)); + m_HandlePoints[1] = m_RectCorners[1] + m_RectTransform.TransformDirection(new Vector3(marginOffset.x * lossyScale.x, -marginOffset.y * lossyScale.y, 0)); + m_HandlePoints[2] = m_RectCorners[2] + m_RectTransform.TransformDirection(new Vector3(-marginOffset.z * lossyScale.x, -marginOffset.y * lossyScale.y, 0)); + m_HandlePoints[3] = m_RectCorners[3] + m_RectTransform.TransformDirection(new Vector3(-marginOffset.z * lossyScale.x, marginOffset.w * lossyScale.y, 0)); + + Handles.DrawSolidRectangleWithOutline(m_HandlePoints, new Color32(255, 255, 255, 0), new Color32(255, 255, 0, 255)); + + // Draw & process FreeMoveHandles + + // LEFT HANDLE + Vector3 oldLeft = (m_HandlePoints[0] + m_HandlePoints[1]) * 0.5f; + Vector3 newLeft = Handles.FreeMoveHandle(oldLeft, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + bool hasChanged = false; + if (oldLeft != newLeft) + { + float delta = oldLeft.x - newLeft.x; + marginOffset.x += -delta / lossyScale.x; + //Debug.Log("Left Margin H0:" + handlePoints[0] + " H1:" + handlePoints[1]); + hasChanged = true; + } + + // TOP HANDLE + Vector3 oldTop = (m_HandlePoints[1] + m_HandlePoints[2]) * 0.5f; + Vector3 newTop = Handles.FreeMoveHandle(oldTop, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + if (oldTop != newTop) + { + float delta = oldTop.y - newTop.y; + marginOffset.y += delta / lossyScale.y; + //Debug.Log("Top Margin H1:" + handlePoints[1] + " H2:" + handlePoints[2]); + hasChanged = true; + } + + // RIGHT HANDLE + Vector3 oldRight = (m_HandlePoints[2] + m_HandlePoints[3]) * 0.5f; + Vector3 newRight = Handles.FreeMoveHandle(oldRight, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + if (oldRight != newRight) + { + float delta = oldRight.x - newRight.x; + marginOffset.z += delta / lossyScale.x; + hasChanged = true; + //Debug.Log("Right Margin H2:" + handlePoints[2] + " H3:" + handlePoints[3]); + } + + // BOTTOM HANDLE + Vector3 oldBottom = (m_HandlePoints[3] + m_HandlePoints[0]) * 0.5f; + Vector3 newBottom = Handles.FreeMoveHandle(oldBottom, Quaternion.identity, HandleUtility.GetHandleSize(m_RectTransform.position) * 0.05f, Vector3.zero, Handles.DotHandleCap); + if (oldBottom != newBottom) + { + float delta = oldBottom.y - newBottom.y; + marginOffset.w += -delta / lossyScale.y; + hasChanged = true; + //Debug.Log("Bottom Margin H0:" + handlePoints[0] + " H3:" + handlePoints[3]); + } + + if (hasChanged) + { + Undo.RecordObjects(new Object[] {m_RectTransform, m_TextComponent }, "Margin Changes"); + m_TextComponent.margin = marginOffset; + EditorUtility.SetDirty(target); + } + } + + protected void DrawTextInput() + { + EditorGUILayout.Space(); + + Rect rect = EditorGUILayout.GetControlRect(false, 22); + GUI.Label(rect, new GUIContent("Text Input"), TMP_UIStyleManager.sectionHeader); + + EditorGUI.indentLevel = 0; + + // If the text component is linked, disable the text input box. + if (m_ParentLinkedTextComponentProp.objectReferenceValue != null) + { + EditorGUILayout.HelpBox("The Text Input Box is disabled due to this text component being linked to another.", MessageType.Info); + } + else + { + // Display RTL Toggle + float labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 110f; + + m_IsRightToLeftProp.boolValue = EditorGUI.Toggle(new Rect(rect.width - 120, rect.y + 3, 130, 20), k_RtlToggleLabel, m_IsRightToLeftProp.boolValue); + + EditorGUIUtility.labelWidth = labelWidth; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_TextProp, GUIContent.none); + + if (EditorGUI.EndChangeCheck()) + { + m_TextComponent.m_inputSource = TMP_Text.TextInputSources.Text; + m_TextComponent.m_isInputParsingRequired = true; + m_HavePropertiesChanged = true; + } + + if (m_IsRightToLeftProp.boolValue) + { + // Copy source text to RTL string + m_RtlText = string.Empty; + string sourceText = m_TextProp.stringValue; + + // Reverse Text displayed in Text Input Box + for (int i = 0; i < sourceText.Length; i++) + m_RtlText += sourceText[sourceText.Length - i - 1]; + + GUILayout.Label("RTL Text Input"); + + EditorGUI.BeginChangeCheck(); + m_RtlText = EditorGUILayout.TextArea(m_RtlText, TMP_UIStyleManager.wrappingTextArea, GUILayout.Height(EditorGUI.GetPropertyHeight(m_TextProp) - EditorGUIUtility.singleLineHeight), GUILayout.ExpandWidth(true)); + + if (EditorGUI.EndChangeCheck()) + { + // Convert RTL input + sourceText = string.Empty; + + // Reverse Text displayed in Text Input Box + for (int i = 0; i < m_RtlText.Length; i++) + sourceText += m_RtlText[m_RtlText.Length - i - 1]; + + m_TextProp.stringValue = sourceText; + } + } + + // TEXT STYLE + if (m_StyleNames != null) + { + rect = EditorGUILayout.GetControlRect(false, 17); + + m_TextStyleIndexLookup.TryGetValue(m_TextStyleHashCodeProp.intValue, out m_StyleSelectionIndex); + + EditorGUI.BeginChangeCheck(); + m_StyleSelectionIndex = EditorGUI.Popup(rect, k_StyleLabel, m_StyleSelectionIndex, m_StyleNames); + if (EditorGUI.EndChangeCheck()) + { + m_TextStyleHashCodeProp.intValue = m_Styles[m_StyleSelectionIndex].hashCode; + m_TextComponent.m_TextStyle = m_Styles[m_StyleSelectionIndex]; + m_HavePropertiesChanged = true; + } + } + } + } + + protected void DrawMainSettings() + { + // MAIN SETTINGS SECTION + GUILayout.Label(new GUIContent("Main Settings"), TMP_UIStyleManager.sectionHeader); + + //EditorGUI.indentLevel += 1; + + DrawFont(); + + DrawColor(); + + DrawSpacing(); + + DrawAlignment(); + + DrawWrappingOverflow(); + + DrawTextureMapping(); + + //EditorGUI.indentLevel -= 1; + } + + void DrawFont() + { + bool isFontAssetDirty = false; + + // FONT ASSET + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_FontAssetProp, k_FontAssetLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_HasFontAssetChangedProp.boolValue = true; + + // Get new Material Presets for the new font asset + m_MaterialPresetNames = GetMaterialPresets(); + m_MaterialPresetSelectionIndex = 0; + + isFontAssetDirty = true; + } + + Rect rect; + + // MATERIAL PRESET + if (m_MaterialPresetNames != null && !isFontAssetDirty ) + { + EditorGUI.BeginChangeCheck(); + rect = EditorGUILayout.GetControlRect(false, 17); + + float oldHeight = EditorStyles.popup.fixedHeight; + EditorStyles.popup.fixedHeight = rect.height; + + int oldSize = EditorStyles.popup.fontSize; + EditorStyles.popup.fontSize = 11; + + if (m_FontSharedMaterialProp.objectReferenceValue != null) + m_MaterialPresetIndexLookup.TryGetValue(m_FontSharedMaterialProp.objectReferenceValue.GetInstanceID(), out m_MaterialPresetSelectionIndex); + + m_MaterialPresetSelectionIndex = EditorGUI.Popup(rect, k_MaterialPresetLabel, m_MaterialPresetSelectionIndex, m_MaterialPresetNames); + if (EditorGUI.EndChangeCheck()) + { + m_FontSharedMaterialProp.objectReferenceValue = m_MaterialPresets[m_MaterialPresetSelectionIndex]; + m_HavePropertiesChanged = true; + } + + EditorStyles.popup.fixedHeight = oldHeight; + EditorStyles.popup.fontSize = oldSize; + } + + // FONT STYLE + EditorGUI.BeginChangeCheck(); + + int v1, v2, v3, v4, v5, v6, v7; + + if (EditorGUIUtility.wideMode) + { + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f); + + EditorGUI.PrefixLabel(rect, k_FontStyleLabel); + + int styleValue = m_FontStyleProp.intValue; + + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + + rect.width = Mathf.Max(25f, rect.width / 7f); + + v1 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 1) == 1, k_BoldLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 1 : 0; // Bold + rect.x += rect.width; + v2 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 2) == 2, k_ItalicLabel, TMP_UIStyleManager.alignmentButtonMid) ? 2 : 0; // Italics + rect.x += rect.width; + v3 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 4) == 4, k_UnderlineLabel, TMP_UIStyleManager.alignmentButtonMid) ? 4 : 0; // Underline + rect.x += rect.width; + v7 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 64) == 64, k_StrikethroughLabel, TMP_UIStyleManager.alignmentButtonRight) ? 64 : 0; // Strikethrough + rect.x += rect.width; + + int selected = 0; + + EditorGUI.BeginChangeCheck(); + v4 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 8) == 8, k_LowercaseLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 8 : 0; // Lowercase + if (EditorGUI.EndChangeCheck() && v4 > 0) + { + selected = v4; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v5 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 16) == 16, k_UppercaseLabel, TMP_UIStyleManager.alignmentButtonMid) ? 16 : 0; // Uppercase + if (EditorGUI.EndChangeCheck() && v5 > 0) + { + selected = v5; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v6 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 32) == 32, k_SmallcapsLabel, TMP_UIStyleManager.alignmentButtonRight) ? 32 : 0; // Smallcaps + if (EditorGUI.EndChangeCheck() && v6 > 0) + { + selected = v6; + } + + if (selected > 0) + { + v4 = selected == 8 ? 8 : 0; + v5 = selected == 16 ? 16 : 0; + v6 = selected == 32 ? 32 : 0; + } + } + else + { + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f); + + EditorGUI.PrefixLabel(rect, k_FontStyleLabel); + + int styleValue = m_FontStyleProp.intValue; + + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + rect.width = Mathf.Max(25f, rect.width / 4f); + + v1 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 1) == 1, k_BoldLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 1 : 0; // Bold + rect.x += rect.width; + v2 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 2) == 2, k_ItalicLabel, TMP_UIStyleManager.alignmentButtonMid) ? 2 : 0; // Italics + rect.x += rect.width; + v3 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 4) == 4, k_UnderlineLabel, TMP_UIStyleManager.alignmentButtonMid) ? 4 : 0; // Underline + rect.x += rect.width; + v7 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 64) == 64, k_StrikethroughLabel, TMP_UIStyleManager.alignmentButtonRight) ? 64 : 0; // Strikethrough + + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight + 2f); + + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + + rect.width = Mathf.Max(25f, rect.width / 4f); + + int selected = 0; + + EditorGUI.BeginChangeCheck(); + v4 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 8) == 8, k_LowercaseLabel, TMP_UIStyleManager.alignmentButtonLeft) ? 8 : 0; // Lowercase + if (EditorGUI.EndChangeCheck() && v4 > 0) + { + selected = v4; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v5 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 16) == 16, k_UppercaseLabel, TMP_UIStyleManager.alignmentButtonMid) ? 16 : 0; // Uppercase + if (EditorGUI.EndChangeCheck() && v5 > 0) + { + selected = v5; + } + rect.x += rect.width; + EditorGUI.BeginChangeCheck(); + v6 = TMP_EditorUtility.EditorToggle(rect, (styleValue & 32) == 32, k_SmallcapsLabel, TMP_UIStyleManager.alignmentButtonRight) ? 32 : 0; // Smallcaps + if (EditorGUI.EndChangeCheck() && v6 > 0) + { + selected = v6; + } + + if (selected > 0) + { + v4 = selected == 8 ? 8 : 0; + v5 = selected == 16 ? 16 : 0; + v6 = selected == 32 ? 32 : 0; + } + } + + if (EditorGUI.EndChangeCheck()) + { + m_FontStyleProp.intValue = v1 + v2 + v3 + v4 + v5 + v6 + v7; + m_HavePropertiesChanged = true; + } + + // FONT SIZE + EditorGUI.BeginChangeCheck(); + + EditorGUI.BeginDisabledGroup(m_AutoSizingProp.boolValue); + EditorGUILayout.PropertyField(m_FontSizeProp, k_FontSizeLabel, GUILayout.MaxWidth(EditorGUIUtility.labelWidth + 50f)); + EditorGUI.EndDisabledGroup(); + + if (EditorGUI.EndChangeCheck()) + { + float fontSize = Mathf.Clamp(m_FontSizeProp.floatValue, 0, 32767); + + m_FontSizeProp.floatValue = fontSize; + m_FontSizeBaseProp.floatValue = fontSize; + m_HavePropertiesChanged = true; + } + + EditorGUI.indentLevel += 1; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_AutoSizingProp, k_AutoSizeLabel); + if (EditorGUI.EndChangeCheck()) + { + if (m_AutoSizingProp.boolValue == false) + m_FontSizeProp.floatValue = m_FontSizeBaseProp.floatValue; + + m_HavePropertiesChanged = true; + } + + // Show auto sizing options + if (m_AutoSizingProp.boolValue) + { + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.PrefixLabel(rect, k_AutoSizeOptionsLabel); + + int previousIndent = EditorGUI.indentLevel; + + EditorGUI.indentLevel = 0; + + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 4f; + rect.x += EditorGUIUtility.labelWidth; + + EditorGUIUtility.labelWidth = 24; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, m_FontSizeMinProp, k_MinLabel); + if (EditorGUI.EndChangeCheck()) + { + float minSize = m_FontSizeMinProp.floatValue; + + minSize = Mathf.Max(0, minSize); + + m_FontSizeMinProp.floatValue = Mathf.Min(minSize, m_FontSizeMaxProp.floatValue); + m_HavePropertiesChanged = true; + } + rect.x += rect.width; + + EditorGUIUtility.labelWidth = 27; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, m_FontSizeMaxProp, k_MaxLabel); + if (EditorGUI.EndChangeCheck()) + { + float maxSize = Mathf.Clamp(m_FontSizeMaxProp.floatValue, 0, 32767); + + m_FontSizeMaxProp.floatValue = Mathf.Max(m_FontSizeMinProp.floatValue, maxSize); + m_HavePropertiesChanged = true; + } + rect.x += rect.width; + + EditorGUI.BeginChangeCheck(); + EditorGUIUtility.labelWidth = 36; + EditorGUI.PropertyField(rect, m_CharWidthMaxAdjProp, k_WdLabel); + rect.x += rect.width; + EditorGUIUtility.labelWidth = 28; + EditorGUI.PropertyField(rect, m_LineSpacingMaxProp, k_LineLabel); + + EditorGUIUtility.labelWidth = 0; + + if (EditorGUI.EndChangeCheck()) + { + m_CharWidthMaxAdjProp.floatValue = Mathf.Clamp(m_CharWidthMaxAdjProp.floatValue, 0, 50); + m_LineSpacingMaxProp.floatValue = Mathf.Min(0, m_LineSpacingMaxProp.floatValue); + m_HavePropertiesChanged = true; + } + + EditorGUI.indentLevel = previousIndent; + } + + EditorGUI.indentLevel -= 1; + + + + EditorGUILayout.Space(); + } + + void DrawColor() + { + // FACE VERTEX COLOR + EditorGUI.BeginChangeCheck(); + Color vertexColor = EditorGUILayout.ColorField(k_BaseColorLabel, m_FontColorProp.colorValue, false, true, false); + if (EditorGUI.EndChangeCheck()) + { + m_FontColorProp.colorValue = vertexColor; + m_HavePropertiesChanged = true; + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_EnableVertexGradientProp, k_ColorGradientLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUIUtility.fieldWidth = 0; + + if (m_EnableVertexGradientProp.boolValue) + { + EditorGUI.indentLevel += 1; + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_FontColorGradientPresetProp, k_ColorPresetLabel); + + SerializedObject obj = null; + + SerializedProperty colorMode; + + SerializedProperty topLeft; + SerializedProperty topRight; + SerializedProperty bottomLeft; + SerializedProperty bottomRight; + + if (m_FontColorGradientPresetProp.objectReferenceValue == null) + { + colorMode = m_ColorModeProp; + topLeft = m_FontColorGradientProp.FindPropertyRelative("topLeft"); + topRight = m_FontColorGradientProp.FindPropertyRelative("topRight"); + bottomLeft = m_FontColorGradientProp.FindPropertyRelative("bottomLeft"); + bottomRight = m_FontColorGradientProp.FindPropertyRelative("bottomRight"); + } + else + { + obj = new SerializedObject(m_FontColorGradientPresetProp.objectReferenceValue); + colorMode = obj.FindProperty("colorMode"); + topLeft = obj.FindProperty("topLeft"); + topRight = obj.FindProperty("topRight"); + bottomLeft = obj.FindProperty("bottomLeft"); + bottomRight = obj.FindProperty("bottomRight"); + } + + EditorGUILayout.PropertyField(colorMode, k_ColorModeLabel); + + var rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + + EditorGUI.PrefixLabel(rect, k_CorenerColorsLabel); + + rect.x += EditorGUIUtility.labelWidth; + rect.width = rect.width - EditorGUIUtility.labelWidth; + + switch ((ColorMode)colorMode.enumValueIndex) + { + case ColorMode.Single: + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + topRight.colorValue = topLeft.colorValue; + bottomLeft.colorValue = topLeft.colorValue; + bottomRight.colorValue = topLeft.colorValue; + break; + case ColorMode.HorizontalGradient: + rect.width /= 2f; + + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + rect.x += rect.width; + + TMP_EditorUtility.DrawColorProperty(rect, topRight); + + bottomLeft.colorValue = topLeft.colorValue; + bottomRight.colorValue = topRight.colorValue; + break; + case ColorMode.VerticalGradient: + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + + TMP_EditorUtility.DrawColorProperty(rect, bottomLeft); + + topRight.colorValue = topLeft.colorValue; + bottomRight.colorValue = bottomLeft.colorValue; + break; + case ColorMode.FourCornersGradient: + rect.width /= 2f; + + TMP_EditorUtility.DrawColorProperty(rect, topLeft); + + rect.x += rect.width; + + TMP_EditorUtility.DrawColorProperty(rect, topRight); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + + TMP_EditorUtility.DrawColorProperty(rect, bottomLeft); + + rect.x += rect.width; + + TMP_EditorUtility.DrawColorProperty(rect, bottomRight); + break; + } + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + if (obj != null) + { + obj.ApplyModifiedProperties(); + TMPro_EventManager.ON_COLOR_GRADIENT_PROPERTY_CHANGED(m_FontColorGradientPresetProp.objectReferenceValue as TMP_ColorGradient); + } + } + + EditorGUI.indentLevel -= 1; + } + + EditorGUILayout.PropertyField(m_OverrideHtmlColorProp, k_OverrideTagsLabel); + + EditorGUILayout.Space(); + } + + void DrawSpacing() + { + // CHARACTER, LINE & PARAGRAPH SPACING + EditorGUI.BeginChangeCheck(); + + Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight); + + EditorGUI.PrefixLabel(rect, k_SpacingOptionsLabel); + + int oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth - 3f) / 2f; + + EditorGUIUtility.labelWidth = Mathf.Min(rect.width * 0.55f, 80f); + + EditorGUI.PropertyField(rect, m_CharacterSpacingProp, k_CharacterSpacingLabel); + rect.x += rect.width + 3f; + EditorGUI.PropertyField(rect, m_WordSpacingProp, k_WordSpacingLabel); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight); + EditorGUIUtility.labelWidth = 0; + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth -3f) / 2f; + EditorGUIUtility.labelWidth = Mathf.Min(rect.width * 0.55f, 80f); + + EditorGUI.PropertyField(rect, m_LineSpacingProp, k_LineSpacingLabel); + rect.x += rect.width + 3f; + EditorGUI.PropertyField(rect, m_ParagraphSpacingProp, k_ParagraphSpacingLabel); + + EditorGUIUtility.labelWidth = 0; + EditorGUI.indentLevel = oldIndent; + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUILayout.Space(); + } + + void DrawAlignment() + { + // TEXT ALIGNMENT + EditorGUI.BeginChangeCheck(); + + Rect rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.currentViewWidth > 504 ? 20 : 40 + 3); + + EditorGUI.PrefixLabel(rect, k_AlignmentLabel); + rect.x += EditorGUIUtility.labelWidth; + + EditorGUI.PropertyField(rect, m_HorizontalAlignmentProp, GUIContent.none); + EditorGUI.PropertyField(rect, m_VerticalAlignmentProp, GUIContent.none); + + // WRAPPING RATIOS shown if Justified mode is selected. + if (((HorizontalAlignmentOptions)m_HorizontalAlignmentProp.intValue & HorizontalAlignmentOptions.Justified) == HorizontalAlignmentOptions.Justified || ((HorizontalAlignmentOptions)m_HorizontalAlignmentProp.intValue & HorizontalAlignmentOptions.Flush) == HorizontalAlignmentOptions.Flush) + DrawPropertySlider(k_WrapMixLabel, m_WordWrappingRatiosProp); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + void DrawWrappingOverflow() + { + // TEXT WRAPPING + EditorGUI.BeginChangeCheck(); + int wrapSelection = EditorGUILayout.Popup(k_WrappingLabel, m_EnableWordWrappingProp.boolValue ? 1 : 0, k_WrappingOptions); + if (EditorGUI.EndChangeCheck()) + { + m_EnableWordWrappingProp.boolValue = wrapSelection == 1; + m_HavePropertiesChanged = true; + m_TextComponent.m_isInputParsingRequired = true; + } + + // TEXT OVERFLOW + EditorGUI.BeginChangeCheck(); + + if ((TextOverflowModes)m_TextOverflowModeProp.enumValueIndex == TextOverflowModes.Linked) + { + EditorGUILayout.BeginHorizontal(); + + float fieldWidth = EditorGUIUtility.fieldWidth; + EditorGUIUtility.fieldWidth = 65; + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + EditorGUIUtility.fieldWidth = fieldWidth; + + EditorGUILayout.PropertyField(m_LinkedTextComponentProp, GUIContent.none); + + EditorGUILayout.EndHorizontal(); + + if (GUI.changed) + { + TMP_Text linkedComponent = m_LinkedTextComponentProp.objectReferenceValue as TMP_Text; + + if (linkedComponent == null) + { + m_LinkedTextComponentProp.objectReferenceValue = null; + + if (m_PreviousLinkedTextComponent != null) + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + } + else if (m_TextComponent.IsSelfOrLinkedAncestor(linkedComponent)) + { + m_LinkedTextComponentProp.objectReferenceValue = m_PreviousLinkedTextComponent; + } + else + { + if (m_PreviousLinkedTextComponent != null) + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + + m_LinkedTextComponentProp.objectReferenceValue = linkedComponent; + linkedComponent.parentLinkedComponent = m_TextComponent; + m_PreviousLinkedTextComponent = linkedComponent; + } + } + } + else if ((TextOverflowModes)m_TextOverflowModeProp.enumValueIndex == TextOverflowModes.Page) + { + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + EditorGUILayout.PropertyField(m_PageToDisplayProp, GUIContent.none); + EditorGUILayout.EndHorizontal(); + + if (m_PreviousLinkedTextComponent) + { + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + + m_TextComponent.linkedTextComponent = null; + } + } + else + { + EditorGUILayout.PropertyField(m_TextOverflowModeProp, k_OverflowLabel); + + if (m_PreviousLinkedTextComponent) + { + m_TextComponent.ReleaseLinkedTextComponent(m_PreviousLinkedTextComponent); + + m_TextComponent.linkedTextComponent = null; + } + } + + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_TextComponent.m_isInputParsingRequired = true; + } + + EditorGUILayout.Space(); + } + + protected abstract void DrawExtraSettings(); + + protected void DrawMargins() + { + EditorGUI.BeginChangeCheck(); + DrawMarginProperty(m_MarginProp, k_MarginsLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + EditorGUILayout.Space(); + } + + protected void DrawGeometrySorting() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_GeometrySortingOrderProp, k_GeometrySortingLabel); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawIsTextObjectScaleStatic() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_IsTextObjectScaleStaticProp, k_IsTextObjectScaleStatic); + + if (EditorGUI.EndChangeCheck()) + { + m_TextComponent.isTextObjectScaleStatic = m_IsTextObjectScaleStaticProp.boolValue; + m_HavePropertiesChanged = true; + } + + EditorGUILayout.Space(); + } + + + protected void DrawRichText() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_IsRichTextProp, k_RichTextLabel); + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + } + + protected void DrawParsing() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_EnableEscapeCharacterParsingProp, k_EscapeCharactersLabel); + EditorGUILayout.PropertyField(m_UseMaxVisibleDescenderProp, k_VisibleDescenderLabel); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawSpriteAsset() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_SpriteAssetProp, k_SpriteAssetLabel, true); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawStyleSheet() + { + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(m_StyleSheetAssetProp, k_StyleSheetAssetLabel, true); + + if (EditorGUI.EndChangeCheck()) + { + m_StyleNames = GetStyleNames(); + m_HavePropertiesChanged = true; + } + + EditorGUILayout.Space(); + } + + protected void DrawTextureMapping() + { + // TEXTURE MAPPING OPTIONS + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_HorizontalMappingProp, k_HorizontalMappingLabel); + EditorGUILayout.PropertyField(m_VerticalMappingProp, k_VerticalMappingLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + + // UV OPTIONS + if (m_HorizontalMappingProp.enumValueIndex > 0) + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_UvLineOffsetProp, k_LineOffsetLabel, GUILayout.MinWidth(70f)); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + } + + EditorGUILayout.Space(); + } + + protected void DrawKerning() + { + // KERNING + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_EnableKerningProp, k_KerningLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + } + } + + protected void DrawPadding() + { + // EXTRA PADDING + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_EnableExtraPaddingProp, k_PaddingLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_CheckPaddingRequiredProp.boolValue = true; + } + } + + /// + /// Method to retrieve the material presets that match the currently selected font asset. + /// + protected GUIContent[] GetMaterialPresets() + { + TMP_FontAsset fontAsset = m_FontAssetProp.objectReferenceValue as TMP_FontAsset; + if (fontAsset == null) return null; + + m_MaterialPresets = TMP_EditorUtility.FindMaterialReferences(fontAsset); + m_MaterialPresetNames = new GUIContent[m_MaterialPresets.Length]; + + m_MaterialPresetIndexLookup.Clear(); + + for (int i = 0; i < m_MaterialPresetNames.Length; i++) + { + m_MaterialPresetNames[i] = new GUIContent(m_MaterialPresets[i].name); + + m_MaterialPresetIndexLookup.Add(m_MaterialPresets[i].GetInstanceID(), i); + + //if (m_TargetMaterial.GetInstanceID() == m_MaterialPresets[i].GetInstanceID()) + // m_MaterialPresetSelectionIndex = i; + } + + m_IsPresetListDirty = false; + + return m_MaterialPresetNames; + } + + protected GUIContent[] GetStyleNames() + { + k_AvailableStyles.Clear(); + m_TextStyleIndexLookup.Clear(); + m_Styles.Clear(); + + // First style on the list is always the Normal default style. + TMP_Style styleNormal = TMP_Style.NormalStyle; + + m_Styles.Add(styleNormal); + m_TextStyleIndexLookup.Add(styleNormal.hashCode, 0); + + k_AvailableStyles.Add(styleNormal.hashCode, styleNormal); + + // Get styles from Style Sheet potentially assigned to the text object. + TMP_StyleSheet localStyleSheet = (TMP_StyleSheet)m_StyleSheetAssetProp.objectReferenceValue; + + if (localStyleSheet != null) + { + int styleCount = localStyleSheet.styles.Count; + + for (int i = 0; i < styleCount; i++) + { + TMP_Style style = localStyleSheet.styles[i]; + + if (k_AvailableStyles.ContainsKey(style.hashCode) == false) + { + k_AvailableStyles.Add(style.hashCode, style); + m_Styles.Add(style); + m_TextStyleIndexLookup.Add(style.hashCode, m_TextStyleIndexLookup.Count); + } + } + } + + // Get styles from TMP Settings' default style sheet. + TMP_StyleSheet globalStyleSheet = TMP_Settings.defaultStyleSheet; + + if (globalStyleSheet != null) + { + int styleCount = globalStyleSheet.styles.Count; + + for (int i = 0; i < styleCount; i++) + { + TMP_Style style = globalStyleSheet.styles[i]; + + if (k_AvailableStyles.ContainsKey(style.hashCode) == false) + { + k_AvailableStyles.Add(style.hashCode, style); + m_Styles.Add(style); + m_TextStyleIndexLookup.Add(style.hashCode, m_TextStyleIndexLookup.Count); + } + } + } + + // Create array that will contain the list of available styles. + GUIContent[] styleNames = k_AvailableStyles.Values.Select(item => new GUIContent(item.name)).ToArray(); + + // Set text style index + m_TextStyleIndexLookup.TryGetValue(m_TextStyleHashCodeProp.intValue, out m_StyleSelectionIndex); + + return styleNames; + } + + // DRAW MARGIN PROPERTY + protected void DrawMarginProperty(SerializedProperty property, GUIContent label) + { + Rect rect = EditorGUILayout.GetControlRect(false, 2 * 18); + + EditorGUI.BeginProperty(rect, label, property); + + Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width - 15, 18); + + float width = rect.width + 3; + pos0.width = EditorGUIUtility.labelWidth; + EditorGUI.PrefixLabel(pos0, label); + + Vector4 margins = property.vector4Value; + + float widthB = width - EditorGUIUtility.labelWidth; + float fieldWidth = widthB / 4; + pos0.width = Mathf.Max(fieldWidth - 5, 45f); + + // Labels + pos0.x = EditorGUIUtility.labelWidth + 15; + margins.x = DrawMarginField(pos0, "Left", margins.x); + + pos0.x += fieldWidth; + margins.y = DrawMarginField(pos0, "Top", margins.y); + + pos0.x += fieldWidth; + margins.z = DrawMarginField(pos0, "Right", margins.z); + + pos0.x += fieldWidth; + margins.w = DrawMarginField(pos0, "Bottom", margins.w); + + property.vector4Value = margins; + + EditorGUI.EndProperty(); + } + + float DrawMarginField(Rect position, string label, float value) + { + int controlId = GUIUtility.GetControlID(FocusType.Keyboard, position); + EditorGUI.PrefixLabel(position, controlId, new GUIContent(label)); + + Rect dragZone = new Rect(position.x, position.y, position.width, position.height); + position.y += EditorGUIUtility.singleLineHeight; + + return EditorGUI.DoFloatField(EditorGUI.s_RecycledEditor, position, dragZone, controlId, value, EditorGUI.kFloatFieldFormatString, EditorStyles.numberField, true); + } + + protected void DrawPropertySlider(GUIContent label, SerializedProperty property) + { + Rect rect = EditorGUILayout.GetControlRect(false, 17); + + GUIContent content = label ?? GUIContent.none; + EditorGUI.Slider(new Rect(rect.x, rect.y, rect.width, rect.height), property, 0.0f, 1.0f, content); + } + + protected abstract bool IsMixSelectionTypes(); + + // Special Handling of Undo / Redo Events. + protected abstract void OnUndoRedo(); + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta new file mode 100644 index 0000000..87bd739 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseEditorPanel.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 91950f78729ab144aa36e94690b28fad +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseShaderGUI.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseShaderGUI.cs new file mode 100644 index 0000000..5fd33ce --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseShaderGUI.cs @@ -0,0 +1,551 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + /// Base class for TextMesh Pro shader GUIs. + public abstract class TMP_BaseShaderGUI : ShaderGUI + { + /// Representation of a #pragma shader_feature. + /// It is assumed that the first feature option is for no keyword (underscores). + protected class ShaderFeature + { + public string undoLabel; + + public GUIContent label; + + /// The keyword labels, for display. Include the no-keyword as the first option. + public GUIContent[] keywordLabels; + + /// The shader keywords. Exclude the no-keyword option. + public string[] keywords; + + int m_State; + + public bool Active + { + get { return m_State >= 0; } + } + + public int State + { + get { return m_State; } + } + + public void ReadState(Material material) + { + for (int i = 0; i < keywords.Length; i++) + { + if (material.IsKeywordEnabled(keywords[i])) + { + m_State = i; + return; + } + } + + m_State = -1; + } + + public void SetActive(bool active, Material material) + { + m_State = active ? 0 : -1; + SetStateKeywords(material); + } + + public void DoPopup(MaterialEditor editor, Material material) + { + EditorGUI.BeginChangeCheck(); + int selection = EditorGUILayout.Popup(label, m_State + 1, keywordLabels); + if (EditorGUI.EndChangeCheck()) + { + m_State = selection - 1; + editor.RegisterPropertyChangeUndo(undoLabel); + SetStateKeywords(material); + } + } + + void SetStateKeywords(Material material) + { + for (int i = 0; i < keywords.Length; i++) + { + if (i == m_State) + { + material.EnableKeyword(keywords[i]); + } + else + { + material.DisableKeyword(keywords[i]); + } + } + } + } + + static GUIContent s_TempLabel = new GUIContent(); + + protected static bool s_DebugExtended; + + static int s_UndoRedoCount, s_LastSeenUndoRedoCount; + + static float[][] s_TempFloats = + { + null, new float[1], new float[2], new float[3], new float[4] + }; + + protected static GUIContent[] s_XywhVectorLabels = + { + new GUIContent("X"), + new GUIContent("Y"), + new GUIContent("W", "Width"), + new GUIContent("H", "Height") + }; + + protected static GUIContent[] s_LbrtVectorLabels = + { + new GUIContent("L", "Left"), + new GUIContent("B", "Bottom"), + new GUIContent("R", "Right"), + new GUIContent("T", "Top") + }; + + protected static GUIContent[] s_CullingTypeLabels = + { + new GUIContent("Off"), + new GUIContent("Front"), + new GUIContent("Back") + }; + + static TMP_BaseShaderGUI() + { + // Keep track of how many undo/redo events happened. + Undo.undoRedoPerformed += () => s_UndoRedoCount += 1; + } + + bool m_IsNewGUI = true; + + float m_DragAndDropMinY; + + protected MaterialEditor m_Editor; + + protected Material m_Material; + + protected MaterialProperty[] m_Properties; + + void PrepareGUI() + { + m_IsNewGUI = false; + ShaderUtilities.GetShaderPropertyIDs(); + + // New GUI just got constructed. This happens in response to a selection, + // but also after undo/redo events. + if (s_LastSeenUndoRedoCount != s_UndoRedoCount) + { + // There's been at least one undo/redo since the last time this GUI got constructed. + // Maybe the undo/redo was for this material? Assume that is was. + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material as Material); + } + + s_LastSeenUndoRedoCount = s_UndoRedoCount; + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) + { + m_Editor = materialEditor; + m_Material = materialEditor.target as Material; + this.m_Properties = properties; + + if (m_IsNewGUI) + { + PrepareGUI(); + } + + DoDragAndDropBegin(); + EditorGUI.BeginChangeCheck(); + DoGUI(); + if (EditorGUI.EndChangeCheck()) + { + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, m_Material); + } + + DoDragAndDropEnd(); + } + + /// Override this method to create the specific shader GUI. + protected abstract void DoGUI(); + + static string[] s_PanelStateLabel = new string[] { "\t- Click to collapse -", "\t- Click to expand -" }; + + protected bool BeginPanel(string panel, bool expanded) + { + EditorGUI.indentLevel = 0; + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + Rect r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 18)); + r.x += 20; + r.width += 6; + + bool enabled = GUI.enabled; + GUI.enabled = true; + expanded = TMP_EditorUtility.EditorToggle(r, expanded, new GUIContent(panel), TMP_UIStyleManager.panelTitle); + r.width -= 30; + EditorGUI.LabelField(r, new GUIContent(expanded ? s_PanelStateLabel[0] : s_PanelStateLabel[1]), TMP_UIStyleManager.rightLabel); + GUI.enabled = enabled; + + EditorGUI.indentLevel += 1; + EditorGUI.BeginDisabledGroup(false); + + return expanded; + } + + protected bool BeginPanel(string panel, ShaderFeature feature, bool expanded, bool readState = true) + { + EditorGUI.indentLevel = 0; + + if (readState) + { + feature.ReadState(m_Material); + } + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.BeginHorizontal(); + + Rect r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 20, GUILayout.Width(20f))); + bool active = EditorGUI.Toggle(r, feature.Active); + + if (EditorGUI.EndChangeCheck()) + { + m_Editor.RegisterPropertyChangeUndo(feature.undoLabel); + feature.SetActive(active, m_Material); + } + + r = EditorGUI.IndentedRect(GUILayoutUtility.GetRect(20, 18)); + r.width += 6; + + bool enabled = GUI.enabled; + GUI.enabled = true; + expanded = TMP_EditorUtility.EditorToggle(r, expanded, new GUIContent(panel), TMP_UIStyleManager.panelTitle); + r.width -= 10; + EditorGUI.LabelField(r, new GUIContent(expanded ? s_PanelStateLabel[0] : s_PanelStateLabel[1]), TMP_UIStyleManager.rightLabel); + GUI.enabled = enabled; + + GUILayout.EndHorizontal(); + + EditorGUI.indentLevel += 1; + EditorGUI.BeginDisabledGroup(!active); + + return expanded; + } + + public void EndPanel() + { + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel -= 1; + EditorGUILayout.EndVertical(); + } + + MaterialProperty BeginProperty(string name) + { + MaterialProperty property = FindProperty(name, m_Properties); + EditorGUI.BeginChangeCheck(); + EditorGUI.showMixedValue = property.hasMixedValue; + m_Editor.BeginAnimatedCheck(Rect.zero, property); + + return property; + } + + bool EndProperty() + { + m_Editor.EndAnimatedCheck(); + EditorGUI.showMixedValue = false; + return EditorGUI.EndChangeCheck(); + } + + protected void DoPopup(string name, string label, GUIContent[] options) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + int index = EditorGUILayout.Popup(s_TempLabel, (int)property.floatValue, options); + if (EndProperty()) + { + property.floatValue = index; + } + } + + protected void DoCubeMap(string name, string label) + { + DoTexture(name, label, typeof(Cubemap)); + } + + protected void DoTexture2D(string name, string label, bool withTilingOffset = false, string[] speedNames = null) + { + DoTexture(name, label, typeof(Texture2D), withTilingOffset, speedNames); + } + + void DoTexture(string name, string label, System.Type type, bool withTilingOffset = false, string[] speedNames = null) + { + MaterialProperty property = FindProperty(name, m_Properties); + m_Editor.BeginAnimatedCheck(Rect.zero, property); + + Rect rect = EditorGUILayout.GetControlRect(true, 60f); + float totalWidth = rect.width; + rect.width = EditorGUIUtility.labelWidth + 60f; + s_TempLabel.text = label; + + EditorGUI.BeginChangeCheck(); + Object tex = EditorGUI.ObjectField(rect, s_TempLabel, property.textureValue, type, false); + if (EditorGUI.EndChangeCheck()) + { + property.textureValue = tex as Texture; + } + + rect.x += rect.width + 4f; + rect.width = totalWidth - rect.width - 4f; + rect.height = EditorGUIUtility.singleLineHeight; + + if (withTilingOffset) + { + DoTilingOffset(rect, property); + rect.y += (rect.height + 2f) * 2f; + } + + m_Editor.EndAnimatedCheck(); + + if (speedNames != null) + { + DoUVSpeed(rect, speedNames); + } + } + + void DoTilingOffset(Rect rect, MaterialProperty property) + { + float labelWidth = EditorGUIUtility.labelWidth; + int indentLevel = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + EditorGUIUtility.labelWidth = Mathf.Min(40f, rect.width * 0.20f); + + Vector4 vector = property.textureScaleAndOffset; + + bool changed = false; + float[] values = s_TempFloats[2]; + + s_TempLabel.text = "Tiling"; + Rect vectorRect = EditorGUI.PrefixLabel(rect, s_TempLabel); + values[0] = vector.x; + values[1] = vector.y; + + EditorGUI.BeginChangeCheck(); + EditorGUI.MultiFloatField(vectorRect, s_XywhVectorLabels, values); + if (EditorGUI.EndChangeCheck()) + { + vector.x = values[0]; + vector.y = values[1]; + changed = true; + } + + rect.y += rect.height + 2f; + s_TempLabel.text = "Offset"; + vectorRect = EditorGUI.PrefixLabel(rect, s_TempLabel); + values[0] = vector.z; + values[1] = vector.w; + + EditorGUI.BeginChangeCheck(); + EditorGUI.MultiFloatField(vectorRect, s_XywhVectorLabels, values); + if (EditorGUI.EndChangeCheck()) + { + vector.z = values[0]; + vector.w = values[1]; + changed = true; + } + + if (changed) + { + property.textureScaleAndOffset = vector; + } + + EditorGUIUtility.labelWidth = labelWidth; + EditorGUI.indentLevel = indentLevel; + } + + protected void DoUVSpeed(Rect rect, string[] names) + { + float labelWidth = EditorGUIUtility.labelWidth; + int indentLevel = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + EditorGUIUtility.labelWidth = Mathf.Min(40f, rect.width * 0.20f); + + s_TempLabel.text = "Speed"; + rect = EditorGUI.PrefixLabel(rect, s_TempLabel); + + EditorGUIUtility.labelWidth = 13f; + rect.width = rect.width * 0.5f - 1f; + DoFloat(rect, names[0], "X"); + rect.x += rect.width + 2f; + DoFloat(rect, names[1], "Y"); + EditorGUIUtility.labelWidth = labelWidth; + EditorGUI.indentLevel = indentLevel; + } + + protected void DoToggle(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + bool value = EditorGUILayout.Toggle(s_TempLabel, property.floatValue == 1f); + if (EndProperty()) + { + property.floatValue = value ? 1f : 0f; + } + } + + protected void DoFloat(string name, string label) + { + MaterialProperty property = BeginProperty(name); + Rect rect = EditorGUILayout.GetControlRect(); + rect.width = EditorGUIUtility.labelWidth + 55f; + s_TempLabel.text = label; + float value = EditorGUI.FloatField(rect, s_TempLabel, property.floatValue); + if (EndProperty()) + { + property.floatValue = value; + } + } + + protected void DoColor(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + Color value = EditorGUI.ColorField(EditorGUILayout.GetControlRect(), s_TempLabel, property.colorValue, false, true, true); + if (EndProperty()) + { + property.colorValue = value; + } + } + + void DoFloat(Rect rect, string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + float value = EditorGUI.FloatField(rect, s_TempLabel, property.floatValue); + if (EndProperty()) + { + property.floatValue = value; + } + } + + protected void DoSlider(string name, string label) + { + MaterialProperty property = BeginProperty(name); + Vector2 range = property.rangeLimits; + s_TempLabel.text = label; + float value = EditorGUI.Slider( + EditorGUILayout.GetControlRect(), s_TempLabel, property.floatValue, range.x, range.y + ); + if (EndProperty()) + { + property.floatValue = value; + } + } + + protected void DoVector3(string name, string label) + { + MaterialProperty property = BeginProperty(name); + s_TempLabel.text = label; + Vector4 value = EditorGUILayout.Vector3Field(s_TempLabel, property.vectorValue); + if (EndProperty()) + { + property.vectorValue = value; + } + } + + protected void DoVector(string name, string label, GUIContent[] subLabels) + { + MaterialProperty property = BeginProperty(name); + Rect rect = EditorGUILayout.GetControlRect(); + s_TempLabel.text = label; + rect = EditorGUI.PrefixLabel(rect, s_TempLabel); + Vector4 vector = property.vectorValue; + + float[] values = s_TempFloats[subLabels.Length]; + for (int i = 0; i < subLabels.Length; i++) + { + values[i] = vector[i]; + } + + EditorGUI.MultiFloatField(rect, subLabels, values); + if (EndProperty()) + { + for (int i = 0; i < subLabels.Length; i++) + { + vector[i] = values[i]; + } + + property.vectorValue = vector; + } + } + + void DoDragAndDropBegin() + { + m_DragAndDropMinY = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)).y; + } + + void DoDragAndDropEnd() + { + Rect rect = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + Event evt = Event.current; + if (evt.type == EventType.DragUpdated) + { + DragAndDrop.visualMode = DragAndDropVisualMode.Generic; + evt.Use(); + } + else if ( + evt.type == EventType.DragPerform && + Rect.MinMaxRect(rect.xMin, m_DragAndDropMinY, rect.xMax, rect.yMax).Contains(evt.mousePosition) + ) + { + DragAndDrop.AcceptDrag(); + evt.Use(); + Material droppedMaterial = DragAndDrop.objectReferences[0] as Material; + if (droppedMaterial && droppedMaterial != m_Material) + { + PerformDrop(droppedMaterial); + } + } + } + + void PerformDrop(Material droppedMaterial) + { + Texture droppedTex = droppedMaterial.GetTexture(ShaderUtilities.ID_MainTex); + if (!droppedTex) + { + return; + } + + Texture currentTex = m_Material.GetTexture(ShaderUtilities.ID_MainTex); + TMP_FontAsset requiredFontAsset = null; + if (droppedTex != currentTex) + { + requiredFontAsset = TMP_EditorUtility.FindMatchingFontAsset(droppedMaterial); + if (!requiredFontAsset) + { + return; + } + } + + foreach (GameObject o in Selection.gameObjects) + { + if (requiredFontAsset) + { + TMP_Text textComponent = o.GetComponent(); + if (textComponent) + { + Undo.RecordObject(textComponent, "Font Asset Change"); + textComponent.font = requiredFontAsset; + } + } + + TMPro_EventManager.ON_DRAG_AND_DROP_MATERIAL_CHANGED(o, m_Material, droppedMaterial); + EditorUtility.SetDirty(o); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta new file mode 100644 index 0000000..f07bd85 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BaseShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 438efd46088d408d8a53f707fa68d976 +timeCreated: 1469844810 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BitmapShaderGUI.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BitmapShaderGUI.cs new file mode 100644 index 0000000..be39959 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BitmapShaderGUI.cs @@ -0,0 +1,93 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + public class TMP_BitmapShaderGUI : TMP_BaseShaderGUI + { + static bool s_Face = true; + + protected override void DoGUI() + { + s_Face = BeginPanel("Face", s_Face); + if (s_Face) + { + DoFacePanel(); + } + + EndPanel(); + + s_DebugExtended = BeginPanel("Debug Settings", s_DebugExtended); + if (s_DebugExtended) + { + DoDebugPanel(); + } + + EndPanel(); + } + + void DoFacePanel() + { + EditorGUI.indentLevel += 1; + if (m_Material.HasProperty(ShaderUtilities.ID_FaceTex)) + { + DoColor("_FaceColor", "Color"); + DoTexture2D("_FaceTex", "Texture", true); + } + else + { + DoColor("_Color", "Color"); + DoSlider("_DiffusePower", "Diffuse Power"); + } + + EditorGUI.indentLevel -= 1; + + EditorGUILayout.Space(); + } + + void DoDebugPanel() + { + EditorGUI.indentLevel += 1; + DoTexture2D("_MainTex", "Font Atlas"); + if (m_Material.HasProperty(ShaderUtilities.ID_VertexOffsetX)) + { + if (m_Material.HasProperty(ShaderUtilities.ID_Padding)) + { + EditorGUILayout.Space(); + DoFloat("_Padding", "Padding"); + } + + EditorGUILayout.Space(); + DoFloat("_VertexOffsetX", "Offset X"); + DoFloat("_VertexOffsetY", "Offset Y"); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_MaskSoftnessX)) + { + EditorGUILayout.Space(); + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_StencilID)) + { + EditorGUILayout.Space(); + DoFloat("_Stencil", "Stencil ID"); + DoFloat("_StencilComp", "Stencil Comp"); + } + + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + + EditorGUI.indentLevel -= 1; + + EditorGUILayout.Space(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta new file mode 100644 index 0000000..6d0e052 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_BitmapShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 806de5a9211448c8b65c8435ebb48dd4 +timeCreated: 1469998850 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs new file mode 100644 index 0000000..98f32c7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + [CustomPropertyDrawer(typeof(TMP_Character))] + public class TMP_CharacterPropertyDrawer : PropertyDrawer + { + private string k_ColorProperty = "_Color"; + + int m_GlyphSelectedForEditing = -1; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_Unicode = property.FindPropertyRelative("m_Unicode"); + SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale"); + + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 50; + + Rect rect = new Rect(position.x + 50, position.y, position.width, 49); + + // Display non-editable fields + if (GUI.enabled == false) + { + int unicode = prop_Unicode.intValue; + EditorGUI.LabelField(new Rect(rect.x, rect.y, 120f, 18), new GUIContent("Unicode: 0x" + unicode.ToString("X") + ""), style); + EditorGUI.LabelField(new Rect(rect.x + 115, rect.y, 120f, 18), unicode <= 0xFFFF ? new GUIContent("UTF16: \\u" + unicode.ToString("X4") + "") : new GUIContent("UTF32: \\U" + unicode.ToString("X8") + ""), style); + EditorGUI.LabelField(new Rect(rect.x, rect.y + 18, 120, 18), new GUIContent("Glyph ID: " + prop_GlyphIndex.intValue + ""), style); + EditorGUI.LabelField(new Rect(rect.x, rect.y + 36, 80, 18), new GUIContent("Scale: " + prop_Scale.floatValue + ""), style); + + // Draw Glyph (if exists) + DrawGlyph(position, property); + } + else // Display editable fields + { + EditorGUIUtility.labelWidth = 55f; + GUI.SetNextControlName("Unicode Input"); + EditorGUI.BeginChangeCheck(); + string unicode = EditorGUI.TextField(new Rect(rect.x, rect.y, 120, 18), "Unicode:", prop_Unicode.intValue.ToString("X")); + + if (GUI.GetNameOfFocusedControl() == "Unicode Input") + { + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F')) + { + Event.current.character = '\0'; + } + } + + if (EditorGUI.EndChangeCheck()) + { + // Update Unicode value + prop_Unicode.intValue = TMP_TextUtilities.StringHexToInt(unicode); + } + + // Cache current glyph index in case it needs to be restored if the new glyph index is invalid. + int currentGlyphIndex = prop_GlyphIndex.intValue; + + EditorGUIUtility.labelWidth = 59f; + EditorGUI.BeginChangeCheck(); + EditorGUI.DelayedIntField(new Rect(rect.x, rect.y + 18, 100, 18), prop_GlyphIndex, new GUIContent("Glyph ID:")); + if (EditorGUI.EndChangeCheck()) + { + // Get a reference to the font asset + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + // Make sure new glyph index is valid. + int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == prop_GlyphIndex.intValue); + + if (elementIndex == -1) + prop_GlyphIndex.intValue = currentGlyphIndex; + else + fontAsset.IsFontAssetLookupTablesDirty = true; + } + + int glyphIndex = prop_GlyphIndex.intValue; + + // Reset glyph selection if new character has been selected. + if (GUI.enabled && m_GlyphSelectedForEditing != glyphIndex) + m_GlyphSelectedForEditing = -1; + + // Display button to edit the glyph data. + if (GUI.Button(new Rect(rect.x + 120, rect.y + 18, 75, 18), new GUIContent("Edit Glyph"))) + { + if (m_GlyphSelectedForEditing == -1) + m_GlyphSelectedForEditing = glyphIndex; + else + m_GlyphSelectedForEditing = -1; + + // Button clicks should not result in potential change. + GUI.changed = false; + } + + // Show the glyph property drawer if selected + if (glyphIndex == m_GlyphSelectedForEditing && GUI.enabled) + { + // Get a reference to the font asset + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset != null) + { + // Get the index of the glyph in the font asset glyph table. + int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == glyphIndex); + + if (elementIndex != -1) + { + SerializedProperty prop_GlyphTable = property.serializedObject.FindProperty("m_GlyphTable"); + SerializedProperty prop_Glyph = prop_GlyphTable.GetArrayElementAtIndex(elementIndex); + + SerializedProperty prop_GlyphMetrics = prop_Glyph.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = prop_Glyph.FindPropertyRelative("m_GlyphRect"); + + Rect newRect = EditorGUILayout.GetControlRect(false, 115); + EditorGUI.DrawRect(new Rect(newRect.x + 52, newRect.y - 20, newRect.width - 52, newRect.height - 5), new Color(0.1f, 0.1f, 0.1f, 0.45f)); + EditorGUI.DrawRect(new Rect(newRect.x + 53, newRect.y - 19, newRect.width - 54, newRect.height - 7), new Color(0.3f, 0.3f, 0.3f, 0.8f)); + + // Display GlyphRect + newRect.x += 55; + newRect.y -= 18; + newRect.width += 5; + EditorGUI.PropertyField(newRect, prop_GlyphRect); + + // Display GlyphMetrics + newRect.y += 45; + EditorGUI.PropertyField(newRect, prop_GlyphMetrics); + + rect.y += 120; + } + } + } + + EditorGUIUtility.labelWidth = 39f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 36, 80, 18), prop_Scale, new GUIContent("Scale:")); + + // Draw Glyph (if exists) + DrawGlyph(position, property); + } + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 58; + } + + void DrawGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the atlas texture + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset == null) + return; + + // Get a reference to the Glyph Table + SerializedProperty prop_GlyphTable = property.serializedObject.FindProperty("m_GlyphTable"); + int glyphIndex = property.FindPropertyRelative("m_GlyphIndex").intValue; + int elementIndex = fontAsset.glyphTable.FindIndex(item => item.index == glyphIndex); + + // Return if we can't find the glyph + if (elementIndex == -1) + return; + + SerializedProperty prop_Glyph = prop_GlyphTable.GetArrayElementAtIndex(elementIndex); + + // Get reference to atlas texture. + int atlasIndex = prop_Glyph.FindPropertyRelative("m_AtlasIndex").intValue; + Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null; + + if (atlasTexture == null) + return; + + Material mat; + if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + mat = TMP_FontAssetEditor.internalBitmapMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetColor(k_ColorProperty, Color.white); + } + else + { + mat = TMP_FontAssetEditor.internalSDFMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1); + } + + // Draw glyph + Rect glyphDrawPosition = new Rect(position.x, position.y, 48, 58); + + SerializedProperty glyphRectProperty = prop_Glyph.FindPropertyRelative("m_GlyphRect"); + + int padding = fontAsset.atlasPadding; + + int glyphOriginX = glyphRectProperty.FindPropertyRelative("m_X").intValue - padding; + int glyphOriginY = glyphRectProperty.FindPropertyRelative("m_Y").intValue - padding; + int glyphWidth = glyphRectProperty.FindPropertyRelative("m_Width").intValue + padding * 2; + int glyphHeight = glyphRectProperty.FindPropertyRelative("m_Height").intValue + padding * 2; + + float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine; + float scale = glyphDrawPosition.width / normalizedHeight; + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)glyphOriginX / atlasTexture.width, (float)glyphOriginY / atlasTexture.height, (float)glyphWidth / atlasTexture.width, (float)glyphHeight / atlasTexture.height); + + if (Event.current.type == EventType.Repaint) + { + glyphDrawPosition.x += (glyphDrawPosition.width - glyphWidth * scale) / 2; + glyphDrawPosition.y += (glyphDrawPosition.height - glyphHeight * scale) / 2; + glyphDrawPosition.width = glyphWidth * scale; + glyphDrawPosition.height = glyphHeight * scale; + + // Could switch to using the default material of the font asset which would require passing scale to the shader. + Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat); + } + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta new file mode 100644 index 0000000..3bf7892 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_CharacterPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 01ada73c4792aba4c937ff5d92cce866 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs new file mode 100644 index 0000000..d7ca885 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs @@ -0,0 +1,50 @@ +using UnityEditor; +using UnityEngine; +using System.IO; +using System.Collections; + + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_ColorGradientAssetMenu + { + [MenuItem("Assets/Create/TextMeshPro/Color Gradient", false, 115)] + public static void CreateColorGradient(MenuCommand context) + { + string filePath; + + if (Selection.assetGUIDs.Length == 0) + filePath = "Assets/New TMP Color Gradient.asset"; + else + filePath = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]); + + if (Directory.Exists(filePath)) + { + filePath += "/New TMP Color Gradient.asset"; + } + else + { + filePath = Path.GetDirectoryName(filePath) + "/New TMP Color Gradient.asset"; + } + + filePath = AssetDatabase.GenerateUniqueAssetPath(filePath); + + // Create new Color Gradient Asset. + TMP_ColorGradient colorGradient = ScriptableObject.CreateInstance(); + + // Create Asset + AssetDatabase.CreateAsset(colorGradient, filePath); + + //EditorUtility.SetDirty(colorGradient); + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(colorGradient)); + + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(colorGradient); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta new file mode 100644 index 0000000..a2201ee --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientAssetMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: d9647b571c5e44729b71d756b3d55317 +timeCreated: 1468187791 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientEditor.cs new file mode 100644 index 0000000..ca79435 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientEditor.cs @@ -0,0 +1,146 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_ColorGradient))] + public class TMP_ColorGradientEditor : Editor + { + SerializedProperty m_ColorMode; + SerializedProperty m_TopLeftColor; + SerializedProperty m_TopRightColor; + SerializedProperty m_BottomLeftColor; + SerializedProperty m_BottomRightColor; + + void OnEnable() + { + m_ColorMode = serializedObject.FindProperty("colorMode"); + m_TopLeftColor = serializedObject.FindProperty("topLeft"); + m_TopRightColor = serializedObject.FindProperty("topRight"); + m_BottomLeftColor = serializedObject.FindProperty("bottomLeft"); + m_BottomRightColor = serializedObject.FindProperty("bottomRight"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_ColorMode, new GUIContent("Color Mode")); + if (EditorGUI.EndChangeCheck()) + { + switch ((ColorMode)m_ColorMode.enumValueIndex) + { + case ColorMode.Single: + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_TopLeftColor.colorValue; + break; + case ColorMode.HorizontalGradient: + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_TopRightColor.colorValue; + break; + case ColorMode.VerticalGradient: + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue; + break; + } + } + Rect rect; + switch ((ColorMode)m_ColorMode.enumValueIndex) + { + case ColorMode.Single: + EditorGUI.BeginChangeCheck(); + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f); + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + m_BottomRightColor.colorValue = m_TopLeftColor.colorValue; + } + break; + + case ColorMode.HorizontalGradient: + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_BottomLeftColor.colorValue = m_TopLeftColor.colorValue; + } + + rect.x += rect.width; + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor); + if (EditorGUI.EndChangeCheck()) + { + m_BottomRightColor.colorValue = m_TopRightColor.colorValue; + } + break; + + case ColorMode.VerticalGradient: + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f); + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_TopRightColor.colorValue = m_TopLeftColor.colorValue; + } + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / (EditorGUIUtility.wideMode ? 1f : 2f); + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + EditorGUI.BeginChangeCheck(); + TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor); + if (EditorGUI.EndChangeCheck()) + { + m_BottomRightColor.colorValue = m_BottomLeftColor.colorValue; + } + break; + + case ColorMode.FourCornersGradient: + rect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + EditorGUI.PrefixLabel(rect, new GUIContent("Colors")); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + TMP_EditorUtility.DrawColorProperty(rect, m_TopLeftColor); + rect.x += rect.width; + TMP_EditorUtility.DrawColorProperty(rect, m_TopRightColor); + + rect = EditorGUILayout.GetControlRect(false, EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2)); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + rect.height = EditorGUIUtility.singleLineHeight * (EditorGUIUtility.wideMode ? 1 : 2); + + TMP_EditorUtility.DrawColorProperty(rect, m_BottomLeftColor); + rect.x += rect.width; + TMP_EditorUtility.DrawColorProperty(rect, m_BottomRightColor); + break; + } + + if (serializedObject.ApplyModifiedProperties()) + TMPro_EventManager.ON_COLOR_GRADIENT_PROPERTY_CHANGED(target as TMP_ColorGradient); + + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta new file mode 100644 index 0000000..dc58116 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ColorGradientEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: fcc60c1d6bb544d9b712b652f418ff3a +timeCreated: 1468400050 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_DropdownEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_DropdownEditor.cs new file mode 100644 index 0000000..48f8e2b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_DropdownEditor.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.UI; +using UnityEngine.UI; + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_Dropdown), true)] + [CanEditMultipleObjects] + public class DropdownEditor : SelectableEditor + { + SerializedProperty m_Template; + SerializedProperty m_CaptionText; + SerializedProperty m_CaptionImage; + SerializedProperty m_Placeholder; + SerializedProperty m_ItemText; + SerializedProperty m_ItemImage; + SerializedProperty m_OnSelectionChanged; + SerializedProperty m_Value; + SerializedProperty m_AlphaFadeSpeed; + SerializedProperty m_Options; + + protected override void OnEnable() + { + base.OnEnable(); + m_Template = serializedObject.FindProperty("m_Template"); + m_CaptionText = serializedObject.FindProperty("m_CaptionText"); + m_CaptionImage = serializedObject.FindProperty("m_CaptionImage"); + m_Placeholder = serializedObject.FindProperty("m_Placeholder"); + m_ItemText = serializedObject.FindProperty("m_ItemText"); + m_ItemImage = serializedObject.FindProperty("m_ItemImage"); + m_OnSelectionChanged = serializedObject.FindProperty("m_OnValueChanged"); + m_Value = serializedObject.FindProperty("m_Value"); + m_AlphaFadeSpeed = serializedObject.FindProperty("m_AlphaFadeSpeed"); + m_Options = serializedObject.FindProperty("m_Options"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + EditorGUILayout.Space(); + + serializedObject.Update(); + EditorGUILayout.PropertyField(m_Template); + EditorGUILayout.PropertyField(m_CaptionText); + EditorGUILayout.PropertyField(m_CaptionImage); + EditorGUILayout.PropertyField(m_Placeholder); + EditorGUILayout.PropertyField(m_ItemText); + EditorGUILayout.PropertyField(m_ItemImage); + EditorGUILayout.PropertyField(m_Value); + EditorGUILayout.PropertyField(m_AlphaFadeSpeed); + EditorGUILayout.PropertyField(m_Options); + EditorGUILayout.PropertyField(m_OnSelectionChanged); + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_DropdownEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_DropdownEditor.cs.meta new file mode 100644 index 0000000..75030cf --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_DropdownEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6dbcf248c987476181a37f01a1814975 +timeCreated: 1446377461 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorCoroutine.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorCoroutine.cs new file mode 100644 index 0000000..e005603 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorCoroutine.cs @@ -0,0 +1,96 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; + + +namespace TMPro.EditorUtilities +{ + /// + /// Simple implementation of coroutine working in the Unity Editor. + /// + public class TMP_EditorCoroutine + { + //private static Dictionary s_ActiveCoroutines; + + readonly IEnumerator coroutine; + + /// + /// Constructor + /// + /// + TMP_EditorCoroutine(IEnumerator routine) + { + this.coroutine = routine; + } + + + /// + /// Starts a new EditorCoroutine. + /// + /// Coroutine + /// new EditorCoroutine + public static TMP_EditorCoroutine StartCoroutine(IEnumerator routine) + { + TMP_EditorCoroutine coroutine = new TMP_EditorCoroutine(routine); + coroutine.Start(); + + // Add coroutine to tracking list + //if (s_ActiveCoroutines == null) + // s_ActiveCoroutines = new Dictionary(); + + // Add new instance of editor coroutine to dictionary. + //s_ActiveCoroutines.Add(coroutine.GetHashCode(), coroutine); + + return coroutine; + } + + + /// + /// Clear delegate list + /// + //public static void StopAllEditorCoroutines() + //{ + // EditorApplication.update = null; + //} + + + /// + /// Register callback for editor updates + /// + void Start() + { + EditorApplication.update += EditorUpdate; + } + + + /// + /// Unregister callback for editor updates. + /// + public void Stop() + { + if (EditorApplication.update != null) + EditorApplication.update -= EditorUpdate; + + //s_ActiveCoroutines.Remove(this.GetHashCode()); + } + + + /// + /// Delegate function called on editor updates. + /// + void EditorUpdate() + { + // Stop editor coroutine if it does not continue. + if (coroutine.MoveNext() == false) + Stop(); + + // Process the different types of EditorCoroutines. + if (coroutine.Current != null) + { + + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta new file mode 100644 index 0000000..16e03fa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorCoroutine.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 27a0335dab59ec542aadd6636a5b4ebd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanel.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanel.cs new file mode 100644 index 0000000..a03494f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanel.cs @@ -0,0 +1,191 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.Presets; + +namespace TMPro.EditorUtilities +{ + + [CustomEditor(typeof(TextMeshPro), true), CanEditMultipleObjects] + public class TMP_EditorPanel : TMP_BaseEditorPanel + { + static readonly GUIContent k_SortingLayerLabel = new GUIContent("Sorting Layer", "Name of the Renderer's sorting layer."); + static readonly GUIContent k_OrderInLayerLabel = new GUIContent("Order in Layer", "Renderer's order within a sorting layer."); + static readonly GUIContent k_OrthographicLabel = new GUIContent("Orthographic Mode", "Should be enabled when using an orthographic camera. Instructs the shader to not perform any perspective correction."); + static readonly GUIContent k_VolumetricLabel = new GUIContent("Volumetric Setup", "Use cubes rather than quads to render the text. Allows for volumetric rendering when combined with a compatible shader."); + + private static string[] k_SortingLayerNames; + bool IsPreset; + + SerializedProperty m_IsVolumetricTextProp; + SerializedProperty m_IsOrthographicProp; + Renderer m_Renderer; + + protected override void OnEnable() + { + base.OnEnable(); + + // Determine if the inspected object is a Preset + IsPreset = (int)(target as Component).gameObject.hideFlags == 93; + + m_IsOrthographicProp = serializedObject.FindProperty("m_isOrthographic"); + + m_IsVolumetricTextProp = serializedObject.FindProperty("m_isVolumetricText"); + + m_Renderer = m_TextComponent.GetComponent(); + + // Populate Sorting Layer Names + k_SortingLayerNames = SortingLayerHelper.sortingLayerNames; + } + + protected override void DrawExtraSettings() + { + Rect rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Extra Settings"), TMP_UIStyleManager.sectionHeader)) + Foldout.extraSettings = !Foldout.extraSettings; + + GUI.Label(rect, (Foldout.extraSettings ? "" : k_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (Foldout.extraSettings) + { + //EditorGUI.indentLevel += 1; + + DrawMargins(); + + DrawSortingLayer(); + + DrawGeometrySorting(); + + DrawIsTextObjectScaleStatic(); + + DrawOrthographicMode(); + + DrawRichText(); + + DrawParsing(); + + DrawSpriteAsset(); + + DrawStyleSheet(); + + //DrawVolumetricSetup(); + + DrawKerning(); + + DrawPadding(); + + //EditorGUI.indentLevel -= 1; + } + } + + protected void DrawSortingLayer() + { + Undo.RecordObject(m_Renderer, "Sorting Layer Change"); + + EditorGUI.BeginChangeCheck(); + + TextMeshPro textComponent = (TextMeshPro)m_TextComponent; + + // Look up the layer name using the current layer ID + string oldName = IsPreset ? SortingLayer.IDToName(textComponent._SortingLayerID) : SortingLayer.IDToName(textComponent.sortingLayerID); + + // Use the name to look up our array index into the names list + int oldLayerIndex = System.Array.IndexOf(k_SortingLayerNames, oldName); + + // Show the pop-up for the names + EditorGUIUtility.fieldWidth = 0f; + int newLayerIndex = EditorGUILayout.Popup(k_SortingLayerLabel, oldLayerIndex, k_SortingLayerNames); + + // If the index changes, look up the ID for the new index to store as the new ID + if (newLayerIndex != oldLayerIndex) + UpdateTargetsSortingLayerID(SortingLayer.NameToID(k_SortingLayerNames[newLayerIndex])); + + // Get value from internal property if target is a Preset otherwise from the public property + int oldSortingOrder = IsPreset ? textComponent._SortingOrder : textComponent.sortingOrder; + + int newSortingLayerOrder = EditorGUILayout.IntField(k_OrderInLayerLabel, oldSortingOrder); + + if (newSortingLayerOrder != textComponent.sortingOrder) + UpdateTargetsSortingOrder(newSortingLayerOrder); + + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + + EditorGUILayout.Space(); + } + + protected void DrawOrthographicMode() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_IsOrthographicProp, k_OrthographicLabel); + if (EditorGUI.EndChangeCheck()) + m_HavePropertiesChanged = true; + } + + protected void DrawVolumetricSetup() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_IsVolumetricTextProp, k_VolumetricLabel); + if (EditorGUI.EndChangeCheck()) + { + m_HavePropertiesChanged = true; + m_TextComponent.textInfo.ResetVertexLayout(m_IsVolumetricTextProp.boolValue); + } + + EditorGUILayout.Space(); + } + + // Method to handle multi object selection + protected override bool IsMixSelectionTypes() + { + GameObject[] objects = Selection.gameObjects; + if (objects.Length > 1) + { + for (int i = 0; i < objects.Length; i++) + { + if (objects[i].GetComponent() == null) + return true; + } + } + return false; + } + + protected override void OnUndoRedo() + { + int undoEventId = Undo.GetCurrentGroup(); + int lastUndoEventId = s_EventId; + + if (undoEventId != lastUndoEventId) + { + for (int i = 0; i < targets.Length; i++) + { + //Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup()); + TMPro_EventManager.ON_TEXTMESHPRO_PROPERTY_CHANGED(true, targets[i] as TextMeshPro); + s_EventId = undoEventId; + } + } + } + + void UpdateTargetsSortingLayerID(int sortingLayerID) + { + for (int i = 0; i < targets.Length; i++) + { + var textComponent = (TextMeshPro)targets[i]; + + if (textComponent != null) + textComponent.sortingLayerID = sortingLayerID; + } + } + + void UpdateTargetsSortingOrder(int sortingOrder) + { + for (int i = 0; i < targets.Length; i++) + { + var textComponent = (TextMeshPro)targets[i]; + + if (textComponent != null) + textComponent.sortingOrder = sortingOrder; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanel.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanel.cs.meta new file mode 100644 index 0000000..54fd804 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanel.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 34f6695d37a94370a3697f6b068f5d5e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanelUI.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanelUI.cs new file mode 100644 index 0000000..c508546 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanelUI.cs @@ -0,0 +1,124 @@ +using UnityEngine; +using UnityEngine.UI; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + + [CustomEditor(typeof(TextMeshProUGUI), true), CanEditMultipleObjects] + public class TMP_EditorPanelUI : TMP_BaseEditorPanel + { + static readonly GUIContent k_RaycastTargetLabel = new GUIContent("Raycast Target", "Whether the text blocks raycasts from the Graphic Raycaster."); + static readonly GUIContent k_MaskableLabel = new GUIContent("Maskable", "Determines if the text object will be affected by UI Mask."); + + SerializedProperty m_RaycastTargetProp; + private SerializedProperty m_MaskableProp; + + protected override void OnEnable() + { + base.OnEnable(); + m_RaycastTargetProp = serializedObject.FindProperty("m_RaycastTarget"); + m_MaskableProp = serializedObject.FindProperty("m_Maskable"); + } + + protected override void DrawExtraSettings() + { + Rect rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Extra Settings"), TMP_UIStyleManager.sectionHeader)) + Foldout.extraSettings = !Foldout.extraSettings; + + GUI.Label(rect, (Foldout.extraSettings ? k_UiStateLabel[0] : k_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + if (Foldout.extraSettings) + { + //EditorGUI.indentLevel += 1; + + DrawMargins(); + + DrawGeometrySorting(); + + DrawIsTextObjectScaleStatic(); + + DrawRichText(); + + DrawRaycastTarget(); + + DrawMaskable(); + + DrawParsing(); + + DrawSpriteAsset(); + + DrawStyleSheet(); + + DrawKerning(); + + DrawPadding(); + + //EditorGUI.indentLevel -= 1; + } + } + + protected void DrawRaycastTarget() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_RaycastTargetProp, k_RaycastTargetLabel); + if (EditorGUI.EndChangeCheck()) + { + // Change needs to propagate to the child sub objects. + Graphic[] graphicComponents = m_TextComponent.GetComponentsInChildren(); + for (int i = 1; i < graphicComponents.Length; i++) + graphicComponents[i].raycastTarget = m_RaycastTargetProp.boolValue; + + m_HavePropertiesChanged = true; + } + } + + protected void DrawMaskable() + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_MaskableProp, k_MaskableLabel); + if (EditorGUI.EndChangeCheck()) + { + m_TextComponent.maskable = m_MaskableProp.boolValue; + + // Change needs to propagate to the child sub objects. + MaskableGraphic[] maskableGraphics = m_TextComponent.GetComponentsInChildren(); + for (int i = 1; i < maskableGraphics.Length; i++) + maskableGraphics[i].maskable = m_MaskableProp.boolValue; + + m_HavePropertiesChanged = true; + } + } + + // Method to handle multi object selection + protected override bool IsMixSelectionTypes() + { + GameObject[] objects = Selection.gameObjects; + if (objects.Length > 1) + { + for (int i = 0; i < objects.Length; i++) + { + if (objects[i].GetComponent() == null) + return true; + } + } + return false; + } + protected override void OnUndoRedo() + { + int undoEventId = Undo.GetCurrentGroup(); + int lastUndoEventId = s_EventId; + + if (undoEventId != lastUndoEventId) + { + for (int i = 0; i < targets.Length; i++) + { + //Debug.Log("Undo & Redo Performed detected in Editor Panel. Event ID:" + Undo.GetCurrentGroup()); + TMPro_EventManager.ON_TEXTMESHPRO_UGUI_PROPERTY_CHANGED(true, targets[i] as TextMeshProUGUI); + s_EventId = undoEventId; + } + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanelUI.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanelUI.cs.meta new file mode 100644 index 0000000..ea3b36b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorPanelUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 21c0044a7f964773be90d197a78e4703 +timeCreated: 1443571501 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorUtility.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorUtility.cs new file mode 100644 index 0000000..8869dd3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorUtility.cs @@ -0,0 +1,451 @@ +using UnityEngine; +using UnityEditor; +using System.Text; +using System.IO; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_EditorUtility + { + /// + /// Returns the relative path of the package. + /// + public static string packageRelativePath + { + get + { + if (string.IsNullOrEmpty(m_PackagePath)) + m_PackagePath = GetPackageRelativePath(); + + return m_PackagePath; + } + } + [SerializeField] + private static string m_PackagePath; + + /// + /// Returns the fully qualified path of the package. + /// + public static string packageFullPath + { + get + { + if (string.IsNullOrEmpty(m_PackageFullPath)) + m_PackageFullPath = GetPackageFullPath(); + + return m_PackageFullPath; + } + } + [SerializeField] + private static string m_PackageFullPath; + + + // Static Fields Related to locating the TextMesh Pro Asset + private static string folderPath = "Not Found"; + + private static EditorWindow Gameview; + private static bool isInitialized = false; + + private static void GetGameview() + { + System.Reflection.Assembly assembly = typeof(UnityEditor.EditorWindow).Assembly; + System.Type type = assembly.GetType("UnityEditor.GameView"); + Gameview = EditorWindow.GetWindow(type); + } + + + public static void RepaintAll() + { + if (isInitialized == false) + { + GetGameview(); + isInitialized = true; + } + + SceneView.RepaintAll(); + Gameview.Repaint(); + } + + + /// + /// Create and return a new asset in a smart location based on the current selection and then select it. + /// + /// + /// Name of the new asset. Do not include the .asset extension. + /// + /// + /// The new asset. + /// + public static T CreateAsset(string name) where T : ScriptableObject + { + string path = AssetDatabase.GetAssetPath(Selection.activeObject); + if (path.Length == 0) + { + // no asset selected, place in asset root + path = "Assets/" + name + ".asset"; + } + else if (Directory.Exists(path)) + { + // place in currently selected directory + path += "/" + name + ".asset"; + } + else { + // place in current selection's containing directory + path = Path.GetDirectoryName(path) + "/" + name + ".asset"; + } + T asset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(asset, AssetDatabase.GenerateUniqueAssetPath(path)); + EditorUtility.FocusProjectWindow(); + Selection.activeObject = asset; + return asset; + } + + + + // Function used to find all materials which reference a font atlas so we can update all their references. + public static Material[] FindMaterialReferences(TMP_FontAsset fontAsset) + { + List refs = new List(); + Material mat = fontAsset.material; + refs.Add(mat); + + // Get materials matching the search pattern. + string searchPattern = "t:Material" + " " + fontAsset.name.Split(new char[] { ' ' })[0]; + string[] materialAssetGUIDs = AssetDatabase.FindAssets(searchPattern); + + for (int i = 0; i < materialAssetGUIDs.Length; i++) + { + string materialPath = AssetDatabase.GUIDToAssetPath(materialAssetGUIDs[i]); + Material targetMaterial = AssetDatabase.LoadAssetAtPath(materialPath); + + if (targetMaterial.HasProperty(ShaderUtilities.ID_MainTex) && targetMaterial.GetTexture(ShaderUtilities.ID_MainTex) != null && mat.GetTexture(ShaderUtilities.ID_MainTex) != null && targetMaterial.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID() == mat.GetTexture(ShaderUtilities.ID_MainTex).GetInstanceID()) + { + if (!refs.Contains(targetMaterial)) + refs.Add(targetMaterial); + } + else + { + // TODO: Find a more efficient method to unload resources. + //Resources.UnloadAsset(targetMaterial.GetTexture(ShaderUtilities.ID_MainTex)); + } + } + + return refs.ToArray(); + } + + + // Function used to find the Font Asset which matches the given Material Preset and Font Atlas Texture. + public static TMP_FontAsset FindMatchingFontAsset(Material mat) + { + if (mat.GetTexture(ShaderUtilities.ID_MainTex) == null) return null; + + // Find the dependent assets of this material. + string[] dependentAssets = AssetDatabase.GetDependencies(AssetDatabase.GetAssetPath(mat), false); + + for (int i = 0; i < dependentAssets.Length; i++) + { + TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(dependentAssets[i]); + if (fontAsset != null) + return fontAsset; + } + + return null; + } + + + private static string GetPackageRelativePath() + { + // Check for potential UPM package + string packagePath = Path.GetFullPath("Packages/com.unity.textmeshpro"); + if (Directory.Exists(packagePath)) + { + return "Packages/com.unity.textmeshpro"; + } + + packagePath = Path.GetFullPath("Assets/.."); + if (Directory.Exists(packagePath)) + { + // Search default location for development package + if (Directory.Exists(packagePath + "/Assets/Packages/com.unity.TextMeshPro/Editor Resources")) + { + return "Assets/Packages/com.unity.TextMeshPro"; + } + + // Search for default location of normal TextMesh Pro AssetStore package + if (Directory.Exists(packagePath + "/Assets/TextMesh Pro/Editor Resources")) + { + return "Assets/TextMesh Pro"; + } + + // Search for potential alternative locations in the user project + string[] matchingPaths = Directory.GetDirectories(packagePath, "TextMesh Pro", SearchOption.AllDirectories); + packagePath = ValidateLocation(matchingPaths, packagePath); + if (packagePath != null) return packagePath; + } + + return null; + } + + private static string GetPackageFullPath() + { + // Check for potential UPM package + string packagePath = Path.GetFullPath("Packages/com.unity.textmeshpro"); + if (Directory.Exists(packagePath)) + { + return packagePath; + } + + packagePath = Path.GetFullPath("Assets/.."); + if (Directory.Exists(packagePath)) + { + // Search default location for development package + if (Directory.Exists(packagePath + "/Assets/Packages/com.unity.TextMeshPro/Editor Resources")) + { + return packagePath + "/Assets/Packages/com.unity.TextMeshPro"; + } + + // Search for default location of normal TextMesh Pro AssetStore package + if (Directory.Exists(packagePath + "/Assets/TextMesh Pro/Editor Resources")) + { + return packagePath + "/Assets/TextMesh Pro"; + } + + // Search for potential alternative locations in the user project + string[] matchingPaths = Directory.GetDirectories(packagePath, "TextMesh Pro", SearchOption.AllDirectories); + string path = ValidateLocation(matchingPaths, packagePath); + if (path != null) return packagePath + path; + } + + return null; + } + + + /// + /// Method to validate the location of the asset folder by making sure the GUISkins folder exists. + /// + /// + /// + private static string ValidateLocation(string[] paths, string projectPath) + { + for (int i = 0; i < paths.Length; i++) + { + // Check if any of the matching directories contain a GUISkins directory. + if (Directory.Exists(paths[i] + "/Editor Resources")) + { + folderPath = paths[i].Replace(projectPath, ""); + folderPath = folderPath.TrimStart('\\', '/'); + return folderPath; + } + } + + return null; + } + + + /// + /// Function which returns a string containing a sequence of Decimal character ranges. + /// + /// + /// + public static string GetDecimalCharacterSequence(int[] characterSet) + { + if (characterSet == null || characterSet.Length == 0) + return string.Empty; + + string characterSequence = string.Empty; + int count = characterSet.Length; + int first = characterSet[0]; + int last = first; + + for (int i = 1; i < count; i++) + { + if (characterSet[i - 1] + 1 == characterSet[i]) + { + last = characterSet[i]; + } + else + { + if (first == last) + characterSequence += first + ","; + else + characterSequence += first + "-" + last + ","; + + first = last = characterSet[i]; + } + + } + + // handle the final group + if (first == last) + characterSequence += first; + else + characterSequence += first + "-" + last; + + return characterSequence; + } + + + /// + /// Function which returns a string containing a sequence of Unicode (Hex) character ranges. + /// + /// + /// + public static string GetUnicodeCharacterSequence(int[] characterSet) + { + if (characterSet == null || characterSet.Length == 0) + return string.Empty; + + string characterSequence = string.Empty; + int count = characterSet.Length; + int first = characterSet[0]; + int last = first; + + for (int i = 1; i < count; i++) + { + if (characterSet[i - 1] + 1 == characterSet[i]) + { + last = characterSet[i]; + } + else + { + if (first == last) + characterSequence += first.ToString("X2") + ","; + else + characterSequence += first.ToString("X2") + "-" + last.ToString("X2") + ","; + + first = last = characterSet[i]; + } + + } + + // handle the final group + if (first == last) + characterSequence += first.ToString("X2"); + else + characterSequence += first.ToString("X2") + "-" + last.ToString("X2"); + + return characterSequence; + } + + + /// + /// + /// + /// + /// + /// + public static void DrawBox(Rect rect, float thickness, Color color) + { + EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + thickness, rect.width + thickness * 2, thickness), color); + EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + thickness, thickness, rect.height - thickness * 2), color); + EditorGUI.DrawRect(new Rect(rect.x - thickness, rect.y + rect.height - thickness * 2, rect.width + thickness * 2, thickness), color); + EditorGUI.DrawRect(new Rect(rect.x + rect.width, rect.y + thickness, thickness, rect.height - thickness * 2), color); + } + + + /// + /// Function to return the horizontal alignment grid value. + /// + /// + /// + public static int GetHorizontalAlignmentGridValue(int value) + { + if ((value & 0x1) == 0x1) + return 0; + else if ((value & 0x2) == 0x2) + return 1; + else if ((value & 0x4) == 0x4) + return 2; + else if ((value & 0x8) == 0x8) + return 3; + else if ((value & 0x10) == 0x10) + return 4; + else if ((value & 0x20) == 0x20) + return 5; + + return 0; + } + + /// + /// Function to return the vertical alignment grid value. + /// + /// + /// + public static int GetVerticalAlignmentGridValue(int value) + { + if ((value & 0x100) == 0x100) + return 0; + if ((value & 0x200) == 0x200) + return 1; + if ((value & 0x400) == 0x400) + return 2; + if ((value & 0x800) == 0x800) + return 3; + if ((value & 0x1000) == 0x1000) + return 4; + if ((value & 0x2000) == 0x2000) + return 5; + + return 0; + } + + public static void DrawColorProperty(Rect rect, SerializedProperty property) + { + int oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + if (EditorGUIUtility.wideMode) + { + EditorGUI.PropertyField(new Rect(rect.x, rect.y, 50f, rect.height), property, GUIContent.none); + rect.x += 50f; + rect.width = Mathf.Min(100f, rect.width - 55f); + } + else + { + rect.height /= 2f; + rect.width = Mathf.Min(100f, rect.width - 5f); + EditorGUI.PropertyField(rect, property, GUIContent.none); + rect.y += rect.height; + } + + EditorGUI.BeginChangeCheck(); + string colorString = EditorGUI.TextField(rect, string.Format("#{0}", ColorUtility.ToHtmlStringRGBA(property.colorValue))); + if (EditorGUI.EndChangeCheck()) + { + Color color; + if (ColorUtility.TryParseHtmlString(colorString, out color)) + { + property.colorValue = color; + } + } + EditorGUI.indentLevel = oldIndent; + } + + public static bool EditorToggle(Rect position, bool value, GUIContent content, GUIStyle style) + { + var id = GUIUtility.GetControlID(content, FocusType.Keyboard, position); + var evt = Event.current; + + // Toggle selected toggle on space or return key + if (GUIUtility.keyboardControl == id && evt.type == EventType.KeyDown && (evt.keyCode == KeyCode.Space || evt.keyCode == KeyCode.Return || evt.keyCode == KeyCode.KeypadEnter)) + { + value = !value; + evt.Use(); + GUI.changed = true; + } + + if (evt.type == EventType.MouseDown && position.Contains(Event.current.mousePosition)) + { + GUIUtility.keyboardControl = id; + EditorGUIUtility.editingTextField = false; + HandleUtility.Repaint(); + } + + return GUI.Toggle(position, id, value, content, style); + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorUtility.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorUtility.cs.meta new file mode 100644 index 0000000..5088b1b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_EditorUtility.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 2300e75732d74890b38a8ff257a3ae15 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAssetEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAssetEditor.cs new file mode 100644 index 0000000..8cf9a79 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAssetEditor.cs @@ -0,0 +1,1717 @@ +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; +using System.Collections.Generic; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor.TextCore.LowLevel; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_FontWeightPair))] + public class FontWeightDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_regular = property.FindPropertyRelative("regularTypeface"); + SerializedProperty prop_italic = property.FindPropertyRelative("italicTypeface"); + + float width = position.width; + + position.width = EditorGUIUtility.labelWidth; + EditorGUI.LabelField(position, label); + + int oldIndent = EditorGUI.indentLevel; + EditorGUI.indentLevel = 0; + + // NORMAL TYPEFACE + if (label.text[0] == '4') GUI.enabled = false; + position.x += position.width; position.width = (width - position.width) / 2; + EditorGUI.PropertyField(position, prop_regular, GUIContent.none); + + // ITALIC TYPEFACE + GUI.enabled = true; + position.x += position.width; + EditorGUI.PropertyField(position, prop_italic, GUIContent.none); + + EditorGUI.indentLevel = oldIndent; + } + } + + [CustomEditor(typeof(TMP_FontAsset))] + public class TMP_FontAssetEditor : Editor + { + private struct UI_PanelState + { + public static bool faceInfoPanel = true; + public static bool generationSettingsPanel = true; + public static bool fontAtlasInfoPanel = true; + public static bool fontWeightPanel = true; + public static bool fallbackFontAssetPanel = true; + public static bool glyphTablePanel = false; + public static bool characterTablePanel = false; + public static bool fontFeatureTablePanel = false; + } + + private struct AtlasSettings + { + public GlyphRenderMode glyphRenderMode; + public int pointSize; + public int padding; + public int atlasWidth; + public int atlasHeight; + } + + /// + /// Material used to display SDF glyphs in the Character and Glyph tables. + /// + internal static Material internalSDFMaterial + { + get + { + if (s_InternalSDFMaterial == null) + { + Shader shader = Shader.Find("Hidden/TMP/Internal/Editor/Distance Field SSD"); + + if (shader != null) + s_InternalSDFMaterial = new Material(shader); + } + + return s_InternalSDFMaterial; + } + } + static Material s_InternalSDFMaterial; + + /// + /// Material used to display Bitmap glyphs in the Character and Glyph tables. + /// + internal static Material internalBitmapMaterial + { + get + { + if (s_InternalBitmapMaterial == null) + { + Shader shader = Shader.Find("Hidden/Internal-GUITextureClipText"); + + if (shader != null) + s_InternalBitmapMaterial = new Material(shader); + } + + return s_InternalBitmapMaterial; + } + } + static Material s_InternalBitmapMaterial; + + private static string[] s_UiStateLabel = new string[] { "(Click to collapse) ", "(Click to expand) " }; + private GUIContent[] m_AtlasResolutionLabels = { new GUIContent("8"), new GUIContent("16"), new GUIContent("32"), new GUIContent("64"), new GUIContent("128"), new GUIContent("256"), new GUIContent("512"), new GUIContent("1024"), new GUIContent("2048"), new GUIContent("4096"), new GUIContent("8192") }; + private int[] m_AtlasResolutions = { 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 }; + + private struct Warning + { + public bool isEnabled; + public double expirationTime; + } + + private int m_CurrentGlyphPage = 0; + private int m_CurrentCharacterPage = 0; + private int m_CurrentKerningPage = 0; + + private int m_SelectedGlyphRecord = -1; + private int m_SelectedCharacterRecord = -1; + private int m_SelectedAdjustmentRecord = -1; + + private string m_dstGlyphID; + private string m_dstUnicode; + private const string k_placeholderUnicodeHex = "New Unicode (Hex)"; + private string m_unicodeHexLabel = k_placeholderUnicodeHex; + private const string k_placeholderGlyphID = "New Glyph ID"; + private string m_GlyphIDLabel = k_placeholderGlyphID; + + private Warning m_AddGlyphWarning; + private Warning m_AddCharacterWarning; + private bool m_DisplayDestructiveChangeWarning; + private AtlasSettings m_AtlasSettings; + private bool m_MaterialPresetsRequireUpdate; + + private string m_GlyphSearchPattern; + private List m_GlyphSearchList; + + private string m_CharacterSearchPattern; + private List m_CharacterSearchList; + + private string m_KerningTableSearchPattern; + private List m_KerningTableSearchList; + + private bool m_isSearchDirty; + + private const string k_UndoRedo = "UndoRedoPerformed"; + + private SerializedProperty m_AtlasPopulationMode_prop; + private SerializedProperty font_atlas_prop; + private SerializedProperty font_material_prop; + + private SerializedProperty m_AtlasRenderMode_prop; + private SerializedProperty m_SamplingPointSize_prop; + private SerializedProperty m_AtlasPadding_prop; + private SerializedProperty m_AtlasWidth_prop; + private SerializedProperty m_AtlasHeight_prop; + private SerializedProperty m_IsMultiAtlasTexturesEnabled_prop; + + private SerializedProperty fontWeights_prop; + + //private SerializedProperty fallbackFontAssets_prop; + private ReorderableList m_list; + + private SerializedProperty font_normalStyle_prop; + private SerializedProperty font_normalSpacing_prop; + + private SerializedProperty font_boldStyle_prop; + private SerializedProperty font_boldSpacing_prop; + + private SerializedProperty font_italicStyle_prop; + private SerializedProperty font_tabSize_prop; + + private SerializedProperty m_FaceInfo_prop; + private SerializedProperty m_GlyphTable_prop; + private SerializedProperty m_CharacterTable_prop; + + private TMP_FontFeatureTable m_FontFeatureTable; + private SerializedProperty m_FontFeatureTable_prop; + private SerializedProperty m_GlyphPairAdjustmentRecords_prop; + + private TMP_SerializedPropertyHolder m_SerializedPropertyHolder; + private SerializedProperty m_EmptyGlyphPairAdjustmentRecord_prop; + + private TMP_FontAsset m_fontAsset; + + private Material[] m_materialPresets; + + private bool isAssetDirty = false; + + private int errorCode; + + private System.DateTime timeStamp; + + + public void OnEnable() + { + m_FaceInfo_prop = serializedObject.FindProperty("m_FaceInfo"); + + font_atlas_prop = serializedObject.FindProperty("m_AtlasTextures").GetArrayElementAtIndex(0); + font_material_prop = serializedObject.FindProperty("material"); + + m_AtlasPopulationMode_prop = serializedObject.FindProperty("m_AtlasPopulationMode"); + m_AtlasRenderMode_prop = serializedObject.FindProperty("m_AtlasRenderMode"); + m_SamplingPointSize_prop = m_FaceInfo_prop.FindPropertyRelative("m_PointSize"); + m_AtlasPadding_prop = serializedObject.FindProperty("m_AtlasPadding"); + m_AtlasWidth_prop = serializedObject.FindProperty("m_AtlasWidth"); + m_AtlasHeight_prop = serializedObject.FindProperty("m_AtlasHeight"); + m_IsMultiAtlasTexturesEnabled_prop = serializedObject.FindProperty("m_IsMultiAtlasTexturesEnabled"); + + fontWeights_prop = serializedObject.FindProperty("m_FontWeightTable"); + + m_list = new ReorderableList(serializedObject, serializedObject.FindProperty("m_FallbackFontAssetTable"), true, true, true, true); + + m_list.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => + { + var element = m_list.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 2; + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none); + }; + + m_list.drawHeaderCallback = rect => + { + EditorGUI.LabelField(rect, "Fallback List"); + }; + + // Clean up fallback list in the event if contains null elements. + CleanFallbackFontAssetTable(); + + font_normalStyle_prop = serializedObject.FindProperty("normalStyle"); + font_normalSpacing_prop = serializedObject.FindProperty("normalSpacingOffset"); + + font_boldStyle_prop = serializedObject.FindProperty("boldStyle"); + font_boldSpacing_prop = serializedObject.FindProperty("boldSpacing"); + + font_italicStyle_prop = serializedObject.FindProperty("italicStyle"); + font_tabSize_prop = serializedObject.FindProperty("tabSize"); + + m_CharacterTable_prop = serializedObject.FindProperty("m_CharacterTable"); + m_GlyphTable_prop = serializedObject.FindProperty("m_GlyphTable"); + + m_FontFeatureTable_prop = serializedObject.FindProperty("m_FontFeatureTable"); + m_GlyphPairAdjustmentRecords_prop = m_FontFeatureTable_prop.FindPropertyRelative("m_GlyphPairAdjustmentRecords"); + + m_fontAsset = target as TMP_FontAsset; + m_FontFeatureTable = m_fontAsset.fontFeatureTable; + + // Upgrade Font Feature Table if necessary + if (m_fontAsset.m_KerningTable != null && m_fontAsset.m_KerningTable.kerningPairs != null && m_fontAsset.m_KerningTable.kerningPairs.Count > 0) + m_fontAsset.ReadFontAssetDefinition(); + + // Create serialized object to allow us to use a serialized property of an empty kerning pair. + m_SerializedPropertyHolder = CreateInstance(); + m_SerializedPropertyHolder.fontAsset = m_fontAsset; + SerializedObject internalSerializedObject = new SerializedObject(m_SerializedPropertyHolder); + m_EmptyGlyphPairAdjustmentRecord_prop = internalSerializedObject.FindProperty("glyphPairAdjustmentRecord"); + + m_materialPresets = TMP_EditorUtility.FindMaterialReferences(m_fontAsset); + + m_GlyphSearchList = new List(); + m_KerningTableSearchList = new List(); + + // Sort Font Asset Tables + m_fontAsset.SortAllTables(); + } + + + public void OnDisable() + { + // Revert changes if user closes or changes selection without having made a choice. + if (m_DisplayDestructiveChangeWarning) + { + m_DisplayDestructiveChangeWarning = false; + RestoreAtlasGenerationSettings(); + GUIUtility.keyboardControl = 0; + + serializedObject.ApplyModifiedProperties(); + } + } + + + public override void OnInspectorGUI() + { + //Debug.Log("OnInspectorGUI Called."); + + Event currentEvent = Event.current; + + serializedObject.Update(); + + Rect rect = EditorGUILayout.GetControlRect(false, 24); + float labelWidth = EditorGUIUtility.labelWidth; + float fieldWidth = EditorGUIUtility.fieldWidth; + + // FACE INFO PANEL + #region Face info + GUI.Label(rect, new GUIContent("Face Info - v" + m_fontAsset.version), TMP_UIStyleManager.sectionHeader); + + rect.x += rect.width - 132f; + rect.y += 2; + rect.width = 130f; + rect.height = 18f; + if (GUI.Button(rect, new GUIContent("Update Atlas Texture"))) + { + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(target as TMP_FontAsset); + } + + EditorGUI.indentLevel = 1; + GUI.enabled = false; // Lock UI + + // TODO : Consider creating a property drawer for these. + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_FamilyName")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_StyleName")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_PointSize")); + + GUI.enabled = true; + + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_Scale")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_LineHeight")); + + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_AscentLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_CapLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_MeanLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_Baseline")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_DescentLine")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_UnderlineOffset")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_UnderlineThickness")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_StrikethroughOffset")); + //EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("strikethroughThickness")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SuperscriptOffset")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SuperscriptSize")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SubscriptOffset")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_SubscriptSize")); + EditorGUILayout.PropertyField(m_FaceInfo_prop.FindPropertyRelative("m_TabWidth")); + // TODO : Add clamping for some of these values. + //subSize_prop.floatValue = Mathf.Clamp(subSize_prop.floatValue, 0.25f, 1f); + + EditorGUILayout.Space(); + #endregion + + // GENERATION SETTINGS + #region Generation Settings + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Generation Settings"), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.generationSettingsPanel = !UI_PanelState.generationSettingsPanel; + + GUI.Label(rect, (UI_PanelState.generationSettingsPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.generationSettingsPanel) + { + EditorGUI.indentLevel = 1; + + EditorGUI.BeginChangeCheck(); + Font sourceFont = (Font)EditorGUILayout.ObjectField("Source Font File", m_fontAsset.m_SourceFontFile_EditorRef, typeof(Font), false); + if (EditorGUI.EndChangeCheck()) + { + string guid = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(sourceFont)); + m_fontAsset.m_SourceFontFileGUID = guid; + m_fontAsset.m_SourceFontFile_EditorRef = sourceFont; + } + + EditorGUI.BeginDisabledGroup(sourceFont == null); + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_AtlasPopulationMode_prop, new GUIContent("Atlas Population Mode")); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + + bool isDatabaseRefreshRequired = false; + + if (m_AtlasPopulationMode_prop.intValue == 0) + { + m_fontAsset.sourceFontFile = null; + + //Set atlas textures to non readable. + for (int i = 0; i < m_fontAsset.atlasTextures.Length; i++) + { + Texture2D tex = m_fontAsset.atlasTextures[i]; + + if (tex != null && tex.isReadable) + FontEngineEditorUtilities.SetAtlasTextureIsReadable(tex, false); + } + + Debug.Log("Atlas Population mode set to [Static]."); + } + else if (m_AtlasPopulationMode_prop.intValue == 1) + { + if (m_fontAsset.m_SourceFontFile_EditorRef.dynamic == false) + { + Debug.LogWarning("Please set the [" + m_fontAsset.name + "] font to dynamic mode as this is required for Dynamic SDF support.", m_fontAsset.m_SourceFontFile_EditorRef); + m_AtlasPopulationMode_prop.intValue = 0; + + serializedObject.ApplyModifiedProperties(); + } + else + { + m_fontAsset.sourceFontFile = m_fontAsset.m_SourceFontFile_EditorRef; + + // Set atlas textures to non readable. + for (int i = 0; i < m_fontAsset.atlasTextures.Length; i++) + { + Texture2D tex = m_fontAsset.atlasTextures[i]; + + if (tex != null && tex.isReadable == false) + FontEngineEditorUtilities.SetAtlasTextureIsReadable(tex, true); + } + + Debug.Log("Atlas Population mode set to [Dynamic]."); + } + } + + if (isDatabaseRefreshRequired) + AssetDatabase.Refresh(); + + serializedObject.Update(); + isAssetDirty = true; + } + + // Save state of atlas settings + if (m_DisplayDestructiveChangeWarning == false) + { + SavedAtlasGenerationSettings(); + //Undo.RegisterCompleteObjectUndo(m_fontAsset, "Font Asset Changes"); + } + + EditorGUI.BeginDisabledGroup(m_AtlasPopulationMode_prop.intValue == (int)AtlasPopulationMode.Static); + { + EditorGUI.BeginChangeCheck(); + // TODO: Switch shaders depending on GlyphRenderMode. + EditorGUILayout.PropertyField(m_AtlasRenderMode_prop); + EditorGUILayout.PropertyField(m_SamplingPointSize_prop, new GUIContent("Sampling Point Size")); + if (EditorGUI.EndChangeCheck()) + { + m_DisplayDestructiveChangeWarning = true; + } + + // Changes to these properties require updating Material Presets for this font asset. + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_AtlasPadding_prop, new GUIContent("Padding")); + EditorGUILayout.IntPopup(m_AtlasWidth_prop, m_AtlasResolutionLabels, m_AtlasResolutions, new GUIContent("Atlas Width")); + EditorGUILayout.IntPopup(m_AtlasHeight_prop, m_AtlasResolutionLabels, m_AtlasResolutions, new GUIContent("Atlas Height")); + EditorGUILayout.PropertyField(m_IsMultiAtlasTexturesEnabled_prop, new GUIContent("Multi Atlas Textures", "Determines if the font asset will store glyphs in multiple atlas textures.")); + if (EditorGUI.EndChangeCheck()) + { + m_MaterialPresetsRequireUpdate = true; + m_DisplayDestructiveChangeWarning = true; + } + + if (m_DisplayDestructiveChangeWarning) + { + // These changes are destructive on the font asset + rect = EditorGUILayout.GetControlRect(false, 60); + rect.x += 15; + rect.width -= 15; + EditorGUI.HelpBox(rect, "Changing these settings will clear the font asset's character, glyph and texture data.", MessageType.Warning); + + if (GUI.Button(new Rect(rect.width - 140, rect.y + 36, 80, 18), new GUIContent("Apply"))) + { + m_DisplayDestructiveChangeWarning = false; + + // Update face info is sampling point size was changed. + if (m_AtlasSettings.pointSize != m_SamplingPointSize_prop.intValue) + { + FontEngine.LoadFontFace(m_fontAsset.sourceFontFile, m_SamplingPointSize_prop.intValue); + m_fontAsset.faceInfo = FontEngine.GetFaceInfo(); + } + + // Update material + m_fontAsset.material.SetFloat(ShaderUtilities.ID_TextureWidth, m_AtlasWidth_prop.intValue); + m_fontAsset.material.SetFloat(ShaderUtilities.ID_TextureHeight, m_AtlasHeight_prop.intValue); + m_fontAsset.material.SetFloat(ShaderUtilities.ID_GradientScale, m_AtlasPadding_prop.intValue + 1); + + // Update material presets if any of the relevant properties have been changed. + if (m_MaterialPresetsRequireUpdate) + { + m_MaterialPresetsRequireUpdate = false; + + Material[] materialPresets = TMP_EditorUtility.FindMaterialReferences(m_fontAsset); + for (int i = 0; i < materialPresets.Length; i++) + { + Material mat = materialPresets[i]; + + mat.SetFloat(ShaderUtilities.ID_TextureWidth, m_AtlasWidth_prop.intValue); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, m_AtlasHeight_prop.intValue); + mat.SetFloat(ShaderUtilities.ID_GradientScale, m_AtlasPadding_prop.intValue + 1); + } + } + + m_fontAsset.UpdateFontAssetData(); + GUIUtility.keyboardControl = 0; + isAssetDirty = true; + + // Update Font Asset Creation Settings to reflect new changes. + UpdateFontAssetCreationSettings(); + + // TODO: Clear undo buffers. + //Undo.ClearUndo(m_fontAsset); + } + + if (GUI.Button(new Rect(rect.width - 56, rect.y + 36, 80, 18), new GUIContent("Revert"))) + { + m_DisplayDestructiveChangeWarning = false; + RestoreAtlasGenerationSettings(); + GUIUtility.keyboardControl = 0; + + // TODO: Clear undo buffers. + //Undo.ClearUndo(m_fontAsset); + } + } + } + EditorGUI.EndDisabledGroup(); + } + EditorGUI.EndDisabledGroup(); + EditorGUILayout.Space(); + } + #endregion + + // ATLAS & MATERIAL PANEL + #region Atlas & Material + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Atlas & Material"), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fontAtlasInfoPanel = !UI_PanelState.fontAtlasInfoPanel; + + GUI.Label(rect, (UI_PanelState.fontAtlasInfoPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fontAtlasInfoPanel) + { + EditorGUI.indentLevel = 1; + + GUI.enabled = false; + EditorGUILayout.PropertyField(font_atlas_prop, new GUIContent("Font Atlas")); + EditorGUILayout.PropertyField(font_material_prop, new GUIContent("Font Material")); + GUI.enabled = true; + EditorGUILayout.Space(); + } + #endregion + + string evt_cmd = Event.current.commandName; // Get Current Event CommandName to check for Undo Events + + // FONT WEIGHT PANEL + #region Font Weights + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Font Weights", "The Font Assets that will be used for different font weights and the settings used to simulate a typeface when no asset is available."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fontWeightPanel = !UI_PanelState.fontWeightPanel; + + GUI.Label(rect, (UI_PanelState.fontWeightPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fontWeightPanel) + { + EditorGUIUtility.labelWidth *= 0.75f; + EditorGUIUtility.fieldWidth *= 0.25f; + + EditorGUILayout.BeginVertical(); + EditorGUI.indentLevel = 1; + rect = EditorGUILayout.GetControlRect(true); + rect.x += EditorGUIUtility.labelWidth; + rect.width = (rect.width - EditorGUIUtility.labelWidth) / 2f; + GUI.Label(rect, "Regular Typeface", EditorStyles.label); + rect.x += rect.width; + GUI.Label(rect, "Italic Typeface", EditorStyles.label); + + EditorGUI.indentLevel = 1; + + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(1), new GUIContent("100 - Thin")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(2), new GUIContent("200 - Extra-Light")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(3), new GUIContent("300 - Light")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(4), new GUIContent("400 - Regular")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(5), new GUIContent("500 - Medium")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(6), new GUIContent("600 - Semi-Bold")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(7), new GUIContent("700 - Bold")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(8), new GUIContent("800 - Heavy")); + EditorGUILayout.PropertyField(fontWeights_prop.GetArrayElementAtIndex(9), new GUIContent("900 - Black")); + + EditorGUILayout.EndVertical(); + + EditorGUILayout.Space(); + + EditorGUILayout.BeginVertical(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(font_normalStyle_prop, new GUIContent("Normal Weight")); + font_normalStyle_prop.floatValue = Mathf.Clamp(font_normalStyle_prop.floatValue, -3.0f, 3.0f); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + + // Modify the material property on matching material presets. + for (int i = 0; i < m_materialPresets.Length; i++) + m_materialPresets[i].SetFloat("_WeightNormal", font_normalStyle_prop.floatValue); + } + + EditorGUILayout.PropertyField(font_boldStyle_prop, new GUIContent("Bold Weight")); + font_boldStyle_prop.floatValue = Mathf.Clamp(font_boldStyle_prop.floatValue, -3.0f, 3.0f); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + + // Modify the material property on matching material presets. + for (int i = 0; i < m_materialPresets.Length; i++) + m_materialPresets[i].SetFloat("_WeightBold", font_boldStyle_prop.floatValue); + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(font_normalSpacing_prop, new GUIContent("Spacing Offset")); + font_normalSpacing_prop.floatValue = Mathf.Clamp(font_normalSpacing_prop.floatValue, -100, 100); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + } + + EditorGUILayout.PropertyField(font_boldSpacing_prop, new GUIContent("Bold Spacing")); + font_boldSpacing_prop.floatValue = Mathf.Clamp(font_boldSpacing_prop.floatValue, 0, 100); + if (GUI.changed || evt_cmd == k_UndoRedo) + { + GUI.changed = false; + } + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.PropertyField(font_italicStyle_prop, new GUIContent("Italic Style")); + font_italicStyle_prop.intValue = Mathf.Clamp(font_italicStyle_prop.intValue, 15, 60); + + EditorGUILayout.PropertyField(font_tabSize_prop, new GUIContent("Tab Multiple")); + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + EditorGUILayout.Space(); + } + + EditorGUIUtility.labelWidth = 0; + EditorGUIUtility.fieldWidth = 0; + #endregion + + // FALLBACK FONT ASSETS + #region Fallback Font Asset + rect = EditorGUILayout.GetControlRect(false, 24); + EditorGUI.indentLevel = 0; + if (GUI.Button(rect, new GUIContent("Fallback Font Assets", "Select the Font Assets that will be searched and used as fallback when characters are missing from this font asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fallbackFontAssetPanel = !UI_PanelState.fallbackFontAssetPanel; + + GUI.Label(rect, (UI_PanelState.fallbackFontAssetPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fallbackFontAssetPanel) + { + EditorGUIUtility.labelWidth = 120; + EditorGUI.indentLevel = 0; + + m_list.DoLayoutList(); + EditorGUILayout.Space(); + } + #endregion + + // CHARACTER TABLE TABLE + #region Character Table + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + int characterCount = m_fontAsset.characterTable.Count; + + if (GUI.Button(rect, new GUIContent("Character Table [" + characterCount + "]" + (rect.width > 320 ? " Characters" : ""), "List of characters contained in this font asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.characterTablePanel = !UI_PanelState.characterTablePanel; + + GUI.Label(rect, (UI_PanelState.characterTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.characterTablePanel) + { + int arraySize = m_CharacterTable_prop.arraySize; + int itemsPerPage = 15; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 130f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Character Search", m_CharacterSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_isSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + m_CharacterSearchPattern = searchPattern; + + // Search Character Table for potential matches + SearchCharacterTable (m_CharacterSearchPattern, ref m_CharacterSearchList); + } + else + m_CharacterSearchPattern = null; + + m_isSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_CharacterSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_CharacterSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + arraySize = m_CharacterSearchList.Count; + + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + // Display Character Table Elements + if (arraySize > 0) + { + // Display each character entry using the CharacterPropertyDrawer. + for (int i = itemsPerPage * m_CurrentCharacterPage; i < arraySize && i < itemsPerPage * (m_CurrentCharacterPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + elementIndex = m_CharacterSearchList[i]; + + SerializedProperty characterProperty = m_CharacterTable_prop.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + EditorGUI.BeginDisabledGroup(i != m_SelectedCharacterRecord); + { + EditorGUILayout.PropertyField(characterProperty); + } + EditorGUI.EndDisabledGroup(); + + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedCharacterRecord == i) + m_SelectedCharacterRecord = -1; + else + { + m_SelectedCharacterRecord = i; + m_AddCharacterWarning.isEnabled = false; + m_unicodeHexLabel = k_placeholderUnicodeHex; + GUIUtility.keyboardControl = 0; + } + } + + // Draw Selection Highlight and Glyph Options + if (m_SelectedCharacterRecord == i) + { + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw Glyph management options + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + float optionAreaWidth = controlRect.width * 0.6f; + float btnWidth = optionAreaWidth / 3; + + Rect position = new Rect(controlRect.x + controlRect.width * .4f, controlRect.y, btnWidth, controlRect.height); + + // Copy Selected Glyph to Target Glyph ID + GUI.enabled = !string.IsNullOrEmpty(m_dstUnicode); + if (GUI.Button(position, new GUIContent("Copy to"))) + { + GUIUtility.keyboardControl = 0; + + // Convert Hex Value to Decimal + int dstGlyphID = TMP_TextUtilities.StringHexToInt(m_dstUnicode); + + //Add new glyph at target Unicode hex id. + if (!AddNewCharacter(elementIndex, dstGlyphID)) + { + m_AddCharacterWarning.isEnabled = true; + m_AddCharacterWarning.expirationTime = EditorApplication.timeSinceStartup + 1; + } + + m_dstUnicode = string.Empty; + m_isSearchDirty = true; + + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset); + } + + // Target Glyph ID + GUI.enabled = true; + position.x += btnWidth; + + GUI.SetNextControlName("CharacterID_Input"); + m_dstUnicode = EditorGUI.TextField(position, m_dstUnicode); + + // Placeholder text + EditorGUI.LabelField(position, new GUIContent(m_unicodeHexLabel, "The Unicode (Hex) ID of the duplicated Character"), TMP_UIStyleManager.label); + + // Only filter the input when the destination glyph ID text field has focus. + if (GUI.GetNameOfFocusedControl() == "CharacterID_Input") + { + m_unicodeHexLabel = string.Empty; + + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F')) + { + Event.current.character = '\0'; + } + } + else + { + m_unicodeHexLabel = k_placeholderUnicodeHex; + //m_dstUnicode = string.Empty; + } + + + // Remove Glyph + position.x += btnWidth; + if (GUI.Button(position, "Remove")) + { + GUIUtility.keyboardControl = 0; + + RemoveCharacterFromList(elementIndex); + + isAssetDirty = true; + m_SelectedCharacterRecord = -1; + m_isSearchDirty = true; + break; + } + + if (m_AddCharacterWarning.isEnabled && EditorApplication.timeSinceStartup < m_AddCharacterWarning.expirationTime) + { + EditorGUILayout.HelpBox("The Destination Character ID already exists", MessageType.Warning); + } + + } + } + } + + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + + EditorGUILayout.Space(); + } + #endregion + + // GLYPH TABLE + #region Glyph Table + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + GUIStyle glyphPanelStyle = new GUIStyle(EditorStyles.helpBox); + + int glyphCount = m_fontAsset.glyphTable.Count; + + if (GUI.Button(rect, new GUIContent("Glyph Table [" + glyphCount + "]" + (rect.width > 275 ? " Glyphs" : ""), "List of glyphs contained in this font asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.glyphTablePanel = !UI_PanelState.glyphTablePanel; + + GUI.Label(rect, (UI_PanelState.glyphTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.glyphTablePanel) + { + int arraySize = m_GlyphTable_prop.arraySize; + int itemsPerPage = 15; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 130f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Glyph Search", m_GlyphSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_isSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + m_GlyphSearchPattern = searchPattern; + + // Search Glyph Table for potential matches + SearchGlyphTable(m_GlyphSearchPattern, ref m_GlyphSearchList); + } + else + m_GlyphSearchPattern = null; + + m_isSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_GlyphSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_GlyphSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + arraySize = m_GlyphSearchList.Count; + + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + // Display Glyph Table Elements + + if (arraySize > 0) + { + // Display each GlyphInfo entry using the GlyphInfo property drawer. + for (int i = itemsPerPage * m_CurrentGlyphPage; i < arraySize && i < itemsPerPage * (m_CurrentGlyphPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + elementIndex = m_GlyphSearchList[i]; + + SerializedProperty glyphProperty = m_GlyphTable_prop.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(glyphPanelStyle); + + using (new EditorGUI.DisabledScope(i != m_SelectedGlyphRecord)) + { + EditorGUILayout.PropertyField(glyphProperty); + } + + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedGlyphRecord == i) + m_SelectedGlyphRecord = -1; + else + { + m_SelectedGlyphRecord = i; + m_AddGlyphWarning.isEnabled = false; + m_unicodeHexLabel = k_placeholderUnicodeHex; + GUIUtility.keyboardControl = 0; + } + } + + // Draw Selection Highlight and Glyph Options + if (m_SelectedGlyphRecord == i) + { + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw Glyph management options + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + float optionAreaWidth = controlRect.width * 0.6f; + float btnWidth = optionAreaWidth / 3; + + Rect position = new Rect(controlRect.x + controlRect.width * .4f, controlRect.y, btnWidth, controlRect.height); + + // Copy Selected Glyph to Target Glyph ID + GUI.enabled = !string.IsNullOrEmpty(m_dstGlyphID); + if (GUI.Button(position, new GUIContent("Copy to"))) + { + GUIUtility.keyboardControl = 0; + int dstGlyphID; + + // Convert Hex Value to Decimal + int.TryParse(m_dstGlyphID, out dstGlyphID); + + //Add new glyph at target Unicode hex id. + if (!AddNewGlyph(elementIndex, dstGlyphID)) + { + m_AddGlyphWarning.isEnabled = true; + m_AddGlyphWarning.expirationTime = EditorApplication.timeSinceStartup + 1; + } + + m_dstGlyphID = string.Empty; + m_isSearchDirty = true; + + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset); + } + + // Target Glyph ID + GUI.enabled = true; + position.x += btnWidth; + + GUI.SetNextControlName("GlyphID_Input"); + m_dstGlyphID = EditorGUI.TextField(position, m_dstGlyphID); + + // Placeholder text + EditorGUI.LabelField(position, new GUIContent(m_GlyphIDLabel, "The Glyph ID of the duplicated Glyph"), TMP_UIStyleManager.label); + + // Only filter the input when the destination glyph ID text field has focus. + if (GUI.GetNameOfFocusedControl() == "GlyphID_Input") + { + m_GlyphIDLabel = string.Empty; + + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9')) + { + Event.current.character = '\0'; + } + } + else + { + m_GlyphIDLabel = k_placeholderGlyphID; + //m_dstGlyphID = string.Empty; + } + + // Remove Glyph + position.x += btnWidth; + if (GUI.Button(position, "Remove")) + { + GUIUtility.keyboardControl = 0; + + RemoveGlyphFromList(elementIndex); + + isAssetDirty = true; + m_SelectedGlyphRecord = -1; + m_isSearchDirty = true; + break; + } + + if (m_AddGlyphWarning.isEnabled && EditorApplication.timeSinceStartup < m_AddGlyphWarning.expirationTime) + { + EditorGUILayout.HelpBox("The Destination Glyph ID already exists", MessageType.Warning); + } + + } + } + } + + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + + EditorGUILayout.Space(); + } + #endregion + + // FONT FEATURE TABLE + #region Font Feature Table + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + int adjustmentPairCount = m_fontAsset.fontFeatureTable.glyphPairAdjustmentRecords.Count; + + if (GUI.Button(rect, new GUIContent("Glyph Adjustment Table [" + adjustmentPairCount + "]" + (rect.width > 340 ? " Records" : ""), "List of glyph adjustment / advanced kerning pairs."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fontFeatureTablePanel = !UI_PanelState.fontFeatureTablePanel; + + GUI.Label(rect, (UI_PanelState.fontFeatureTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fontFeatureTablePanel) + { + int arraySize = m_GlyphPairAdjustmentRecords_prop.arraySize; + int itemsPerPage = 20; + + // Display Kerning Pair Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 150f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Adjustment Pair Search", m_KerningTableSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_isSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + m_KerningTableSearchPattern = searchPattern; + + // Search Glyph Table for potential matches + SearchKerningTable(m_KerningTableSearchPattern, ref m_KerningTableSearchList); + } + else + m_KerningTableSearchPattern = null; + + m_isSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_KerningTableSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_KerningTableSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_KerningTableSearchPattern)) + arraySize = m_KerningTableSearchList.Count; + + DisplayPageNavigation(ref m_CurrentKerningPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + if (arraySize > 0) + { + // Display each GlyphInfo entry using the GlyphInfo property drawer. + for (int i = itemsPerPage * m_CurrentKerningPage; i < arraySize && i < itemsPerPage * (m_CurrentKerningPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_KerningTableSearchPattern)) + elementIndex = m_KerningTableSearchList[i]; + + SerializedProperty pairAdjustmentRecordProperty = m_GlyphPairAdjustmentRecords_prop.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + using (new EditorGUI.DisabledScope(i != m_SelectedAdjustmentRecord)) + { + EditorGUILayout.PropertyField(pairAdjustmentRecordProperty, new GUIContent("Selectable")); + } + + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedAdjustmentRecord == i) + { + m_SelectedAdjustmentRecord = -1; + } + else + { + m_SelectedAdjustmentRecord = i; + GUIUtility.keyboardControl = 0; + } + } + + // Draw Selection Highlight and Kerning Pair Options + if (m_SelectedAdjustmentRecord == i) + { + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw Glyph management options + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + float optionAreaWidth = controlRect.width; + float btnWidth = optionAreaWidth / 4; + + Rect position = new Rect(controlRect.x + controlRect.width - btnWidth, controlRect.y, btnWidth, controlRect.height); + + // Remove Kerning pair + GUI.enabled = true; + if (GUI.Button(position, "Remove")) + { + GUIUtility.keyboardControl = 0; + + RemoveAdjustmentPairFromList(i); + + isAssetDirty = true; + m_SelectedAdjustmentRecord = -1; + m_isSearchDirty = true; + break; + } + } + } + } + + DisplayPageNavigation(ref m_CurrentKerningPage, arraySize, itemsPerPage); + + GUILayout.Space(5); + + // Add new kerning pair + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + EditorGUILayout.PropertyField(m_EmptyGlyphPairAdjustmentRecord_prop); + } + EditorGUILayout.EndVertical(); + + if (GUILayout.Button("Add New Glyph Adjustment Record")) + { + SerializedProperty firstAdjustmentRecordProperty = m_EmptyGlyphPairAdjustmentRecord_prop.FindPropertyRelative("m_FirstAdjustmentRecord"); + SerializedProperty secondAdjustmentRecordProperty = m_EmptyGlyphPairAdjustmentRecord_prop.FindPropertyRelative("m_SecondAdjustmentRecord"); + + uint firstGlyphIndex = (uint)firstAdjustmentRecordProperty.FindPropertyRelative("m_GlyphIndex").intValue; + uint secondGlyphIndex = (uint)secondAdjustmentRecordProperty.FindPropertyRelative("m_GlyphIndex").intValue; + + TMP_GlyphValueRecord firstValueRecord = GetValueRecord(firstAdjustmentRecordProperty.FindPropertyRelative("m_GlyphValueRecord")); + TMP_GlyphValueRecord secondValueRecord = GetValueRecord(secondAdjustmentRecordProperty.FindPropertyRelative("m_GlyphValueRecord")); + + errorCode = -1; + uint pairKey = secondGlyphIndex << 16 | firstGlyphIndex; + if (m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.ContainsKey(pairKey) == false) + { + TMP_GlyphPairAdjustmentRecord adjustmentRecord = new TMP_GlyphPairAdjustmentRecord(new TMP_GlyphAdjustmentRecord(firstGlyphIndex, firstValueRecord), new TMP_GlyphAdjustmentRecord(secondGlyphIndex, secondValueRecord)); + m_FontFeatureTable.m_GlyphPairAdjustmentRecords.Add(adjustmentRecord); + m_FontFeatureTable.m_GlyphPairAdjustmentRecordLookupDictionary.Add(pairKey, adjustmentRecord); + errorCode = 0; + } + + // Add glyphs and characters + TMP_Character character; + + uint firstCharacter = m_SerializedPropertyHolder.firstCharacter; + if (!m_fontAsset.characterLookupTable.ContainsKey(firstCharacter)) + m_fontAsset.TryAddCharacterInternal(firstCharacter, out character); + + uint secondCharacter = m_SerializedPropertyHolder.secondCharacter; + if (!m_fontAsset.characterLookupTable.ContainsKey(secondCharacter)) + m_fontAsset.TryAddCharacterInternal(secondCharacter, out character); + + // Sort Kerning Pairs & Reload Font Asset if new kerning pair was added. + if (errorCode != -1) + { + m_FontFeatureTable.SortGlyphPairAdjustmentRecords(); + serializedObject.ApplyModifiedProperties(); + isAssetDirty = true; + m_isSearchDirty = true; + } + else + { + timeStamp = System.DateTime.Now.AddSeconds(5); + } + + // Clear Add Kerning Pair Panel + // TODO + } + + if (errorCode == -1) + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label("Kerning Pair already exists!", TMP_UIStyleManager.label); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + + if (System.DateTime.Now > timeStamp) + errorCode = 0; + } + } + #endregion + + if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo || isAssetDirty) + { + // Delay callback until user has decided to Apply or Revert the changes. + if (m_DisplayDestructiveChangeWarning == false) + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, m_fontAsset); + + if (m_fontAsset.IsFontAssetLookupTablesDirty || evt_cmd == k_UndoRedo) + m_fontAsset.ReadFontAssetDefinition(); + + isAssetDirty = false; + EditorUtility.SetDirty(target); + } + + + // Clear selection if mouse event was not consumed. + GUI.enabled = true; + if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) + m_SelectedAdjustmentRecord = -1; + + } + + void CleanFallbackFontAssetTable() + { + SerializedProperty m_FallbackFontAsseTable = serializedObject.FindProperty("m_FallbackFontAssetTable"); + + bool isListDirty = false; + + int elementCount = m_FallbackFontAsseTable.arraySize; + + for (int i = 0; i < elementCount; i++) + { + SerializedProperty element = m_FallbackFontAsseTable.GetArrayElementAtIndex(i); + if (element.objectReferenceValue == null) + { + m_FallbackFontAsseTable.DeleteArrayElementAtIndex(i); + elementCount -= 1; + i -= 1; + + isListDirty = true; + } + } + + if (isListDirty) + { + serializedObject.ApplyModifiedProperties(); + serializedObject.Update(); + } + } + + void SavedAtlasGenerationSettings() + { + m_AtlasSettings.glyphRenderMode = (GlyphRenderMode)m_AtlasRenderMode_prop.intValue; + m_AtlasSettings.pointSize = m_SamplingPointSize_prop.intValue; + m_AtlasSettings.padding = m_AtlasPadding_prop.intValue; + m_AtlasSettings.atlasWidth = m_AtlasWidth_prop.intValue; + m_AtlasSettings.atlasHeight = m_AtlasHeight_prop.intValue; + } + + void RestoreAtlasGenerationSettings() + { + m_AtlasRenderMode_prop.intValue = (int)m_AtlasSettings.glyphRenderMode; + m_SamplingPointSize_prop.intValue = m_AtlasSettings.pointSize; + m_AtlasPadding_prop.intValue = m_AtlasSettings.padding; + m_AtlasWidth_prop.intValue = m_AtlasSettings.atlasWidth; + m_AtlasHeight_prop.intValue = m_AtlasSettings.atlasHeight; + } + + + void UpdateFontAssetCreationSettings() + { + m_fontAsset.m_CreationSettings.pointSize = m_SamplingPointSize_prop.intValue; + m_fontAsset.m_CreationSettings.renderMode = m_AtlasRenderMode_prop.intValue; + m_fontAsset.m_CreationSettings.padding = m_AtlasPadding_prop.intValue; + m_fontAsset.m_CreationSettings.atlasWidth = m_AtlasWidth_prop.intValue; + m_fontAsset.m_CreationSettings.atlasHeight = m_AtlasHeight_prop.intValue; + } + + + void UpdateCharacterData(SerializedProperty property, int index) + { + TMP_Character character = m_fontAsset.characterTable[index]; + + character.unicode = (uint)property.FindPropertyRelative("m_Unicode").intValue; + character.scale = property.FindPropertyRelative("m_Scale").floatValue; + + SerializedProperty glyphProperty = property.FindPropertyRelative("m_Glyph"); + character.glyph.index = (uint)glyphProperty.FindPropertyRelative("m_Index").intValue; + + SerializedProperty glyphRectProperty = glyphProperty.FindPropertyRelative("m_GlyphRect"); + character.glyph.glyphRect = new GlyphRect(glyphRectProperty.FindPropertyRelative("m_X").intValue, glyphRectProperty.FindPropertyRelative("m_Y").intValue, glyphRectProperty.FindPropertyRelative("m_Width").intValue, glyphRectProperty.FindPropertyRelative("m_Height").intValue); + + SerializedProperty glyphMetricsProperty = glyphProperty.FindPropertyRelative("m_Metrics"); + character.glyph.metrics = new GlyphMetrics(glyphMetricsProperty.FindPropertyRelative("m_Width").floatValue, glyphMetricsProperty.FindPropertyRelative("m_Height").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalBearingX").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalBearingY").floatValue, glyphMetricsProperty.FindPropertyRelative("m_HorizontalAdvance").floatValue); + + character.glyph.scale = glyphProperty.FindPropertyRelative("m_Scale").floatValue; + + character.glyph.atlasIndex = glyphProperty.FindPropertyRelative("m_AtlasIndex").intValue; + } + + + void UpdateGlyphData(SerializedProperty property, int index) + { + Glyph glyph = m_fontAsset.glyphTable[index]; + + glyph.index = (uint)property.FindPropertyRelative("m_Index").intValue; + + SerializedProperty glyphRect = property.FindPropertyRelative("m_GlyphRect"); + glyph.glyphRect = new GlyphRect(glyphRect.FindPropertyRelative("m_X").intValue, glyphRect.FindPropertyRelative("m_Y").intValue, glyphRect.FindPropertyRelative("m_Width").intValue, glyphRect.FindPropertyRelative("m_Height").intValue); + + SerializedProperty glyphMetrics = property.FindPropertyRelative("m_Metrics"); + glyph.metrics = new GlyphMetrics(glyphMetrics.FindPropertyRelative("m_Width").floatValue, glyphMetrics.FindPropertyRelative("m_Height").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue, glyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue); + + glyph.scale = property.FindPropertyRelative("m_Scale").floatValue; + } + + + void DisplayPageNavigation(ref int currentPage, int arraySize, int itemsPerPage) + { + Rect pagePos = EditorGUILayout.GetControlRect(false, 20); + pagePos.width /= 3; + + int shiftMultiplier = Event.current.shift ? 10 : 1; // Page + Shift goes 10 page forward + + // Previous Page + GUI.enabled = currentPage > 0; + + if (GUI.Button(pagePos, "Previous Page")) + currentPage -= 1 * shiftMultiplier; + + + // Page Counter + GUI.enabled = true; + pagePos.x += pagePos.width; + int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f); + GUI.Label(pagePos, "Page " + (currentPage + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel); + + // Next Page + pagePos.x += pagePos.width; + GUI.enabled = itemsPerPage * (currentPage + 1) < arraySize; + + if (GUI.Button(pagePos, "Next Page")) + currentPage += 1 * shiftMultiplier; + + // Clamp page range + currentPage = Mathf.Clamp(currentPage, 0, arraySize / itemsPerPage); + + GUI.enabled = true; + } + + + /// + /// + /// + /// + /// + bool AddNewGlyph(int srcIndex, int dstGlyphID) + { + // Make sure Destination Glyph ID doesn't already contain a Glyph + if (m_fontAsset.glyphLookupTable.ContainsKey((uint)dstGlyphID)) + return false; + + // Add new element to glyph list. + m_GlyphTable_prop.arraySize += 1; + + // Get a reference to the source glyph. + SerializedProperty sourceGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(srcIndex); + + int dstIndex = m_GlyphTable_prop.arraySize - 1; + + // Get a reference to the target / destination glyph. + SerializedProperty targetGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(dstIndex); + + CopyGlyphSerializedProperty(sourceGlyph, ref targetGlyph); + + // Update the ID of the glyph + targetGlyph.FindPropertyRelative("m_Index").intValue = dstGlyphID; + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.SortGlyphTable(); + + m_fontAsset.ReadFontAssetDefinition(); + + return true; + } + + /// + /// + /// + /// + void RemoveGlyphFromList(int index) + { + if (index > m_GlyphTable_prop.arraySize) + return; + + int targetGlyphIndex = m_GlyphTable_prop.GetArrayElementAtIndex(index).FindPropertyRelative("m_Index").intValue; + + m_GlyphTable_prop.DeleteArrayElementAtIndex(index); + + // Remove all characters referencing this glyph. + for (int i = 0; i < m_CharacterTable_prop.arraySize; i++) + { + int glyphIndex = m_CharacterTable_prop.GetArrayElementAtIndex(i).FindPropertyRelative("m_GlyphIndex").intValue; + + if (glyphIndex == targetGlyphIndex) + { + // Remove character + m_CharacterTable_prop.DeleteArrayElementAtIndex(i); + } + } + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.ReadFontAssetDefinition(); + } + + bool AddNewCharacter(int srcIndex, int dstGlyphID) + { + // Make sure Destination Glyph ID doesn't already contain a Glyph + if (m_fontAsset.characterLookupTable.ContainsKey((uint)dstGlyphID)) + return false; + + // Add new element to glyph list. + m_CharacterTable_prop.arraySize += 1; + + // Get a reference to the source glyph. + SerializedProperty sourceCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(srcIndex); + + int dstIndex = m_CharacterTable_prop.arraySize - 1; + + // Get a reference to the target / destination glyph. + SerializedProperty targetCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(dstIndex); + + CopyCharacterSerializedProperty(sourceCharacter, ref targetCharacter); + + // Update the ID of the glyph + targetCharacter.FindPropertyRelative("m_Unicode").intValue = dstGlyphID; + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.SortCharacterTable(); + + m_fontAsset.ReadFontAssetDefinition(); + + return true; + } + + void RemoveCharacterFromList(int index) + { + if (index > m_CharacterTable_prop.arraySize) + return; + + m_CharacterTable_prop.DeleteArrayElementAtIndex(index); + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.ReadFontAssetDefinition(); + } + + + // Check if any of the Style elements were clicked on. + private bool DoSelectionCheck(Rect selectionArea) + { + Event currentEvent = Event.current; + + switch (currentEvent.type) + { + case EventType.MouseDown: + if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0) + { + currentEvent.Use(); + return true; + } + + break; + } + + return false; + } + + TMP_GlyphValueRecord GetValueRecord(SerializedProperty property) + { + TMP_GlyphValueRecord record = new TMP_GlyphValueRecord(); + record.xPlacement = property.FindPropertyRelative("m_XPlacement").floatValue; + record.yPlacement = property.FindPropertyRelative("m_YPlacement").floatValue; + record.xAdvance = property.FindPropertyRelative("m_XAdvance").floatValue; + record.yAdvance = property.FindPropertyRelative("m_YAdvance").floatValue; + + return record; + } + + void RemoveAdjustmentPairFromList(int index) + { + if (index > m_GlyphPairAdjustmentRecords_prop.arraySize) + return; + + m_GlyphPairAdjustmentRecords_prop.DeleteArrayElementAtIndex(index); + + serializedObject.ApplyModifiedProperties(); + + m_fontAsset.ReadFontAssetDefinition(); + } + + /// + /// + /// + /// + /// + void CopyGlyphSerializedProperty(SerializedProperty srcGlyph, ref SerializedProperty dstGlyph) + { + // TODO : Should make a generic function which copies each of the properties. + dstGlyph.FindPropertyRelative("m_Index").intValue = srcGlyph.FindPropertyRelative("m_Index").intValue; + + // Glyph -> GlyphMetrics + SerializedProperty srcGlyphMetrics = srcGlyph.FindPropertyRelative("m_Metrics"); + SerializedProperty dstGlyphMetrics = dstGlyph.FindPropertyRelative("m_Metrics"); + + dstGlyphMetrics.FindPropertyRelative("m_Width").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Width").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_Height").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Height").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue; + + // Glyph -> GlyphRect + SerializedProperty srcGlyphRect = srcGlyph.FindPropertyRelative("m_GlyphRect"); + SerializedProperty dstGlyphRect = dstGlyph.FindPropertyRelative("m_GlyphRect"); + + dstGlyphRect.FindPropertyRelative("m_X").intValue = srcGlyphRect.FindPropertyRelative("m_X").intValue; + dstGlyphRect.FindPropertyRelative("m_Y").intValue = srcGlyphRect.FindPropertyRelative("m_Y").intValue; + dstGlyphRect.FindPropertyRelative("m_Width").intValue = srcGlyphRect.FindPropertyRelative("m_Width").intValue; + dstGlyphRect.FindPropertyRelative("m_Height").intValue = srcGlyphRect.FindPropertyRelative("m_Height").intValue; + + dstGlyph.FindPropertyRelative("m_Scale").floatValue = srcGlyph.FindPropertyRelative("m_Scale").floatValue; + dstGlyph.FindPropertyRelative("m_AtlasIndex").intValue = srcGlyph.FindPropertyRelative("m_AtlasIndex").intValue; + } + + + void CopyCharacterSerializedProperty(SerializedProperty source, ref SerializedProperty target) + { + // TODO : Should make a generic function which copies each of the properties. + int unicode = source.FindPropertyRelative("m_Unicode").intValue; + target.FindPropertyRelative("m_Unicode").intValue = unicode; + + int srcGlyphIndex = source.FindPropertyRelative("m_GlyphIndex").intValue; + target.FindPropertyRelative("m_GlyphIndex").intValue = srcGlyphIndex; + + target.FindPropertyRelative("m_Scale").floatValue = source.FindPropertyRelative("m_Scale").floatValue; + } + + + /// + /// + /// + /// + /// + void SearchGlyphTable (string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + + searchResults.Clear(); + + int arraySize = m_GlyphTable_prop.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceGlyph = m_GlyphTable_prop.GetArrayElementAtIndex(i); + + int id = sourceGlyph.FindPropertyRelative("m_Index").intValue; + + // Check for potential match against a character. + //if (searchPattern.Length == 1 && id == searchPattern[0]) + // searchResults.Add(i); + + // Check for potential match against decimal id + if (id.ToString().Contains(searchPattern)) + searchResults.Add(i); + + //if (id.ToString("x").Contains(searchPattern)) + // searchResults.Add(i); + + //if (id.ToString("X").Contains(searchPattern)) + // searchResults.Add(i); + } + } + + + void SearchCharacterTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + + searchResults.Clear(); + + int arraySize = m_CharacterTable_prop.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceCharacter = m_CharacterTable_prop.GetArrayElementAtIndex(i); + + int id = sourceCharacter.FindPropertyRelative("m_Unicode").intValue; + + // Check for potential match against a character. + if (searchPattern.Length == 1 && id == searchPattern[0]) + searchResults.Add(i); + else if (id.ToString("x").Contains(searchPattern)) + searchResults.Add(i); + else if (id.ToString("X").Contains(searchPattern)) + searchResults.Add(i); + + // Check for potential match against decimal id + //if (id.ToString().Contains(searchPattern)) + // searchResults.Add(i); + } + } + + + void SearchKerningTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + + searchResults.Clear(); + + // Lookup glyph index of potential characters contained in the search pattern. + uint firstGlyphIndex = 0; + TMP_Character firstCharacterSearch; + + if (searchPattern.Length > 0 && m_fontAsset.characterLookupTable.TryGetValue(searchPattern[0], out firstCharacterSearch)) + firstGlyphIndex = firstCharacterSearch.glyphIndex; + + uint secondGlyphIndex = 0; + TMP_Character secondCharacterSearch; + + if (searchPattern.Length > 1 && m_fontAsset.characterLookupTable.TryGetValue(searchPattern[1], out secondCharacterSearch)) + secondGlyphIndex = secondCharacterSearch.glyphIndex; + + int arraySize = m_GlyphPairAdjustmentRecords_prop.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty record = m_GlyphPairAdjustmentRecords_prop.GetArrayElementAtIndex(i); + + SerializedProperty firstAdjustmentRecord = record.FindPropertyRelative("m_FirstAdjustmentRecord"); + SerializedProperty secondAdjustmentRecord = record.FindPropertyRelative("m_SecondAdjustmentRecord"); + + int firstGlyph = firstAdjustmentRecord.FindPropertyRelative("m_GlyphIndex").intValue; + int secondGlyph = secondAdjustmentRecord.FindPropertyRelative("m_GlyphIndex").intValue; + + if (firstGlyphIndex == firstGlyph && secondGlyphIndex == secondGlyph) + searchResults.Add(i); + else if (searchPattern.Length == 1 && (firstGlyphIndex == firstGlyph || firstGlyphIndex == secondGlyph)) + searchResults.Add(i); + else if (firstGlyph.ToString().Contains(searchPattern)) + searchResults.Add(i); + else if (secondGlyph.ToString().Contains(searchPattern)) + searchResults.Add(i); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta new file mode 100644 index 0000000..9b26bae --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAssetEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 96b44f7d98314b139324a8a87eb66067 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs new file mode 100644 index 0000000..344965c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.IO; +using System.Collections; +using System.Collections.Generic; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using TMPro; + + +namespace TMPro +{ + public static class TMP_FontAsset_CreationMenu + { + [MenuItem("Assets/Create/TextMeshPro/Font Asset Variant", false, 105)] + public static void CreateFontAssetVariant() + { + Object target = Selection.activeObject; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(TMP_FontAsset)) + { + Debug.LogWarning("A Font file must first be selected in order to create a Font Asset."); + return; + } + + TMP_FontAsset sourceFontAsset = (TMP_FontAsset)target; + + string sourceFontFilePath = AssetDatabase.GetAssetPath(target); + + string folderPath = Path.GetDirectoryName(sourceFontFilePath); + string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath); + + string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " - Variant.asset"); + + // Set Texture and Material reference to the source font asset. + TMP_FontAsset fontAsset = ScriptableObject.Instantiate(sourceFontAsset); + AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName); + + fontAsset.atlasPopulationMode = AtlasPopulationMode.Static; + + // Initialize array for the font atlas textures. + fontAsset.atlasTextures = sourceFontAsset.atlasTextures; + fontAsset.material = sourceFontAsset.material; + + // Not sure if this is still necessary in newer versions of Unity. + EditorUtility.SetDirty(fontAsset); + + AssetDatabase.SaveAssets(); + } + + + /* + [MenuItem("Assets/Create/TextMeshPro/Font Asset Fallback", false, 105)] + public static void CreateFallbackFontAsset() + { + Object target = Selection.activeObject; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(TMP_FontAsset)) + { + Debug.LogWarning("A Font file must first be selected in order to create a Font Asset."); + return; + } + + TMP_FontAsset sourceFontAsset = (TMP_FontAsset)target; + + string sourceFontFilePath = AssetDatabase.GetAssetPath(target); + + string folderPath = Path.GetDirectoryName(sourceFontFilePath); + string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath); + + string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " - Fallback.asset"); + + //// Create new TM Font Asset. + TMP_FontAsset fontAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName); + + fontAsset.version = "1.1.0"; + + fontAsset.faceInfo = sourceFontAsset.faceInfo; + + fontAsset.m_SourceFontFileGUID = sourceFontAsset.m_SourceFontFileGUID; + fontAsset.m_SourceFontFile_EditorRef = sourceFontAsset.m_SourceFontFile_EditorRef; + fontAsset.atlasPopulationMode = TMP_FontAsset.AtlasPopulationMode.Dynamic; + + int atlasWidth = fontAsset.atlasWidth = sourceFontAsset.atlasWidth; + int atlasHeight = fontAsset.atlasHeight = sourceFontAsset.atlasHeight; + int atlasPadding = fontAsset.atlasPadding = sourceFontAsset.atlasPadding; + fontAsset.atlasRenderMode = sourceFontAsset.atlasRenderMode; + + // Initialize array for the font atlas textures. + fontAsset.atlasTextures = new Texture2D[1]; + + // Create and add font atlas texture + Texture2D texture = new Texture2D(atlasWidth, atlasHeight, TextureFormat.Alpha8, false); + Color32[] colors = new Color32[atlasWidth * atlasHeight]; + texture.SetPixels32(colors); + + texture.name = assetName + " Atlas"; + fontAsset.atlasTextures[0] = texture; + AssetDatabase.AddObjectToAsset(texture, fontAsset); + + // Add free rectangle of the size of the texture. + int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + fontAsset.m_FreeGlyphRects = new List() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) }; + fontAsset.m_UsedGlyphRects = new List(); + + // Create new Material and Add it as Sub-Asset + Material tmp_material = new Material(sourceFontAsset.material); + + tmp_material.name = texture.name + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture); + tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth); + tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight); + + tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier); + + tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + // Add Font Asset Creation Settings + // TODO + + // Not sure if this is still necessary in newer versions of Unity. + EditorUtility.SetDirty(fontAsset); + + AssetDatabase.SaveAssets(); + } + */ + + //[MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", true)] + //public static bool CreateFontAssetMenuValidation() + //{ + // return false; + //} + + [MenuItem("Assets/Create/TextMeshPro/Font Asset #%F12", false, 100)] + public static void CreateFontAsset() + { + Object target = Selection.activeObject; + + // Make sure the selection is a font file + if (target == null || target.GetType() != typeof(Font)) + { + Debug.LogWarning("A Font file must first be selected in order to create a Font Asset."); + return; + } + + Font sourceFont = (Font)target; + + string sourceFontFilePath = AssetDatabase.GetAssetPath(target); + + string folderPath = Path.GetDirectoryName(sourceFontFilePath); + string assetName = Path.GetFileNameWithoutExtension(sourceFontFilePath); + + string newAssetFilePathWithName = AssetDatabase.GenerateUniqueAssetPath(folderPath + "/" + assetName + " SDF.asset"); + + // Initialize FontEngine + FontEngine.InitializeFontEngine(); + + // Load Font Face + if (FontEngine.LoadFontFace(sourceFont, 90) != FontEngineError.Success) + { + Debug.LogWarning("Unable to load font face for [" + sourceFont.name + "]. Make sure \"Include Font Data\" is enabled in the Font Import Settings.", sourceFont); + return; + } + + // Create new Font Asset + TMP_FontAsset fontAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(fontAsset, newAssetFilePathWithName); + + fontAsset.version = "1.1.0"; + + fontAsset.faceInfo = FontEngine.GetFaceInfo(); + + // Set font reference and GUID + fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(sourceFontFilePath); + fontAsset.m_SourceFontFile_EditorRef = sourceFont; + fontAsset.atlasPopulationMode = AtlasPopulationMode.Dynamic; + + // Default atlas resolution is 1024 x 1024. + int atlasWidth = fontAsset.atlasWidth = 1024; + int atlasHeight = fontAsset.atlasHeight = 1024; + int atlasPadding = fontAsset.atlasPadding = 9; + fontAsset.atlasRenderMode = GlyphRenderMode.SDFAA; + + // Initialize array for the font atlas textures. + fontAsset.atlasTextures = new Texture2D[1]; + + // Create atlas texture of size zero. + Texture2D texture = new Texture2D(0, 0, TextureFormat.Alpha8, false); + + texture.name = assetName + " Atlas"; + fontAsset.atlasTextures[0] = texture; + AssetDatabase.AddObjectToAsset(texture, fontAsset); + + // Add free rectangle of the size of the texture. + int packingModifier = ((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + fontAsset.freeGlyphRects = new List() { new GlyphRect(0, 0, atlasWidth - packingModifier, atlasHeight - packingModifier) }; + fontAsset.usedGlyphRects = new List(); + + // Create new Material and Add it as Sub-Asset + Shader default_Shader = Shader.Find("TextMeshPro/Distance Field"); + Material tmp_material = new Material(default_Shader); + + tmp_material.name = texture.name + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, texture); + tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, atlasWidth); + tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, atlasHeight); + + tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, atlasPadding + packingModifier); + + tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + // Add Font Asset Creation Settings + fontAsset.creationSettings = new FontAssetCreationSettings(fontAsset.m_SourceFontFileGUID, fontAsset.faceInfo.pointSize, 0, atlasPadding, 0, 1024, 1024, 7, string.Empty, (int)GlyphRenderMode.SDFAA); + + // Not sure if this is still necessary in newer versions of Unity. + EditorUtility.SetDirty(fontAsset); + + AssetDatabase.SaveAssets(); + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta new file mode 100644 index 0000000..57a3fce --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_FontAsset_CreationMenu.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7496af95dfe67cf429ac65edaaf99106 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs new file mode 100644 index 0000000..69ac6f8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs @@ -0,0 +1,391 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor; +using System.Collections; +using System.Text.RegularExpressions; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_GlyphPairAdjustmentRecord))] + public class TMP_GlyphPairAdjustmentRecordPropertyDrawer : PropertyDrawer + { + private bool isEditingEnabled = false; + private bool isSelectable = false; + + private string m_FirstCharacter = string.Empty; + private string m_SecondCharacter = string.Empty; + private string m_PreviousInput; + + static GUIContent s_CharacterTextFieldLabel = new GUIContent("Char:", "Enter the character or its UTF16 or UTF32 Unicode character escape sequence. For UTF16 use \"\\uFF00\" and for UTF32 use \"\\UFF00FF00\" representation."); + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_FirstAdjustmentRecord = property.FindPropertyRelative("m_FirstAdjustmentRecord"); + SerializedProperty prop_SecondAdjustmentRecord = property.FindPropertyRelative("m_SecondAdjustmentRecord"); + + SerializedProperty prop_FirstGlyphIndex = prop_FirstAdjustmentRecord.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_FirstGlyphValueRecord = prop_FirstAdjustmentRecord.FindPropertyRelative("m_GlyphValueRecord"); + + SerializedProperty prop_SecondGlyphIndex = prop_SecondAdjustmentRecord.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_SecondGlyphValueRecord = prop_SecondAdjustmentRecord.FindPropertyRelative("m_GlyphValueRecord"); + + SerializedProperty prop_FontFeatureLookupFlags = property.FindPropertyRelative("m_FeatureLookupFlags"); + + position.yMin += 2; + + float width = position.width / 2; + float padding = 5.0f; + + Rect rect; + + isEditingEnabled = GUI.enabled; + isSelectable = label.text == "Selectable" ? true : false; + + if (isSelectable) + GUILayoutUtility.GetRect(position.width, 75); + else + GUILayoutUtility.GetRect(position.width, 55); + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + // First Glyph + GUI.enabled = isEditingEnabled; + if (isSelectable) + { + rect = new Rect(position.x + 70, position.y, position.width, 49); + + float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_FirstGlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 60, 64f, 18f), new GUIContent("ID: " + prop_FirstGlyphIndex.intValue + ""), style); + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 30f; + + rect = new Rect(position.x + 70, position.y + 10, (width - 70) - padding, 18); + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX:")); + + //rect.y += 20; + //EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YAdvance"), new GUIContent("AY:")); + + DrawGlyph((uint)prop_FirstGlyphIndex.intValue, new Rect(position.x, position.y, position.width, position.height), property); + } + else + { + rect = new Rect(position.x, position.y, width / 2 * 0.8f - padding, 18); + EditorGUIUtility.labelWidth = 40f; + + // First Character Lookup + GUI.SetNextControlName("FirstCharacterField"); + EditorGUI.BeginChangeCheck(); + string firstCharacter = EditorGUI.TextField(rect, s_CharacterTextFieldLabel, m_FirstCharacter); + + if (GUI.GetNameOfFocusedControl() == "FirstCharacterField") + { + if (ValidateInput(firstCharacter)) + { + //Debug.Log("1st Unicode value: [" + firstCharacter + "]"); + + uint unicode = GetUnicodeCharacter(firstCharacter); + + // Lookup glyph index + TMP_SerializedPropertyHolder propertyHolder = property.serializedObject.targetObject as TMP_SerializedPropertyHolder; + TMP_FontAsset fontAsset = propertyHolder.fontAsset; + if (fontAsset != null) + { + prop_FirstGlyphIndex.intValue = (int)fontAsset.GetGlyphIndex(unicode); + propertyHolder.firstCharacter = unicode; + } + } + } + + if (EditorGUI.EndChangeCheck()) + m_FirstCharacter = firstCharacter; + + // First Glyph Index + rect.x += width / 2 * 0.8f; + + EditorGUIUtility.labelWidth = 25f; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, prop_FirstGlyphIndex, new GUIContent("ID:")); + if (EditorGUI.EndChangeCheck()) + { + + } + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 25f; + + rect = new Rect(position.x, position.y + 20, width * 0.5f - padding, 18); + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX")); + + rect.x += width * 0.5f; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY")); + + rect.x = position.x; + rect.y += 20; + EditorGUI.PropertyField(rect, prop_FirstGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX")); + + //rect.x += width * 0.5f; + //EditorGUI.PropertyField(rect, prop_FirstGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY")); + + } + + + // Second Glyph + GUI.enabled = isEditingEnabled; + if (isSelectable) + { + float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_SecondGlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.width / 2 + 20 + (64 - labelWidth) / 2, position.y + 60, 64f, 18f), new GUIContent("ID: " + prop_SecondGlyphIndex.intValue + ""), style); + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 30f; + + rect = new Rect(position.width / 2 + 20 + 70, position.y + 10, (width - 70) - padding, 18); + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY:")); + + rect.y += 20; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX:")); + + //rect.y += 20; + //EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY")); + + DrawGlyph((uint)prop_SecondGlyphIndex.intValue, new Rect(position.width / 2 + 20, position.y, position.width, position.height), property); + } + else + { + rect = new Rect(position.width / 2 + 20, position.y, width / 2 * 0.8f - padding, 18); + EditorGUIUtility.labelWidth = 40f; + + // Second Character Lookup + GUI.SetNextControlName("SecondCharacterField"); + EditorGUI.BeginChangeCheck(); + string secondCharacter = EditorGUI.TextField(rect, s_CharacterTextFieldLabel, m_SecondCharacter); + + if (GUI.GetNameOfFocusedControl() == "SecondCharacterField") + { + if (ValidateInput(secondCharacter)) + { + //Debug.Log("2nd Unicode value: [" + secondCharacter + "]"); + + uint unicode = GetUnicodeCharacter(secondCharacter); + + // Lookup glyph index + TMP_SerializedPropertyHolder propertyHolder = property.serializedObject.targetObject as TMP_SerializedPropertyHolder; + TMP_FontAsset fontAsset = propertyHolder.fontAsset; + if (fontAsset != null) + { + prop_SecondGlyphIndex.intValue = (int)fontAsset.GetGlyphIndex(unicode); + propertyHolder.secondCharacter = unicode; + } + } + } + + if (EditorGUI.EndChangeCheck()) + m_SecondCharacter = secondCharacter; + + // Second Glyph Index + rect.x += width / 2 * 0.8f; + + EditorGUIUtility.labelWidth = 25f; + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(rect, prop_SecondGlyphIndex, new GUIContent("ID:")); + if (EditorGUI.EndChangeCheck()) + { + + } + + GUI.enabled = isEditingEnabled; + EditorGUIUtility.labelWidth = 25f; + + rect = new Rect(position.width / 2 + 20, position.y + 20, width * 0.5f - padding, 18); + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XPlacement"), new GUIContent("OX")); + + rect.x += width * 0.5f; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_YPlacement"), new GUIContent("OY")); + + rect.x = position.width / 2 + 20; + rect.y += 20; + EditorGUI.PropertyField(rect, prop_SecondGlyphValueRecord.FindPropertyRelative("m_XAdvance"), new GUIContent("AX")); + + //rect.x += width * 0.5f; + //EditorGUI.PropertyField(rect, prop_SecondGlyphAdjustment.FindPropertyRelative("m_YAdvance"), new GUIContent("AY")); + } + + // Font Feature Lookup Flags + if (isSelectable) + { + EditorGUIUtility.labelWidth = 55f; + + rect.x = position.width - 255; + rect.y += 23; + rect.width = 270; // width - 70 - padding; + + FontFeatureLookupFlags flags = (FontFeatureLookupFlags)prop_FontFeatureLookupFlags.intValue; + + EditorGUI.BeginChangeCheck(); + flags = (FontFeatureLookupFlags)EditorGUI.EnumFlagsField(rect, new GUIContent("Options:"), flags); + if (EditorGUI.EndChangeCheck()) + { + prop_FontFeatureLookupFlags.intValue = (int)flags; + } + } + + } + + bool ValidateInput(string source) + { + int length = string.IsNullOrEmpty(source) ? 0 : source.Length; + + ////Filter out unwanted characters. + Event evt = Event.current; + + char c = evt.character; + + if (c != '\0') + { + switch (length) + { + case 0: + break; + case 1: + if (source != m_PreviousInput) + return true; + + if ((source[0] == '\\' && (c == 'u' || c == 'U')) == false) + evt.character = '\0'; + + break; + case 2: + case 3: + case 4: + case 5: + if ((c < '0' || c > '9') && (c < 'a' || c > 'f') && (c < 'A' || c > 'F')) + evt.character = '\0'; + break; + case 6: + case 7: + case 8: + case 9: + if (source[1] == 'u' || (c < '0' || c > '9') && (c < 'a' || c > 'f') && (c < 'A' || c > 'F')) + evt.character = '\0'; + + // Validate input + if (length == 6 && source[1] == 'u' && source != m_PreviousInput) + return true; + break; + case 10: + if (source != m_PreviousInput) + return true; + + evt.character = '\0'; + break; + } + } + + m_PreviousInput = source; + + return false; + } + + uint GetUnicodeCharacter (string source) + { + uint unicode; + + if (source.Length == 1) + unicode = source[0]; + else if (source.Length == 6) + unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\u", "")); + else + unicode = (uint)TMP_TextUtilities.StringHexToInt(source.Replace("\\U", "")); + + return unicode; + } + + void DrawGlyph(uint glyphIndex, Rect position, SerializedProperty property) + { + // Get a reference to the font asset + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset == null) + return; + + Glyph glyph; + + // Check if glyph is present in the atlas texture. + if (!fontAsset.glyphLookupTable.TryGetValue(glyphIndex, out glyph)) + return; + + // Get the atlas index of the glyph and lookup its atlas texture + int atlasIndex = glyph.atlasIndex; + Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null; + + if (atlasTexture == null) + return; + + Material mat; + if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + mat = TMP_FontAssetEditor.internalBitmapMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + } + else + { + mat = TMP_FontAssetEditor.internalSDFMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1); + } + + // Draw glyph from atlas texture. + Rect glyphDrawPosition = new Rect(position.x, position.y + 2, 64, 60); + + GlyphRect glyphRect = glyph.glyphRect; + + int padding = fontAsset.atlasPadding; + + int glyphOriginX = glyphRect.x - padding; + int glyphOriginY = glyphRect.y - padding; + int glyphWidth = glyphRect.width + padding * 2; + int glyphHeight = glyphRect.height + padding * 2; + + float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine; + float scale = glyphDrawPosition.width / normalizedHeight; + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)glyphOriginX / atlasTexture.width, (float)glyphOriginY / atlasTexture.height, (float)glyphWidth / atlasTexture.width, (float)glyphHeight / atlasTexture.height); + + if (Event.current.type == EventType.Repaint) + { + glyphDrawPosition.x += (glyphDrawPosition.width - glyphWidth * scale) / 2; + glyphDrawPosition.y += (glyphDrawPosition.height - glyphHeight * scale) / 2; + glyphDrawPosition.width = glyphWidth * scale; + glyphDrawPosition.height = glyphHeight * scale; + + // Could switch to using the default material of the font asset which would require passing scale to the shader. + Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat); + } + } + + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta new file mode 100644 index 0000000..b95203f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPairAdjustmentRecordPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d256fa541faf5d4409992c631adb98a1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs new file mode 100644 index 0000000..d8d3700 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs @@ -0,0 +1,122 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(Glyph))] + public class TMP_GlyphPropertyDrawer : PropertyDrawer + { + private string k_ColorProperty = "_Color"; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_Index"); + SerializedProperty prop_GlyphMetrics = property.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect"); + SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale"); + SerializedProperty prop_AtlasIndex = property.FindPropertyRelative("m_AtlasIndex"); + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + Rect rect = new Rect(position.x + 70, position.y, position.width, 49); + + float labelWidth = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_GlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 85, 64f, 18f), new GUIContent("ID: " + prop_GlyphIndex.intValue + ""), style); + //EditorGUIUtility.labelWidth = 22f; + //EditorGUI.DelayedIntField(new Rect(position.x + (64 - labelWidth) / 2, position.y + 89, 58f, 18f), prop_GlyphIndex, new GUIContent("ID:")); + + // We get Rect since a valid position may not be provided by the caller. + EditorGUI.PropertyField(new Rect(rect.x, rect.y, position.width, 49), prop_GlyphRect); + + rect.y += 45; + EditorGUI.PropertyField(rect, prop_GlyphMetrics); + + EditorGUIUtility.labelWidth = 40f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 65, 75, 18), prop_Scale, new GUIContent("Scale:")); // new GUIContent("Scale: " + prop_Scale.floatValue + ""), style); + + EditorGUIUtility.labelWidth = 74f; + EditorGUI.PropertyField(new Rect(rect.x + 85, rect.y + 65, 95, 18), prop_AtlasIndex, new GUIContent("Atlas Index:")); // new GUIContent("Atlas Index: " + prop_AtlasIndex.intValue + ""), style); + + DrawGlyph(position, property); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 130f; + } + + void DrawGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the sprite texture + TMP_FontAsset fontAsset = property.serializedObject.targetObject as TMP_FontAsset; + + if (fontAsset == null) + return; + + // Get reference to atlas texture. + int atlasIndex = property.FindPropertyRelative("m_AtlasIndex").intValue; + Texture2D atlasTexture = fontAsset.atlasTextures.Length > atlasIndex ? fontAsset.atlasTextures[atlasIndex] : null; + + if (atlasTexture == null) + return; + + Material mat; + if (((GlyphRasterModes)fontAsset.atlasRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + mat = TMP_FontAssetEditor.internalBitmapMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetColor(k_ColorProperty, Color.white); + } + else + { + mat = TMP_FontAssetEditor.internalSDFMaterial; + + if (mat == null) + return; + + mat.mainTexture = atlasTexture; + mat.SetFloat(ShaderUtilities.ID_GradientScale, fontAsset.atlasPadding + 1); + } + + // Draw glyph from atlas texture. + Rect glyphDrawPosition = new Rect(position.x, position.y + 2, 64, 80); + + SerializedProperty glyphRectProperty = property.FindPropertyRelative("m_GlyphRect"); + + int padding = fontAsset.atlasPadding; + + int glyphOriginX = glyphRectProperty.FindPropertyRelative("m_X").intValue - padding; + int glyphOriginY = glyphRectProperty.FindPropertyRelative("m_Y").intValue - padding; + int glyphWidth = glyphRectProperty.FindPropertyRelative("m_Width").intValue + padding * 2; + int glyphHeight = glyphRectProperty.FindPropertyRelative("m_Height").intValue + padding * 2; + + float normalizedHeight = fontAsset.faceInfo.ascentLine - fontAsset.faceInfo.descentLine; + float scale = glyphDrawPosition.width / normalizedHeight; + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)glyphOriginX / atlasTexture.width, (float)glyphOriginY / atlasTexture.height, (float)glyphWidth / atlasTexture.width, (float)glyphHeight / atlasTexture.height); + + if (Event.current.type == EventType.Repaint) + { + glyphDrawPosition.x += (glyphDrawPosition.width - glyphWidth * scale) / 2; + glyphDrawPosition.y += (glyphDrawPosition.height - glyphHeight * scale) / 2; + glyphDrawPosition.width = glyphWidth * scale; + glyphDrawPosition.height = glyphHeight * scale; + + // Could switch to using the default material of the font asset which would require passing scale to the shader. + Graphics.DrawTexture(glyphDrawPosition, atlasTexture, texCoords, 0, 0, 0, 0, new Color(1f, 1f, 1f), mat); + } + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta new file mode 100644 index 0000000..ce08447 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_GlyphPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c4777500b5da6094e956c3d4f04de4db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_InputFieldEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_InputFieldEditor.cs new file mode 100644 index 0000000..ec481d7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_InputFieldEditor.cs @@ -0,0 +1,283 @@ +using UnityEngine; +using UnityEngine.UI; +using UnityEditor; +using UnityEditor.UI; +using UnityEditor.AnimatedValues; + + +namespace TMPro.EditorUtilities +{ + [CanEditMultipleObjects] + [CustomEditor(typeof(TMP_InputField), true)] + public class TMP_InputFieldEditor : SelectableEditor + { + private struct m_foldout + { // Track Inspector foldout panel states, globally. + public static bool textInput = true; + public static bool fontSettings = true; + public static bool extraSettings = true; + //public static bool shadowSetting = false; + //public static bool materialEditor = true; + } + + SerializedProperty m_TextViewport; + SerializedProperty m_TextComponent; + SerializedProperty m_Text; + SerializedProperty m_ContentType; + SerializedProperty m_LineType; + SerializedProperty m_LineLimit; + SerializedProperty m_InputType; + SerializedProperty m_CharacterValidation; + SerializedProperty m_InputValidator; + SerializedProperty m_RegexValue; + SerializedProperty m_KeyboardType; + SerializedProperty m_CharacterLimit; + SerializedProperty m_CaretBlinkRate; + SerializedProperty m_CaretWidth; + SerializedProperty m_CaretColor; + SerializedProperty m_CustomCaretColor; + SerializedProperty m_SelectionColor; + SerializedProperty m_HideMobileKeyboard; + SerializedProperty m_HideMobileInput; + SerializedProperty m_Placeholder; + SerializedProperty m_VerticalScrollbar; + SerializedProperty m_ScrollbarScrollSensitivity; + SerializedProperty m_OnValueChanged; + SerializedProperty m_OnEndEdit; + SerializedProperty m_OnSelect; + SerializedProperty m_OnDeselect; + SerializedProperty m_ReadOnly; + SerializedProperty m_RichText; + SerializedProperty m_RichTextEditingAllowed; + SerializedProperty m_ResetOnDeActivation; + SerializedProperty m_RestoreOriginalTextOnEscape; + + SerializedProperty m_OnFocusSelectAll; + SerializedProperty m_GlobalPointSize; + SerializedProperty m_GlobalFontAsset; + + AnimBool m_CustomColor; + + //TMP_InputValidator m_ValidationScript; + + protected override void OnEnable() + { + base.OnEnable(); + + m_TextViewport = serializedObject.FindProperty("m_TextViewport"); + m_TextComponent = serializedObject.FindProperty("m_TextComponent"); + m_Text = serializedObject.FindProperty("m_Text"); + m_ContentType = serializedObject.FindProperty("m_ContentType"); + m_LineType = serializedObject.FindProperty("m_LineType"); + m_LineLimit = serializedObject.FindProperty("m_LineLimit"); + m_InputType = serializedObject.FindProperty("m_InputType"); + m_CharacterValidation = serializedObject.FindProperty("m_CharacterValidation"); + m_InputValidator = serializedObject.FindProperty("m_InputValidator"); + m_RegexValue = serializedObject.FindProperty("m_RegexValue"); + m_KeyboardType = serializedObject.FindProperty("m_KeyboardType"); + m_CharacterLimit = serializedObject.FindProperty("m_CharacterLimit"); + m_CaretBlinkRate = serializedObject.FindProperty("m_CaretBlinkRate"); + m_CaretWidth = serializedObject.FindProperty("m_CaretWidth"); + m_CaretColor = serializedObject.FindProperty("m_CaretColor"); + m_CustomCaretColor = serializedObject.FindProperty("m_CustomCaretColor"); + m_SelectionColor = serializedObject.FindProperty("m_SelectionColor"); + + m_HideMobileKeyboard = serializedObject.FindProperty("m_HideSoftKeyboard"); + m_HideMobileInput = serializedObject.FindProperty("m_HideMobileInput"); + + m_Placeholder = serializedObject.FindProperty("m_Placeholder"); + m_VerticalScrollbar = serializedObject.FindProperty("m_VerticalScrollbar"); + m_ScrollbarScrollSensitivity = serializedObject.FindProperty("m_ScrollSensitivity"); + + m_OnValueChanged = serializedObject.FindProperty("m_OnValueChanged"); + m_OnEndEdit = serializedObject.FindProperty("m_OnEndEdit"); + m_OnSelect = serializedObject.FindProperty("m_OnSelect"); + m_OnDeselect = serializedObject.FindProperty("m_OnDeselect"); + m_ReadOnly = serializedObject.FindProperty("m_ReadOnly"); + m_RichText = serializedObject.FindProperty("m_RichText"); + m_RichTextEditingAllowed = serializedObject.FindProperty("m_isRichTextEditingAllowed"); + m_ResetOnDeActivation = serializedObject.FindProperty("m_ResetOnDeActivation"); + m_RestoreOriginalTextOnEscape = serializedObject.FindProperty("m_RestoreOriginalTextOnEscape"); + + m_OnFocusSelectAll = serializedObject.FindProperty("m_OnFocusSelectAll"); + m_GlobalPointSize = serializedObject.FindProperty("m_GlobalPointSize"); + m_GlobalFontAsset = serializedObject.FindProperty("m_GlobalFontAsset"); + + m_CustomColor = new AnimBool(m_CustomCaretColor.boolValue); + m_CustomColor.valueChanged.AddListener(Repaint); + } + + protected override void OnDisable() + { + base.OnDisable(); + m_CustomColor.valueChanged.RemoveListener(Repaint); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + base.OnInspectorGUI(); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_TextViewport); + + EditorGUILayout.PropertyField(m_TextComponent); + + TextMeshProUGUI text = null; + if (m_TextComponent != null && m_TextComponent.objectReferenceValue != null) + { + text = m_TextComponent.objectReferenceValue as TextMeshProUGUI; + //if (text.supportRichText) + //{ + // EditorGUILayout.HelpBox("Using Rich Text with input is unsupported.", MessageType.Warning); + //} + } + + EditorGUI.BeginDisabledGroup(m_TextComponent == null || m_TextComponent.objectReferenceValue == null); + + // TEXT INPUT BOX + EditorGUILayout.PropertyField(m_Text); + + // INPUT FIELD SETTINGS + #region INPUT FIELD SETTINGS + + m_foldout.fontSettings = EditorGUILayout.Foldout(m_foldout.fontSettings, "Input Field Settings", true, TMP_UIStyleManager.boldFoldout); + + if (m_foldout.fontSettings) + { + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_GlobalFontAsset, new GUIContent("Font Asset", "Set the Font Asset for both Placeholder and Input Field text object.")); + if (EditorGUI.EndChangeCheck()) + { + TMP_InputField inputField = target as TMP_InputField; + inputField.SetGlobalFontAsset(m_GlobalFontAsset.objectReferenceValue as TMP_FontAsset); + } + + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_GlobalPointSize, new GUIContent("Point Size", "Set the point size of both Placeholder and Input Field text object.")); + if (EditorGUI.EndChangeCheck()) + { + TMP_InputField inputField = target as TMP_InputField; + inputField.SetGlobalPointSize(m_GlobalPointSize.floatValue); + } + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_CharacterLimit); + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_ContentType); + if (!m_ContentType.hasMultipleDifferentValues) + { + EditorGUI.indentLevel++; + + if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Standard || + m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Autocorrected || + m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom) + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_LineType); + if (EditorGUI.EndChangeCheck()) + { + if (text != null) + { + if (m_LineType.enumValueIndex == (int)TMP_InputField.LineType.SingleLine) + text.enableWordWrapping = false; + else + { + text.enableWordWrapping = true; + } + } + } + + if (m_LineType.enumValueIndex != (int)TMP_InputField.LineType.SingleLine) + { + EditorGUILayout.PropertyField(m_LineLimit); + } + } + + if (m_ContentType.enumValueIndex == (int)TMP_InputField.ContentType.Custom) + { + EditorGUILayout.PropertyField(m_InputType); + EditorGUILayout.PropertyField(m_KeyboardType); + EditorGUILayout.PropertyField(m_CharacterValidation); + if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.Regex) + { + EditorGUILayout.PropertyField(m_RegexValue); + } + else if (m_CharacterValidation.enumValueIndex == (int)TMP_InputField.CharacterValidation.CustomValidator) + { + EditorGUILayout.PropertyField(m_InputValidator); + } + } + + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_Placeholder); + EditorGUILayout.PropertyField(m_VerticalScrollbar); + + if (m_VerticalScrollbar.objectReferenceValue != null) + EditorGUILayout.PropertyField(m_ScrollbarScrollSensitivity); + + EditorGUILayout.PropertyField(m_CaretBlinkRate); + EditorGUILayout.PropertyField(m_CaretWidth); + + EditorGUILayout.PropertyField(m_CustomCaretColor); + + m_CustomColor.target = m_CustomCaretColor.boolValue; + + if (EditorGUILayout.BeginFadeGroup(m_CustomColor.faded)) + { + EditorGUILayout.PropertyField(m_CaretColor); + } + EditorGUILayout.EndFadeGroup(); + + EditorGUILayout.PropertyField(m_SelectionColor); + + EditorGUI.indentLevel--; + } + #endregion + + + // CONTROL SETTINGS + #region CONTROL SETTINGS + m_foldout.extraSettings = EditorGUILayout.Foldout(m_foldout.extraSettings, "Control Settings", true, TMP_UIStyleManager.boldFoldout); + + if (m_foldout.extraSettings) + { + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(m_OnFocusSelectAll, new GUIContent("OnFocus - Select All", "Should all the text be selected when the Input Field is selected.")); + EditorGUILayout.PropertyField(m_ResetOnDeActivation, new GUIContent("Reset On DeActivation", "Should the Text and Caret position be reset when Input Field is DeActivated.")); + EditorGUILayout.PropertyField(m_RestoreOriginalTextOnEscape, new GUIContent("Restore On ESC Key", "Should the original text be restored when pressing ESC.")); + EditorGUILayout.PropertyField(m_HideMobileKeyboard, new GUIContent("Hide Soft Keyboard", "Controls the visibility of the mobile virtual keyboard.")); + EditorGUILayout.PropertyField(m_HideMobileInput, new GUIContent("Hide Mobile Input", "Controls the visibility of the editable text field above the mobile virtual keyboard.")); + EditorGUILayout.PropertyField(m_ReadOnly); + EditorGUILayout.PropertyField(m_RichText); + EditorGUILayout.PropertyField(m_RichTextEditingAllowed, new GUIContent("Allow Rich Text Editing")); + + EditorGUI.indentLevel--; + } + #endregion + + + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(m_OnValueChanged); + EditorGUILayout.PropertyField(m_OnEndEdit); + EditorGUILayout.PropertyField(m_OnSelect); + EditorGUILayout.PropertyField(m_OnDeselect); + + EditorGUI.EndDisabledGroup(); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta new file mode 100644 index 0000000..eeb62d8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_InputFieldEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: aa160f27c3fe4052a5850e21108811b6 +timeCreated: 1457861621 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_MeshRendererEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_MeshRendererEditor.cs new file mode 100644 index 0000000..83d19f8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_MeshRendererEditor.cs @@ -0,0 +1,76 @@ +// When enabled, allows setting the material by dropping a material onto the MeshRenderer inspector component. +// The drawback is that the MeshRenderer inspector will not have properties for light probes, so if you need light probe support, do not enable this. +//#define ALLOW_MESHRENDERER_MATERIAL_DRAG_N_DROP + +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + // Disabled for compatibility reason as lightprobe setup isn't supported due to inability to inherit from MeshRendererEditor class +#if ALLOW_MESHRENDERER_MATERIAL_DRAG_N_DROP + [CanEditMultipleObjects] + [CustomEditor(typeof(MeshRenderer))] + public class TMP_MeshRendererEditor : Editor + { + private SerializedProperty m_Materials; + + void OnEnable() + { + m_Materials = serializedObject.FindProperty("m_Materials"); + } + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + // Get a reference to the current material. + SerializedProperty material_prop = m_Materials.GetArrayElementAtIndex(0); + Material currentMaterial = material_prop.objectReferenceValue as Material; + + EditorGUI.BeginChangeCheck(); + base.OnInspectorGUI(); + if (EditorGUI.EndChangeCheck()) + { + material_prop = m_Materials.GetArrayElementAtIndex(0); + + TMP_FontAsset newFontAsset = null; + Material newMaterial = null; + + if (material_prop != null) + newMaterial = material_prop.objectReferenceValue as Material; + + // Check if the new material is referencing a different font atlas texture. + if (newMaterial != null && currentMaterial.GetInstanceID() != newMaterial.GetInstanceID()) + { + // Search for the Font Asset matching the new font atlas texture. + newFontAsset = TMP_EditorUtility.FindMatchingFontAsset(newMaterial); + } + + + GameObject[] objects = Selection.gameObjects; + + for (int i = 0; i < objects.Length; i++) + { + // Assign new font asset + if (newFontAsset != null) + { + TMP_Text textComponent = objects[i].GetComponent(); + + if (textComponent != null) + { + Undo.RecordObject(textComponent, "Font Asset Change"); + textComponent.font = newFontAsset; + } + } + + TMPro_EventManager.ON_DRAG_AND_DROP_MATERIAL_CHANGED(objects[i], currentMaterial, newMaterial); + } + } + } + } +#endif +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta new file mode 100644 index 0000000..d6b133f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_MeshRendererEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6d437b997e074079b4b2f6e395394f4b +timeCreated: 1462864011 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PackageUtilities.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PackageUtilities.cs new file mode 100644 index 0000000..9288111 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PackageUtilities.cs @@ -0,0 +1,565 @@ +using UnityEngine; +using UnityEditor; +using System; +using System.IO; +using System.Linq; +using System.Collections; +using System.Collections.Generic; +using System.Threading; +using TMPro.EditorUtilities; + + +namespace TMPro +{ + // Suppressing warnings related to the use of private structures which are confusing the compiler as these data structures are used by .json files. + #pragma warning disable 0649 + + /// + /// Data structure containing the target and replacement fileIDs and GUIDs which will require remapping from previous version of TextMesh Pro to the new TextMesh Pro UPM package. + /// + [System.Serializable] + struct AssetConversionRecord + { + public string referencedResource; + public string target; + public string replacement; + } + + + /// + /// Data structure containing a list of target and replacement fileID and GUID requiring remapping from previous versions of TextMesh Pro to the new TextMesh Pro UPM package. + /// This data structure is populated with the data contained in the PackageConversionData.json file included in the package. + /// + [System.Serializable] + class AssetConversionData + { + public List assetRecords; + } + + + public class TMP_ProjectConversionUtility : EditorWindow + { + // Create Project Files GUID Remapping Tool window + [MenuItem("Window/TextMeshPro/Project Files GUID Remapping Tool", false, 2100)] + static void ShowConverterWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Conversion Tool"); + window.Focus(); + } + + private static HashSet m_IgnoreAssetTypes = new HashSet() + { + typeof(AnimatorOverrideController), + typeof(AudioClip), + typeof(AvatarMask), + typeof(ComputeShader), + typeof(Cubemap), + typeof(DefaultAsset), + typeof(Flare), + typeof(Font), + typeof(GUISkin), + typeof(HumanTemplate), + typeof(LightingDataAsset), + typeof(Mesh), + typeof(MonoScript), + typeof(PhysicMaterial), + typeof(PhysicsMaterial2D), + typeof(RenderTexture), + typeof(Shader), + typeof(TerrainData), + typeof(TextAsset), + typeof(Texture2D), + typeof(Texture2DArray), + typeof(Texture3D), + typeof(UnityEditorInternal.AssemblyDefinitionAsset), + typeof(UnityEngine.AI.NavMeshData), + typeof(UnityEngine.Tilemaps.Tile), + typeof(UnityEngine.U2D.SpriteAtlas), + typeof(UnityEngine.Video.VideoClip), + }; + + /// + /// + /// + struct AssetModificationRecord + { + public string assetFilePath; + public string assetDataFile; + } + + struct AssetFileRecord + { + public string assetFilePath; + public string assetMetaFilePath; + + public AssetFileRecord(string filePath, string metaFilePath) + { + this.assetFilePath = filePath; + this.assetMetaFilePath = metaFilePath; + } + } + + private static string m_ProjectPath; + private static string m_ProjectFolderToScan; + private static bool m_IsAlreadyScanningProject; + private static bool m_CancelScanProcess; + private static string k_ProjectScanReportDefaultText = "Project Scan Results\n"; + private static string k_ProjectScanLabelPrefix = "Scanning: "; + private static string m_ProjectScanResults = string.Empty; + private static Vector2 m_ProjectScanResultScrollPosition; + private static float m_ProgressPercentage = 0; + + private static int m_ScanningTotalFiles; + private static int m_RemainingFilesToScan; + private static int m_ScanningCurrentFileIndex; + private static string m_ScanningCurrentFileName; + + private static AssetConversionData m_ConversionData; + + private static List m_ModifiedAssetList = new List(); + + + void OnEnable() + { + // Set Editor Window Size + SetEditorWindowSize(); + + m_ProjectScanResults = k_ProjectScanReportDefaultText; + } + + + void OnGUI() + { + GUILayout.BeginVertical(); + { + // Scan project files and resources + GUILayout.BeginVertical(EditorStyles.helpBox); + { + GUILayout.Label("Scan Project Files", EditorStyles.boldLabel); + GUILayout.Label("Press the Scan Project Files button to begin scanning your project for files & resources that were created with a previous version of TextMesh Pro.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + GUILayout.Label("Project folder to be scanned. Example \"Assets/TextMesh Pro\""); + m_ProjectFolderToScan = EditorGUILayout.TextField("Folder Path: Assets/", m_ProjectFolderToScan); + GUILayout.Space(5f); + + GUI.enabled = m_IsAlreadyScanningProject == false ? true : false; + if (GUILayout.Button("Scan Project Files")) + { + m_CancelScanProcess = false; + + // Make sure Asset Serialization mode is set to ForceText and Version Control mode to Visible Meta Files. + if (CheckProjectSerializationAndSourceControlModes() == true) + { + m_ProjectPath = Path.GetFullPath("Assets/.."); + TMP_EditorCoroutine.StartCoroutine(ScanProjectFiles()); + } + else + { + EditorUtility.DisplayDialog("Project Settings Change Required", "In menu options \"Edit - Project Settings - Editor\", please change Asset Serialization Mode to ForceText and Source Control Mode to Visible Meta Files.", "OK", string.Empty); + } + } + GUI.enabled = true; + + // Display progress bar + Rect rect = GUILayoutUtility.GetRect(0f, 20f, GUILayout.ExpandWidth(true)); + EditorGUI.ProgressBar(rect, m_ProgressPercentage, "Scan Progress (" + m_ScanningCurrentFileIndex + "/" + m_ScanningTotalFiles + ")"); + + // Display cancel button and name of file currently being scanned. + if (m_IsAlreadyScanningProject) + { + Rect cancelRect = new Rect(rect.width - 20, rect.y + 2, 20, 16); + if (GUI.Button(cancelRect, "X")) + { + m_CancelScanProcess = true; + } + GUILayout.Label(k_ProjectScanLabelPrefix + m_ScanningCurrentFileName, TMP_UIStyleManager.label); + } + else + GUILayout.Label(string.Empty); + + GUILayout.Space(5); + + // Creation Feedback + GUILayout.BeginVertical(TMP_UIStyleManager.textAreaBoxWindow, GUILayout.ExpandHeight(true)); + { + m_ProjectScanResultScrollPosition = EditorGUILayout.BeginScrollView(m_ProjectScanResultScrollPosition, GUILayout.ExpandHeight(true)); + EditorGUILayout.LabelField(m_ProjectScanResults, TMP_UIStyleManager.label); + EditorGUILayout.EndScrollView(); + } + GUILayout.EndVertical(); + GUILayout.Space(5f); + } + GUILayout.EndVertical(); + + // Scan project files and resources + GUILayout.BeginVertical(EditorStyles.helpBox); + { + GUILayout.Label("Save Modified Project Files", EditorStyles.boldLabel); + GUILayout.Label("Pressing the Save Modified Project Files button will update the files in the Project Scan Results listed above. Please make sure that you have created a backup of your project first as these file modifications are permanent and cannot be undone.", TMP_UIStyleManager.label); + GUILayout.Space(5f); + + GUI.enabled = m_IsAlreadyScanningProject == false && m_ModifiedAssetList.Count > 0 ? true : false; + if (GUILayout.Button("Save Modified Project Files")) + { + UpdateProjectFiles(); + } + GUILayout.Space(10f); + } + GUILayout.EndVertical(); + + } + GUILayout.EndVertical(); + GUILayout.Space(5f); + } + + void OnInspectorUpdate() + { + Repaint(); + } + + + /// + /// Limits the minimum size of the editor window. + /// + void SetEditorWindowSize() + { + EditorWindow editorWindow = this; + + Vector2 currentWindowSize = editorWindow.minSize; + + editorWindow.minSize = new Vector2(Mathf.Max(640, currentWindowSize.x), Mathf.Max(420, currentWindowSize.y)); + } + + + /// + /// + /// + /// + /// + private static bool ShouldIgnoreFile(string filePath) + { + string fileExtension = Path.GetExtension(filePath); + Type fileType = AssetDatabase.GetMainAssetTypeAtPath(filePath); + + if (m_IgnoreAssetTypes.Contains(fileType)) + return true; + + // Exclude FBX + if (fileType == typeof(GameObject) && (fileExtension.ToLower() == ".fbx" || fileExtension.ToLower() == ".blend")) + return true; + + return false; + } + + + private IEnumerator ScanProjectFiles() + { + m_IsAlreadyScanningProject = true; + string packageFullPath = EditorUtilities.TMP_EditorUtility.packageFullPath; + + // List containing assets that have been modified. + m_ProjectScanResults = k_ProjectScanReportDefaultText; + m_ModifiedAssetList.Clear(); + m_ProgressPercentage = 0; + + // Read Conversion Data from Json file. + if (m_ConversionData == null) + m_ConversionData = JsonUtility.FromJson(File.ReadAllText(packageFullPath + "/PackageConversionData.json")); + + // Get list of GUIDs for assets that might contain references to previous GUIDs that require updating. + string searchFolder = string.IsNullOrEmpty(m_ProjectFolderToScan) ? "Assets" : ("Assets/" + m_ProjectFolderToScan); + string[] guids = AssetDatabase.FindAssets("t:Object", new string[] { searchFolder }).Distinct().ToArray(); + + k_ProjectScanLabelPrefix = "Phase 1 - Filtering: "; + m_ScanningTotalFiles = guids.Length; + m_ScanningCurrentFileIndex = 0; + + List projectFilesToScan = new List(); + + foreach (var guid in guids) + { + if (m_CancelScanProcess) + break; + + string assetFilePath = AssetDatabase.GUIDToAssetPath(guid); + + m_ScanningCurrentFileIndex += 1; + m_ScanningCurrentFileName = assetFilePath; + m_ProgressPercentage = (float)m_ScanningCurrentFileIndex / m_ScanningTotalFiles; + + // Filter out file types we have no interest in searching + if (ShouldIgnoreFile(assetFilePath)) + continue; + + string assetMetaFilePath = AssetDatabase.GetTextMetaFilePathFromAssetPath(assetFilePath); + + projectFilesToScan.Add(new AssetFileRecord(assetFilePath, assetMetaFilePath)); + + yield return null; + } + + m_RemainingFilesToScan = m_ScanningTotalFiles = projectFilesToScan.Count; + + k_ProjectScanLabelPrefix = "Phase 2 - Scanning: "; + + for (int i = 0; i < m_ScanningTotalFiles; i++) + { + if (m_CancelScanProcess) + break; + + AssetFileRecord fileRecord = projectFilesToScan[i]; + + ThreadPool.QueueUserWorkItem(Task => + { + ScanProjectFileAsync(fileRecord); + + m_ScanningCurrentFileName = fileRecord.assetFilePath; + + int completedScans = m_ScanningTotalFiles - Interlocked.Decrement(ref m_RemainingFilesToScan); + + m_ScanningCurrentFileIndex = completedScans; + m_ProgressPercentage = (float)completedScans / m_ScanningTotalFiles; + }); + + if (i % 64 == 0) + yield return new WaitForSeconds(2.0f); + + } + + while (m_RemainingFilesToScan > 0 && !m_CancelScanProcess) + yield return null; + + m_IsAlreadyScanningProject = false; + m_ScanningCurrentFileName = string.Empty; + } + + + static void ScanProjectFileAsync(AssetFileRecord fileRecord) + { + if (m_CancelScanProcess) + return; + + // Read the asset data file + string assetDataFile = string.Empty; + bool hasFileChanged = false; + + try + { + assetDataFile = File.ReadAllText(m_ProjectPath + "/" + fileRecord.assetFilePath); + } + catch + { + // Continue to the next asset if we can't read the current one. + return; + } + + // Read the asset meta data file + string assetMetaFile = File.ReadAllText(m_ProjectPath + "/" + fileRecord.assetMetaFilePath); + bool hasMetaFileChanges = false; + + foreach (AssetConversionRecord record in m_ConversionData.assetRecords) + { + if (assetDataFile.Contains(record.target)) + { + hasFileChanged = true; + + assetDataFile = assetDataFile.Replace(record.target, record.replacement); + } + + //// Check meta file + if (assetMetaFile.Contains(record.target)) + { + hasMetaFileChanges = true; + + assetMetaFile = assetMetaFile.Replace(record.target, record.replacement); + } + } + + if (hasFileChanged) + { + AssetModificationRecord modifiedAsset; + modifiedAsset.assetFilePath = fileRecord.assetFilePath; + modifiedAsset.assetDataFile = assetDataFile; + + m_ModifiedAssetList.Add(modifiedAsset); + + m_ProjectScanResults += fileRecord.assetFilePath + "\n"; + } + + if (hasMetaFileChanges) + { + AssetModificationRecord modifiedAsset; + modifiedAsset.assetFilePath = fileRecord.assetMetaFilePath; + modifiedAsset.assetDataFile = assetMetaFile; + + m_ModifiedAssetList.Add(modifiedAsset); + + m_ProjectScanResults += fileRecord.assetMetaFilePath + "\n"; + } + } + + + /// + /// + /// + private static void ResetScanProcess() + { + m_IsAlreadyScanningProject = false; + m_ScanningCurrentFileName = string.Empty; + m_ProgressPercentage = 0; + m_ScanningCurrentFileIndex = 0; + m_ScanningTotalFiles = 0; + } + + + /// + /// + /// + private static void UpdateProjectFiles() + { + // Make sure Asset Serialization mode is set to ForceText with Visible Meta Files. + CheckProjectSerializationAndSourceControlModes(); + + string projectPath = Path.GetFullPath("Assets/.."); + + // Display dialogue to show user a list of project files that will be modified upon their consent. + if (EditorUtility.DisplayDialog("Save Modified Asset(s)?", "Are you sure you want to save all modified assets?", "YES", "NO")) + { + for (int i = 0; i < m_ModifiedAssetList.Count; i++) + { + // Make sure all file streams that might have been opened by Unity are closed. + //AssetDatabase.ReleaseCachedFileHandles(); + + //Debug.Log("Writing asset file [" + m_ModifiedAssetList[i].assetFilePath + "]."); + + File.WriteAllText(projectPath + "/" + m_ModifiedAssetList[i].assetFilePath, m_ModifiedAssetList[i].assetDataFile); + } + } + + AssetDatabase.Refresh(); + + m_ProgressPercentage = 0; + m_ProjectScanResults = k_ProjectScanReportDefaultText; + } + + + /// + /// Check project Asset Serialization and Source Control modes + /// + private static bool CheckProjectSerializationAndSourceControlModes() + { + // Check Project Asset Serialization and Visible Meta Files mode. + if (EditorSettings.serializationMode != SerializationMode.ForceText || EditorSettings.externalVersionControl != "Visible Meta Files") + { + return false; + } + + return true; + } + } + + + + public class TMP_PackageUtilities : Editor + { + + enum SaveAssetDialogueOptions { Unset = 0, Save = 1, SaveAll = 2, DoNotSave = 3 }; + + private static SerializationMode m_ProjectAssetSerializationMode; + private static string m_ProjectExternalVersionControl; + + struct AssetRemappingRecord + { + public string oldGuid; + public string newGuid; + public string assetPath; + } + + struct AssetModificationRecord + { + public string assetFilePath; + public string assetDataFile; + } + + /// + /// + /// + [MenuItem("Window/TextMeshPro/Import TMP Essential Resources", false, 2050)] + public static void ImportProjectResourcesMenu() + { + ImportEssentialResources(); + } + + + /// + /// + /// + [MenuItem("Window/TextMeshPro/Import TMP Examples and Extras", false, 2051)] + public static void ImportExamplesContentMenu() + { + ImportExamplesAndExtras(); + } + + + private static void GetVersionInfo() + { + string version = TMP_Settings.version; + Debug.Log("The version of this TextMesh Pro UPM package is (" + version + ")."); + } + + + /// + /// + /// + private static void ImportExamplesAndExtras() + { + string packageFullPath = TMP_EditorUtility.packageFullPath; + + AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Examples & Extras.unitypackage", true); + } + + private static string k_SettingsFilePath; + private static byte[] k_SettingsBackup; + + /// + /// + /// + private static void ImportEssentialResources() + { + // Check if the TMP Settings asset is already present in the project. + string[] settings = AssetDatabase.FindAssets("t:TMP_Settings"); + + if (settings.Length > 0) + { + // Save assets just in case the TMP Setting were modified before import. + AssetDatabase.SaveAssets(); + + // Copy existing TMP Settings asset to a byte[] + k_SettingsFilePath = AssetDatabase.GUIDToAssetPath(settings[0]); + k_SettingsBackup = File.ReadAllBytes(k_SettingsFilePath); + + RegisterResourceImportCallback(); + } + + string packageFullPath = TMP_EditorUtility.packageFullPath; + + AssetDatabase.ImportPackage(packageFullPath + "/Package Resources/TMP Essential Resources.unitypackage", true); + } + + private static void RegisterResourceImportCallback() + { + AssetDatabase.importPackageCompleted += ImportCallback; + } + + private static void ImportCallback(string packageName) + { + // Restore backup of TMP Settings from byte[] + File.WriteAllBytes(k_SettingsFilePath, k_SettingsBackup); + + AssetDatabase.Refresh(); + + AssetDatabase.importPackageCompleted -= ImportCallback; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PackageUtilities.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PackageUtilities.cs.meta new file mode 100644 index 0000000..e03778c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PackageUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68eedd4e5b33b37429c02c4add0036fe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs new file mode 100644 index 0000000..a8b800a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs @@ -0,0 +1,63 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.Callbacks; +using System.IO; + + +namespace TMPro +{ + public class TMP_PostBuildProcessHandler + { + [PostProcessBuildAttribute(10000)] + public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) + { + // Check if TMP Essential Resource are present in user project. + if (target == BuildTarget.iOS && File.Exists(GetEssentialProjectResourcesPath() + "/Resources/TMP Settings.asset") && TMP_Settings.enableEmojiSupport) + { + string file = Path.Combine(pathToBuiltProject, "Classes/UI/Keyboard.mm"); + string content = File.ReadAllText(file); + content = content.Replace("FILTER_EMOJIS_IOS_KEYBOARD 1", "FILTER_EMOJIS_IOS_KEYBOARD 0"); + File.WriteAllText(file, content); + } + } + + + private static string GetEssentialProjectResourcesPath() + { + // Find the potential location of the TextMesh Pro folder in the user project. + string projectPath = Path.GetFullPath("Assets/.."); + if (Directory.Exists(projectPath)) + { + // Search for default location of TMP Essential Resources + if (Directory.Exists(projectPath + "/Assets/TextMesh Pro/Resources")) + { + return "Assets/TextMesh Pro"; + } + + // Search for potential alternative locations in the user project + string[] matchingPaths = Directory.GetDirectories(projectPath, "TextMesh Pro", SearchOption.AllDirectories); + projectPath = ValidateLocation(matchingPaths, projectPath); + if (projectPath != null) return projectPath; + } + + return null; + } + + + private static string ValidateLocation(string[] paths, string projectPath) + { + for (int i = 0; i < paths.Length; i++) + { + // Check if any of the matching directories contain a GUISkins directory. + if (Directory.Exists(paths[i] + "/Resources")) + { + string folderPath = paths[i].Replace(projectPath, ""); + folderPath = folderPath.TrimStart('\\', '/'); + return folderPath; + } + } + + return null; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta new file mode 100644 index 0000000..af212b8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_PostBuildProcessHandler.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6fdea2af3daa40fe8f88e5e9cfc17abb +timeCreated: 1479886230 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ProjectTextSettings.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ProjectTextSettings.cs new file mode 100644 index 0000000..b8695be --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ProjectTextSettings.cs @@ -0,0 +1,43 @@ +#if !UNITY_2018_3_OR_NEWER +using UnityEditor; + +namespace TMPro +{ + + public static class TMP_ProjectTextSettings + { + // Open Project Text Settings + [MenuItem("Edit/Project Settings/TextMeshPro Settings", false, 309)] + public static void SelectProjectTextSettings() + { + TMP_Settings textSettings = TMP_Settings.instance; + + if (textSettings) + { + Selection.activeObject = textSettings; + + // TODO: Do we want to ping the Project Text Settings asset in the Project Inspector + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(textSettings); + } + else + TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED); + } + + + // Event received when TMP resources have been loaded. + static void ON_RESOURCES_LOADED() + { + TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED); + + TMP_Settings textSettings = TMP_Settings.instance; + + Selection.activeObject = textSettings; + + // TODO: Do we want to ping the Project Text Settings asset in the Project Inspector + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(textSettings); + } + } +} +#endif \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta new file mode 100644 index 0000000..6d19454 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ProjectTextSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0e751e877ed14d71a6b8e63ac54949cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ResourcesLoader.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ResourcesLoader.cs new file mode 100644 index 0000000..090bd77 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ResourcesLoader.cs @@ -0,0 +1,68 @@ +using UnityEditor; +using UnityEngine; +using System.Collections; + +namespace TMPro.EditorUtilities +{ + + //[InitializeOnLoad] + class TMP_ResourcesLoader + { + + /// + /// Function to pre-load the TMP Resources + /// + public static void LoadTextMeshProResources() + { + //TMP_Settings.LoadDefaultSettings(); + //TMP_StyleSheet.LoadDefaultStyleSheet(); + } + + + static TMP_ResourcesLoader() + { + //Debug.Log("Loading TMP Resources..."); + + // Get current targetted platform + + + //string Settings = PlayerSettings.GetScriptingDefineSymbolsForGroup(BuildTargetGroup.Standalone); + //TMPro.TMP_Settings.LoadDefaultSettings(); + //TMPro.TMP_StyleSheet.LoadDefaultStyleSheet(); + } + + + + //[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)] + //static void OnBeforeSceneLoaded() + //{ + //Debug.Log("Before scene is loaded."); + + // //TMPro.TMP_Settings.LoadDefaultSettings(); + // //TMPro.TMP_StyleSheet.LoadDefaultStyleSheet(); + + // //ShaderVariantCollection collection = new ShaderVariantCollection(); + // //Shader s0 = Shader.Find("TextMeshPro/Mobile/Distance Field"); + // //ShaderVariantCollection.ShaderVariant tmp_Variant = new ShaderVariantCollection.ShaderVariant(s0, UnityEngine.Rendering.PassType.Normal, string.Empty); + + // //collection.Add(tmp_Variant); + // //collection.WarmUp(); + //} + + } + + //static class TMP_ProjectSettings + //{ + // [InitializeOnLoadMethod] + // static void SetProjectDefineSymbols() + // { + // string currentBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + + // //Check for and inject TMP_INSTALLED + // if (!currentBuildSettings.Contains("TMP_PRESENT")) + // { + // PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings + ";TMP_PRESENT"); + // } + // } + //} +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta new file mode 100644 index 0000000..8b322e2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_ResourcesLoader.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 7241c7dc25374fc1a6ab3ef9da79c363 +timeCreated: 1465441092 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SDFShaderGUI.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SDFShaderGUI.cs new file mode 100644 index 0000000..220bac2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SDFShaderGUI.cs @@ -0,0 +1,487 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + public class TMP_SDFShaderGUI : TMP_BaseShaderGUI + { + static ShaderFeature s_OutlineFeature, s_UnderlayFeature, s_BevelFeature, s_GlowFeature, s_MaskFeature; + + static bool s_Face = true, s_Outline = true, s_Outline2, s_Underlay, s_Lighting, s_Glow, s_Bevel, s_Light, s_Bump, s_Env; + + static string[] + s_FaceUvSpeedNames = { "_FaceUVSpeedX", "_FaceUVSpeedY" }, + s_OutlineUvSpeedNames = { "_OutlineUVSpeedX", "_OutlineUVSpeedY" }; + + static TMP_SDFShaderGUI() + { + s_OutlineFeature = new ShaderFeature() + { + undoLabel = "Outline", + keywords = new[] { "OUTLINE_ON" } + }; + + s_UnderlayFeature = new ShaderFeature() + { + undoLabel = "Underlay", + keywords = new[] { "UNDERLAY_ON", "UNDERLAY_INNER" }, + label = new GUIContent("Underlay Type"), + keywordLabels = new[] + { + new GUIContent("None"), new GUIContent("Normal"), new GUIContent("Inner") + } + }; + + s_BevelFeature = new ShaderFeature() + { + undoLabel = "Bevel", + keywords = new[] { "BEVEL_ON" } + }; + + s_GlowFeature = new ShaderFeature() + { + undoLabel = "Glow", + keywords = new[] { "GLOW_ON" } + }; + + s_MaskFeature = new ShaderFeature() + { + undoLabel = "Mask", + keywords = new[] { "MASK_HARD", "MASK_SOFT" }, + label = new GUIContent("Mask"), + keywordLabels = new[] + { + new GUIContent("Mask Off"), new GUIContent("Mask Hard"), new GUIContent("Mask Soft") + } + }; + } + + protected override void DoGUI() + { + s_Face = BeginPanel("Face", s_Face); + if (s_Face) + { + DoFacePanel(); + } + + EndPanel(); + + s_Outline = m_Material.HasProperty(ShaderUtilities.ID_OutlineTex) ? BeginPanel("Outline", s_Outline) : BeginPanel("Outline", s_OutlineFeature, s_Outline); + if (s_Outline) + { + DoOutlinePanel(); + } + + EndPanel(); + + if (m_Material.HasProperty(ShaderUtilities.ID_Outline2Color)) + { + s_Outline2 = BeginPanel("Outline 2", s_OutlineFeature, s_Outline2); + if (s_Outline2) + { + DoOutline2Panel(); + } + + EndPanel(); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_UnderlayColor)) + { + s_Underlay = BeginPanel("Underlay", s_UnderlayFeature, s_Underlay); + if (s_Underlay) + { + DoUnderlayPanel(); + } + + EndPanel(); + } + + if (m_Material.HasProperty("_SpecularColor")) + { + s_Lighting = BeginPanel("Lighting", s_BevelFeature, s_Lighting); + if (s_Lighting) + { + s_Bevel = BeginPanel("Bevel", s_Bevel); + if (s_Bevel) + { + DoBevelPanel(); + } + + EndPanel(); + + s_Light = BeginPanel("Local Lighting", s_Light); + if (s_Light) + { + DoLocalLightingPanel(); + } + + EndPanel(); + + s_Bump = BeginPanel("Bump Map", s_Bump); + if (s_Bump) + { + DoBumpMapPanel(); + } + + EndPanel(); + + s_Env = BeginPanel("Environment Map", s_Env); + if (s_Env) + { + DoEnvMapPanel(); + } + + EndPanel(); + } + + EndPanel(); + } + else if (m_Material.HasProperty("_SpecColor")) + { + s_Bevel = BeginPanel("Bevel", s_Bevel); + if (s_Bevel) + { + DoBevelPanel(); + } + + EndPanel(); + + s_Light = BeginPanel("Surface Lighting", s_Light); + if (s_Light) + { + DoSurfaceLightingPanel(); + } + + EndPanel(); + + s_Bump = BeginPanel("Bump Map", s_Bump); + if (s_Bump) + { + DoBumpMapPanel(); + } + + EndPanel(); + + s_Env = BeginPanel("Environment Map", s_Env); + if (s_Env) + { + DoEnvMapPanel(); + } + + EndPanel(); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_GlowColor)) + { + s_Glow = BeginPanel("Glow", s_GlowFeature, s_Glow); + if (s_Glow) + { + DoGlowPanel(); + } + + EndPanel(); + } + + s_DebugExtended = BeginPanel("Debug Settings", s_DebugExtended); + if (s_DebugExtended) + { + DoDebugPanel(); + } + + EndPanel(); + } + + void DoFacePanel() + { + EditorGUI.indentLevel += 1; + DoColor("_FaceColor", "Color"); + if (m_Material.HasProperty(ShaderUtilities.ID_FaceTex)) + { + if (m_Material.HasProperty("_FaceUVSpeedX")) + { + DoTexture2D("_FaceTex", "Texture", true, s_FaceUvSpeedNames); + } + else + { + DoTexture2D("_FaceTex", "Texture", true); + } + } + + DoSlider("_OutlineSoftness", "Softness"); + DoSlider("_FaceDilate", "Dilate"); + if (m_Material.HasProperty(ShaderUtilities.ID_Shininess)) + { + DoSlider("_FaceShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutlinePanel() + { + EditorGUI.indentLevel += 1; + DoColor("_OutlineColor", "Color"); + if (m_Material.HasProperty(ShaderUtilities.ID_OutlineTex)) + { + if (m_Material.HasProperty("_OutlineUVSpeedX")) + { + DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedNames); + } + else + { + DoTexture2D("_OutlineTex", "Texture", true); + } + } + + DoSlider("_OutlineWidth", "Thickness"); + if (m_Material.HasProperty("_OutlineShininess")) + { + DoSlider("_OutlineShininess", "Gloss"); + } + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoOutline2Panel() + { + EditorGUI.indentLevel += 1; + DoColor("_Outline2Color", "Color"); + //if (m_Material.HasProperty(ShaderUtilities.ID_OutlineTex)) + //{ + // if (m_Material.HasProperty("_OutlineUVSpeedX")) + // { + // DoTexture2D("_OutlineTex", "Texture", true, s_OutlineUvSpeedNames); + // } + // else + // { + // DoTexture2D("_OutlineTex", "Texture", true); + // } + //} + + DoSlider("_Outline2Width", "Thickness"); + //if (m_Material.HasProperty("_OutlineShininess")) + //{ + // DoSlider("_OutlineShininess", "Gloss"); + //} + + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoUnderlayPanel() + { + EditorGUI.indentLevel += 1; + s_UnderlayFeature.DoPopup(m_Editor, m_Material); + DoColor("_UnderlayColor", "Color"); + DoSlider("_UnderlayOffsetX", "Offset X"); + DoSlider("_UnderlayOffsetY", "Offset Y"); + DoSlider("_UnderlayDilate", "Dilate"); + DoSlider("_UnderlaySoftness", "Softness"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + static GUIContent[] s_BevelTypeLabels = + { + new GUIContent("Outer Bevel"), + new GUIContent("Inner Bevel") + }; + + void DoBevelPanel() + { + EditorGUI.indentLevel += 1; + DoPopup("_ShaderFlags", "Type", s_BevelTypeLabels); + DoSlider("_Bevel", "Amount"); + DoSlider("_BevelOffset", "Offset"); + DoSlider("_BevelWidth", "Width"); + DoSlider("_BevelRoundness", "Roundness"); + DoSlider("_BevelClamp", "Clamp"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoLocalLightingPanel() + { + EditorGUI.indentLevel += 1; + DoSlider("_LightAngle", "Light Angle"); + DoColor("_SpecularColor", "Specular Color"); + DoSlider("_SpecularPower", "Specular Power"); + DoSlider("_Reflectivity", "Reflectivity Power"); + DoSlider("_Diffuse", "Diffuse Shadow"); + DoSlider("_Ambient", "Ambient Shadow"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoSurfaceLightingPanel() + { + EditorGUI.indentLevel += 1; + DoColor("_SpecColor", "Specular Color"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoBumpMapPanel() + { + EditorGUI.indentLevel += 1; + DoTexture2D("_BumpMap", "Texture"); + DoSlider("_BumpFace", "Face"); + DoSlider("_BumpOutline", "Outline"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoEnvMapPanel() + { + EditorGUI.indentLevel += 1; + DoColor("_ReflectFaceColor", "Face Color"); + DoColor("_ReflectOutlineColor", "Outline Color"); + DoCubeMap("_Cube", "Texture"); + DoVector3("_EnvMatrixRotation", "Rotation"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoGlowPanel() + { + EditorGUI.indentLevel += 1; + DoColor("_GlowColor", "Color"); + DoSlider("_GlowOffset", "Offset"); + DoSlider("_GlowInner", "Inner"); + DoSlider("_GlowOuter", "Outer"); + DoSlider("_GlowPower", "Power"); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoDebugPanel() + { + EditorGUI.indentLevel += 1; + DoTexture2D("_MainTex", "Font Atlas"); + DoFloat("_GradientScale", "Gradient Scale"); + DoFloat("_TextureWidth", "Texture Width"); + DoFloat("_TextureHeight", "Texture Height"); + EditorGUILayout.Space(); + DoFloat("_ScaleX", "Scale X"); + DoFloat("_ScaleY", "Scale Y"); + + if (m_Material.HasProperty(ShaderUtilities.ID_Sharpness)) + DoSlider("_Sharpness", "Sharpness"); + + DoSlider("_PerspectiveFilter", "Perspective Filter"); + EditorGUILayout.Space(); + DoFloat("_VertexOffsetX", "Offset X"); + DoFloat("_VertexOffsetY", "Offset Y"); + + if (m_Material.HasProperty(ShaderUtilities.ID_MaskCoord)) + { + EditorGUILayout.Space(); + s_MaskFeature.ReadState(m_Material); + s_MaskFeature.DoPopup(m_Editor, m_Material); + if (s_MaskFeature.Active) + { + DoMaskSubgroup(); + } + + EditorGUILayout.Space(); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + else if (m_Material.HasProperty("_MaskTex")) + { + DoMaskTexSubgroup(); + } + else if (m_Material.HasProperty(ShaderUtilities.ID_MaskSoftnessX)) + { + EditorGUILayout.Space(); + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + + if (m_Material.HasProperty(ShaderUtilities.ID_StencilID)) + { + EditorGUILayout.Space(); + DoFloat("_Stencil", "Stencil ID"); + DoFloat("_StencilComp", "Stencil Comp"); + } + + EditorGUILayout.Space(); + + EditorGUI.BeginChangeCheck(); + bool useRatios = EditorGUILayout.Toggle("Use Ratios", !m_Material.IsKeywordEnabled("RATIOS_OFF")); + if (EditorGUI.EndChangeCheck()) + { + m_Editor.RegisterPropertyChangeUndo("Use Ratios"); + if (useRatios) + { + m_Material.DisableKeyword("RATIOS_OFF"); + } + else + { + m_Material.EnableKeyword("RATIOS_OFF"); + } + } + + if (m_Material.HasProperty(ShaderUtilities.ShaderTag_CullMode)) + { + EditorGUILayout.Space(); + DoPopup("_CullMode", "Cull Mode", s_CullingTypeLabels); + } + + EditorGUILayout.Space(); + + EditorGUI.BeginDisabledGroup(true); + DoFloat("_ScaleRatioA", "Scale Ratio A"); + DoFloat("_ScaleRatioB", "Scale Ratio B"); + DoFloat("_ScaleRatioC", "Scale Ratio C"); + EditorGUI.EndDisabledGroup(); + EditorGUI.indentLevel -= 1; + EditorGUILayout.Space(); + } + + void DoMaskSubgroup() + { + DoVector("_MaskCoord", "Mask Bounds", s_XywhVectorLabels); + if (Selection.activeGameObject != null) + { + Renderer renderer = Selection.activeGameObject.GetComponent(); + if (renderer != null) + { + Rect rect = EditorGUILayout.GetControlRect(); + rect.x += EditorGUIUtility.labelWidth; + rect.width -= EditorGUIUtility.labelWidth; + if (GUI.Button(rect, "Match Renderer Bounds")) + { + FindProperty("_MaskCoord", m_Properties).vectorValue = new Vector4( + 0, + 0, + Mathf.Round(renderer.bounds.extents.x * 1000) / 1000, + Mathf.Round(renderer.bounds.extents.y * 1000) / 1000 + ); + } + } + } + + if (s_MaskFeature.State == 1) + { + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + } + } + + void DoMaskTexSubgroup() + { + EditorGUILayout.Space(); + DoTexture2D("_MaskTex", "Mask Texture"); + DoToggle("_MaskInverse", "Inverse Mask"); + DoColor("_MaskEdgeColor", "Edge Color"); + DoSlider("_MaskEdgeSoftness", "Edge Softness"); + DoSlider("_MaskWipeControl", "Wipe Position"); + DoFloat("_MaskSoftnessX", "Softness X"); + DoFloat("_MaskSoftnessY", "Softness Y"); + DoVector("_ClipRect", "Clip Rect", s_LbrtVectorLabels); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta new file mode 100644 index 0000000..c643afa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SDFShaderGUI.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 8413ca0e506d42a1a4bd9769f204ad16 +timeCreated: 1469844718 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs new file mode 100644 index 0000000..2ba34d6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs @@ -0,0 +1,14 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro +{ + class TMP_SerializedPropertyHolder : ScriptableObject + { + public TMP_FontAsset fontAsset; + public uint firstCharacter; + public uint secondCharacter; + + public TMP_GlyphPairAdjustmentRecord glyphPairAdjustmentRecord = new TMP_GlyphPairAdjustmentRecord(new TMP_GlyphAdjustmentRecord(), new TMP_GlyphAdjustmentRecord()); + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta new file mode 100644 index 0000000..cde31db --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SerializedPropertyHolder.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c4a050f089abb04ebd4125e419f4548 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SettingsEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SettingsEditor.cs new file mode 100644 index 0000000..f8c601e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SettingsEditor.cs @@ -0,0 +1,381 @@ +using System.Collections.Generic; +using UnityEngine; +using UnityEditor; +using UnityEditorInternal; + +#pragma warning disable 0414 // Disabled a few warnings for not yet implemented features. + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_Settings))] + public class TMP_SettingsEditor : Editor + { + internal class Styles + { + public static readonly GUIContent defaultFontAssetLabel = new GUIContent("Default Font Asset", "The Font Asset that will be assigned by default to newly created text objects when no Font Asset is specified."); + public static readonly GUIContent defaultFontAssetPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Font Assets and Material Presets are located.\nExample \"Fonts & Materials/\""); + + public static readonly GUIContent fallbackFontAssetsLabel = new GUIContent("Fallback Font Assets", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset."); + public static readonly GUIContent fallbackFontAssetsListLabel = new GUIContent("Fallback Font Assets List", "The Font Assets that will be searched to locate and replace missing characters from a given Font Asset."); + + public static readonly GUIContent fallbackMaterialSettingsLabel = new GUIContent("Fallback Material Settings"); + public static readonly GUIContent matchMaterialPresetLabel = new GUIContent("Match Material Presets"); + + public static readonly GUIContent containerDefaultSettingsLabel = new GUIContent("Text Container Default Settings"); + + public static readonly GUIContent textMeshProLabel = new GUIContent("TextMeshPro"); + public static readonly GUIContent textMeshProUiLabel = new GUIContent("TextMeshPro UI"); + public static readonly GUIContent enableRaycastTarget = new GUIContent("Enable Raycast Target"); + public static readonly GUIContent autoSizeContainerLabel = new GUIContent("Auto Size Text Container", "Set the size of the text container to match the text."); + public static readonly GUIContent isTextObjectScaleStaticLabel = new GUIContent("Is Object Scale Static", "Disables calling InternalUpdate() when enabled. This can improve performance when text object scale is static."); + + public static readonly GUIContent textComponentDefaultSettingsLabel = new GUIContent("Text Component Default Settings"); + public static readonly GUIContent defaultFontSize = new GUIContent("Default Font Size"); + public static readonly GUIContent autoSizeRatioLabel = new GUIContent("Text Auto Size Ratios"); + public static readonly GUIContent minLabel = new GUIContent("Min"); + public static readonly GUIContent maxLabel = new GUIContent("Max"); + + public static readonly GUIContent wordWrappingLabel = new GUIContent("Word Wrapping"); + public static readonly GUIContent kerningLabel = new GUIContent("Kerning"); + public static readonly GUIContent extraPaddingLabel = new GUIContent("Extra Padding"); + public static readonly GUIContent tintAllSpritesLabel = new GUIContent("Tint All Sprites"); + public static readonly GUIContent parseEscapeCharactersLabel = new GUIContent("Parse Escape Sequence"); + + public static readonly GUIContent dynamicFontSystemSettingsLabel = new GUIContent("Dynamic Font System Settings"); + public static readonly GUIContent getFontFeaturesAtRuntime = new GUIContent("Get Font Features at Runtime", "Determines if Glyph Adjustment Data will be retrieved from font files at runtime when new characters and glyphs are added to font assets."); + public static readonly GUIContent dynamicAtlasTextureGroup = new GUIContent("Dynamic Atlas Texture Group"); + + public static readonly GUIContent missingGlyphLabel = new GUIContent("Missing Character Unicode", "The character to be displayed when the requested character is not found in any font asset or fallbacks."); + public static readonly GUIContent disableWarningsLabel = new GUIContent("Disable warnings", "Disable warning messages in the Console."); + + public static readonly GUIContent defaultSpriteAssetLabel = new GUIContent("Default Sprite Asset", "The Sprite Asset that will be assigned by default when using the tag when no Sprite Asset is specified."); + public static readonly GUIContent missingSpriteCharacterUnicodeLabel = new GUIContent("Missing Sprite Unicode", "The unicode value for the sprite character to be displayed when the requested sprite character is not found in any sprite assets or fallbacks."); + public static readonly GUIContent enableEmojiSupportLabel = new GUIContent("iOS Emoji Support", "Enables Emoji support for Touch Screen Keyboards on target devices."); + //public static readonly GUIContent spriteRelativeScale = new GUIContent("Relative Scaling", "Determines if the sprites will be scaled relative to the primary font asset assigned to the text object or relative to the current font asset."); + + public static readonly GUIContent spriteAssetsPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Sprite Assets are located.\nExample \"Sprite Assets/\""); + + public static readonly GUIContent defaultStyleSheetLabel = new GUIContent("Default Style Sheet", "The Style Sheet that will be used for all text objects in this project."); + public static readonly GUIContent styleSheetResourcePathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Style Sheets are located.\nExample \"Style Sheets/\""); + + public static readonly GUIContent colorGradientPresetsLabel = new GUIContent("Color Gradient Presets", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\""); + public static readonly GUIContent colorGradientsPathLabel = new GUIContent("Path: Resources/", "The relative path to a Resources folder where the Color Gradient Presets are located.\nExample \"Color Gradient Presets/\""); + + public static readonly GUIContent lineBreakingLabel = new GUIContent("Line Breaking for Asian languages", "The text assets that contain the Leading and Following characters which define the rules for line breaking with Asian languages."); + public static readonly GUIContent koreanSpecificRules = new GUIContent("Korean Language Options"); + } + + SerializedProperty m_PropFontAsset; + SerializedProperty m_PropDefaultFontAssetPath; + SerializedProperty m_PropDefaultFontSize; + SerializedProperty m_PropDefaultAutoSizeMinRatio; + SerializedProperty m_PropDefaultAutoSizeMaxRatio; + SerializedProperty m_PropDefaultTextMeshProTextContainerSize; + SerializedProperty m_PropDefaultTextMeshProUITextContainerSize; + SerializedProperty m_PropAutoSizeTextContainer; + SerializedProperty m_PropEnableRaycastTarget; + SerializedProperty m_PropIsTextObjectScaleStatic; + + SerializedProperty m_PropSpriteAsset; + SerializedProperty m_PropMissingSpriteCharacterUnicode; + //SerializedProperty m_PropSpriteRelativeScaling; + SerializedProperty m_PropEnableEmojiSupport; + SerializedProperty m_PropSpriteAssetPath; + + + SerializedProperty m_PropStyleSheet; + SerializedProperty m_PropStyleSheetsResourcePath; + ReorderableList m_List; + + SerializedProperty m_PropColorGradientPresetsPath; + + SerializedProperty m_PropMatchMaterialPreset; + SerializedProperty m_PropWordWrapping; + SerializedProperty m_PropKerning; + SerializedProperty m_PropExtraPadding; + SerializedProperty m_PropTintAllSprites; + SerializedProperty m_PropParseEscapeCharacters; + SerializedProperty m_PropMissingGlyphCharacter; + + //SerializedProperty m_DynamicAtlasTextureManager; + SerializedProperty m_GetFontFeaturesAtRuntime; + + SerializedProperty m_PropWarningsDisabled; + + SerializedProperty m_PropLeadingCharacters; + SerializedProperty m_PropFollowingCharacters; + SerializedProperty m_PropUseModernHangulLineBreakingRules; + + private const string k_UndoRedo = "UndoRedoPerformed"; + + public void OnEnable() + { + if (target == null) + return; + + m_PropFontAsset = serializedObject.FindProperty("m_defaultFontAsset"); + m_PropDefaultFontAssetPath = serializedObject.FindProperty("m_defaultFontAssetPath"); + m_PropDefaultFontSize = serializedObject.FindProperty("m_defaultFontSize"); + m_PropDefaultAutoSizeMinRatio = serializedObject.FindProperty("m_defaultAutoSizeMinRatio"); + m_PropDefaultAutoSizeMaxRatio = serializedObject.FindProperty("m_defaultAutoSizeMaxRatio"); + m_PropDefaultTextMeshProTextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProTextContainerSize"); + m_PropDefaultTextMeshProUITextContainerSize = serializedObject.FindProperty("m_defaultTextMeshProUITextContainerSize"); + m_PropAutoSizeTextContainer = serializedObject.FindProperty("m_autoSizeTextContainer"); + m_PropEnableRaycastTarget = serializedObject.FindProperty("m_EnableRaycastTarget"); + m_PropIsTextObjectScaleStatic = serializedObject.FindProperty("m_IsTextObjectScaleStatic"); + + m_PropSpriteAsset = serializedObject.FindProperty("m_defaultSpriteAsset"); + m_PropMissingSpriteCharacterUnicode = serializedObject.FindProperty("m_MissingCharacterSpriteUnicode"); + //m_PropSpriteRelativeScaling = serializedObject.FindProperty("m_SpriteRelativeScaling"); + m_PropEnableEmojiSupport = serializedObject.FindProperty("m_enableEmojiSupport"); + m_PropSpriteAssetPath = serializedObject.FindProperty("m_defaultSpriteAssetPath"); + + m_PropStyleSheet = serializedObject.FindProperty("m_defaultStyleSheet"); + m_PropStyleSheetsResourcePath = serializedObject.FindProperty("m_StyleSheetsResourcePath"); + + + m_PropColorGradientPresetsPath = serializedObject.FindProperty("m_defaultColorGradientPresetsPath"); + + m_List = new ReorderableList(serializedObject, serializedObject.FindProperty("m_fallbackFontAssets"), true, true, true, true); + + m_List.drawElementCallback = (rect, index, isActive, isFocused) => + { + var element = m_List.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 2; + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none); + }; + + m_List.drawHeaderCallback = rect => + { + EditorGUI.LabelField(rect, Styles.fallbackFontAssetsListLabel); + }; + + m_PropMatchMaterialPreset = serializedObject.FindProperty("m_matchMaterialPreset"); + + m_PropWordWrapping = serializedObject.FindProperty("m_enableWordWrapping"); + m_PropKerning = serializedObject.FindProperty("m_enableKerning"); + m_PropExtraPadding = serializedObject.FindProperty("m_enableExtraPadding"); + m_PropTintAllSprites = serializedObject.FindProperty("m_enableTintAllSprites"); + m_PropParseEscapeCharacters = serializedObject.FindProperty("m_enableParseEscapeCharacters"); + m_PropMissingGlyphCharacter = serializedObject.FindProperty("m_missingGlyphCharacter"); + + m_PropWarningsDisabled = serializedObject.FindProperty("m_warningsDisabled"); + + //m_DynamicAtlasTextureManager = serializedObject.FindProperty("m_DynamicAtlasTextureGroup"); + m_GetFontFeaturesAtRuntime = serializedObject.FindProperty("m_GetFontFeaturesAtRuntime"); + + m_PropLeadingCharacters = serializedObject.FindProperty("m_leadingCharacters"); + m_PropFollowingCharacters = serializedObject.FindProperty("m_followingCharacters"); + m_PropUseModernHangulLineBreakingRules = serializedObject.FindProperty("m_UseModernHangulLineBreakingRules"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + string evt_cmd = Event.current.commandName; + + float labelWidth = EditorGUIUtility.labelWidth; + float fieldWidth = EditorGUIUtility.fieldWidth; + + // TextMeshPro Font Info Panel + EditorGUI.indentLevel = 0; + + // FONT ASSET + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.defaultFontAssetLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropFontAsset, Styles.defaultFontAssetLabel); + EditorGUILayout.PropertyField(m_PropDefaultFontAssetPath, Styles.defaultFontAssetPathLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // FALLBACK FONT ASSETs + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.fallbackFontAssetsLabel, EditorStyles.boldLabel); + m_List.DoLayoutList(); + + GUILayout.Label(Styles.fallbackMaterialSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropMatchMaterialPreset, Styles.matchMaterialPresetLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // MISSING GLYPHS + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.dynamicFontSystemSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_GetFontFeaturesAtRuntime, Styles.getFontFeaturesAtRuntime); + EditorGUILayout.PropertyField(m_PropMissingGlyphCharacter, Styles.missingGlyphLabel); + EditorGUILayout.PropertyField(m_PropWarningsDisabled, Styles.disableWarningsLabel); + //EditorGUILayout.PropertyField(m_DynamicAtlasTextureManager, Styles.dynamicAtlasTextureManager); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // TEXT OBJECT DEFAULT PROPERTIES + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.containerDefaultSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + + EditorGUILayout.PropertyField(m_PropDefaultTextMeshProTextContainerSize, Styles.textMeshProLabel); + EditorGUILayout.PropertyField(m_PropDefaultTextMeshProUITextContainerSize, Styles.textMeshProUiLabel); + EditorGUILayout.PropertyField(m_PropEnableRaycastTarget, Styles.enableRaycastTarget); + EditorGUILayout.PropertyField(m_PropAutoSizeTextContainer, Styles.autoSizeContainerLabel); + EditorGUILayout.PropertyField(m_PropIsTextObjectScaleStatic, Styles.isTextObjectScaleStaticLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + + GUILayout.Label(Styles.textComponentDefaultSettingsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropDefaultFontSize, Styles.defaultFontSize); + + EditorGUILayout.BeginHorizontal(); + { + EditorGUILayout.PrefixLabel(Styles.autoSizeRatioLabel); + EditorGUIUtility.labelWidth = 32; + EditorGUIUtility.fieldWidth = 10; + + EditorGUI.indentLevel = 0; + EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMinRatio, Styles.minLabel); + EditorGUILayout.PropertyField(m_PropDefaultAutoSizeMaxRatio, Styles.maxLabel); + EditorGUI.indentLevel = 1; + } + EditorGUILayout.EndHorizontal(); + + EditorGUIUtility.labelWidth = labelWidth; + EditorGUIUtility.fieldWidth = fieldWidth; + + EditorGUILayout.PropertyField(m_PropWordWrapping, Styles.wordWrappingLabel); + EditorGUILayout.PropertyField(m_PropKerning, Styles.kerningLabel); + + EditorGUILayout.PropertyField(m_PropExtraPadding, Styles.extraPaddingLabel); + EditorGUILayout.PropertyField(m_PropTintAllSprites, Styles.tintAllSpritesLabel); + + EditorGUILayout.PropertyField(m_PropParseEscapeCharacters, Styles.parseEscapeCharactersLabel); + + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // SPRITE ASSET + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.defaultSpriteAssetLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropSpriteAsset, Styles.defaultSpriteAssetLabel); + EditorGUILayout.PropertyField(m_PropMissingSpriteCharacterUnicode, Styles.missingSpriteCharacterUnicodeLabel); + EditorGUILayout.PropertyField(m_PropEnableEmojiSupport, Styles.enableEmojiSupportLabel); + //EditorGUILayout.PropertyField(m_PropSpriteRelativeScaling, Styles.spriteRelativeScale); + EditorGUILayout.PropertyField(m_PropSpriteAssetPath, Styles.spriteAssetsPathLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // STYLE SHEET + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.defaultStyleSheetLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_PropStyleSheet, Styles.defaultStyleSheetLabel); + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + + TMP_StyleSheet styleSheet = m_PropStyleSheet.objectReferenceValue as TMP_StyleSheet; + if (styleSheet != null) + styleSheet.RefreshStyles(); + } + EditorGUILayout.PropertyField(m_PropStyleSheetsResourcePath, Styles.styleSheetResourcePathLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // COLOR GRADIENT PRESETS + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.colorGradientPresetsLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropColorGradientPresetsPath, Styles.colorGradientsPathLabel); + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + // LINE BREAKING RULE + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label(Styles.lineBreakingLabel, EditorStyles.boldLabel); + EditorGUI.indentLevel = 1; + EditorGUILayout.PropertyField(m_PropLeadingCharacters); + EditorGUILayout.PropertyField(m_PropFollowingCharacters); + + EditorGUILayout.Space(); + GUILayout.Label(Styles.koreanSpecificRules, EditorStyles.boldLabel); + EditorGUILayout.PropertyField(m_PropUseModernHangulLineBreakingRules, new GUIContent("Use Modern Line Breaking", "Determines if traditional or modern line breaking rules will be used to control line breaking. Traditional line breaking rules use the Leading and Following Character rules whereas Modern uses spaces for line breaking.")); + + EditorGUI.indentLevel = 0; + + EditorGUILayout.Space(); + EditorGUILayout.EndVertical(); + + if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo) + { + EditorUtility.SetDirty(target); + TMPro_EventManager.ON_TMP_SETTINGS_CHANGED(); + } + } + } + +#if UNITY_2018_3_OR_NEWER + class TMP_ResourceImporterProvider : SettingsProvider + { + TMP_PackageResourceImporter m_ResourceImporter; + + public TMP_ResourceImporterProvider() + : base("Project/TextMesh Pro", SettingsScope.Project) + { + } + + public override void OnGUI(string searchContext) + { + // Lazy creation that supports domain reload + if (m_ResourceImporter == null) + m_ResourceImporter = new TMP_PackageResourceImporter(); + + m_ResourceImporter.OnGUI(); + } + + public override void OnDeactivate() + { + if (m_ResourceImporter != null) + m_ResourceImporter.OnDestroy(); + } + + static UnityEngine.Object GetTMPSettings() + { + return Resources.Load("TMP Settings"); + } + + [SettingsProviderGroup] + static SettingsProvider[] CreateTMPSettingsProvider() + { + var providers = new List { new TMP_ResourceImporterProvider() }; + + if (GetTMPSettings() != null) + { + var provider = new AssetSettingsProvider("Project/TextMesh Pro/Settings", GetTMPSettings); + provider.PopulateSearchKeywordsFromGUIContentProperties(); + providers.Add(provider); + } + + return providers.ToArray(); + } + } +#endif +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SettingsEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SettingsEditor.cs.meta new file mode 100644 index 0000000..a719ae7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SettingsEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0386b6eb838c47138cd51d1c1b879a35 +timeCreated: 1436658550 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetEditor.cs new file mode 100644 index 0000000..e7d48d1 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetEditor.cs @@ -0,0 +1,953 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using UnityEditorInternal; +using System.Collections.Generic; + + +namespace TMPro.EditorUtilities +{ + + [CustomEditor(typeof(TMP_SpriteAsset))] + public class TMP_SpriteAssetEditor : Editor + { + struct UI_PanelState + { + public static bool spriteAssetFaceInfoPanel = true; + public static bool spriteAtlasInfoPanel = true; + public static bool fallbackSpriteAssetPanel = true; + public static bool spriteCharacterTablePanel; + public static bool spriteGlyphTablePanel; + } + + private static string[] s_UiStateLabel = new string[] { "(Click to collapse) ", "(Click to expand) " }; + + int m_moveToIndex; + int m_selectedElement = -1; + int m_CurrentCharacterPage; + int m_CurrentGlyphPage; + + const string k_UndoRedo = "UndoRedoPerformed"; + + string m_CharacterSearchPattern; + List m_CharacterSearchList; + bool m_IsCharacterSearchDirty; + + string m_GlyphSearchPattern; + List m_GlyphSearchList; + bool m_IsGlyphSearchDirty; + + SerializedProperty m_FaceInfoProperty; + SerializedProperty m_PointSizeProperty; + SerializedProperty m_ScaleProperty; + SerializedProperty m_LineHeightProperty; + SerializedProperty m_AscentLineProperty; + SerializedProperty m_BaselineProperty; + SerializedProperty m_DescentLineProperty; + + SerializedProperty m_spriteAtlas_prop; + SerializedProperty m_material_prop; + SerializedProperty m_SpriteCharacterTableProperty; + SerializedProperty m_SpriteGlyphTableProperty; + ReorderableList m_fallbackSpriteAssetList; + + TMP_SpriteAsset m_SpriteAsset; + + bool isAssetDirty; + + float m_xOffset; + float m_yOffset; + float m_xAdvance; + float m_scale; + + public void OnEnable() + { + m_SpriteAsset = target as TMP_SpriteAsset; + + m_FaceInfoProperty = serializedObject.FindProperty("m_FaceInfo"); + m_PointSizeProperty = m_FaceInfoProperty.FindPropertyRelative("m_PointSize"); + m_ScaleProperty = m_FaceInfoProperty.FindPropertyRelative("m_Scale"); + m_LineHeightProperty = m_FaceInfoProperty.FindPropertyRelative("m_LineHeight"); + m_AscentLineProperty = m_FaceInfoProperty.FindPropertyRelative("m_AscentLine"); + m_BaselineProperty = m_FaceInfoProperty.FindPropertyRelative("m_Baseline"); + m_DescentLineProperty = m_FaceInfoProperty.FindPropertyRelative("m_DescentLine"); + + m_spriteAtlas_prop = serializedObject.FindProperty("spriteSheet"); + m_material_prop = serializedObject.FindProperty("material"); + m_SpriteCharacterTableProperty = serializedObject.FindProperty("m_SpriteCharacterTable"); + m_SpriteGlyphTableProperty = serializedObject.FindProperty("m_SpriteGlyphTable"); + + // Fallback TMP Sprite Asset list + m_fallbackSpriteAssetList = new ReorderableList(serializedObject, serializedObject.FindProperty("fallbackSpriteAssets"), true, true, true, true); + + m_fallbackSpriteAssetList.drawElementCallback = (Rect rect, int index, bool isActive, bool isFocused) => + { + var element = m_fallbackSpriteAssetList.serializedProperty.GetArrayElementAtIndex(index); + rect.y += 2; + EditorGUI.PropertyField(new Rect(rect.x, rect.y, rect.width, EditorGUIUtility.singleLineHeight), element, GUIContent.none); + }; + + m_fallbackSpriteAssetList.drawHeaderCallback = rect => + { + EditorGUI.LabelField(rect, new GUIContent("Fallback Sprite Asset List", "Select the Sprite Assets that will be searched and used as fallback when a given sprite is missing from this sprite asset.")); + }; + } + + + public override void OnInspectorGUI() + { + + //Debug.Log("OnInspectorGUI Called."); + Event currentEvent = Event.current; + string evt_cmd = currentEvent.commandName; // Get Current Event CommandName to check for Undo Events + + serializedObject.Update(); + + + // TEXTMESHPRO SPRITE INFO PANEL + #region Display Sprite Asset Face Info + Rect rect = EditorGUILayout.GetControlRect(false, 24); + + GUI.Label(rect, new GUIContent("Face Info - v" + m_SpriteAsset.version), TMP_UIStyleManager.sectionHeader); + + rect.x += rect.width - 132f; + rect.y += 2; + rect.width = 130f; + rect.height = 18f; + if (GUI.Button(rect, new GUIContent("Update Sprite Asset"))) + { + TMP_SpriteAssetMenu.UpdateSpriteAsset(m_SpriteAsset); + } + EditorGUI.indentLevel = 1; + + EditorGUILayout.PropertyField(m_PointSizeProperty); + EditorGUILayout.PropertyField(m_ScaleProperty); + //EditorGUILayout.PropertyField(m_LineHeightProperty); + EditorGUILayout.PropertyField(m_AscentLineProperty); + EditorGUILayout.PropertyField(m_BaselineProperty); + EditorGUILayout.PropertyField(m_DescentLineProperty); + EditorGUILayout.Space(); + #endregion + + + // ATLAS TEXTURE & MATERIAL + #region Display Atlas Texture and Material + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Atlas & Material"), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.spriteAtlasInfoPanel = !UI_PanelState.spriteAtlasInfoPanel; + + GUI.Label(rect, (UI_PanelState.spriteAtlasInfoPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.spriteAtlasInfoPanel) + { + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(m_spriteAtlas_prop, new GUIContent("Sprite Atlas")); + if (EditorGUI.EndChangeCheck()) + { + // Assign the new sprite atlas texture to the current material + Texture2D tex = m_spriteAtlas_prop.objectReferenceValue as Texture2D; + if (tex != null) + { + Material mat = m_material_prop.objectReferenceValue as Material; + if (mat != null) + mat.mainTexture = tex; + } + } + + EditorGUILayout.PropertyField(m_material_prop, new GUIContent("Default Material")); + EditorGUILayout.Space(); + } + #endregion + + + // FALLBACK SPRITE ASSETS + #region Display Sprite Fallbacks + rect = EditorGUILayout.GetControlRect(false, 24); + EditorGUI.indentLevel = 0; + if (GUI.Button(rect, new GUIContent("Fallback Sprite Assets", "Select the Sprite Assets that will be searched and used as fallback when a given sprite is missing from this sprite asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.fallbackSpriteAssetPanel = !UI_PanelState.fallbackSpriteAssetPanel; + + GUI.Label(rect, (UI_PanelState.fallbackSpriteAssetPanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.fallbackSpriteAssetPanel) + { + m_fallbackSpriteAssetList.DoLayoutList(); + EditorGUILayout.Space(); + } + #endregion + + + // SPRITE CHARACTER TABLE + #region Display Sprite Character Table + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Sprite Character Table", "List of sprite characters contained in this sprite asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.spriteCharacterTablePanel = !UI_PanelState.spriteCharacterTablePanel; + + GUI.Label(rect, (UI_PanelState.spriteCharacterTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.spriteCharacterTablePanel) + { + int arraySize = m_SpriteCharacterTableProperty.arraySize; + int itemsPerPage = 10; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.ExpandWidth(true)); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 110f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Sprite Search", m_CharacterSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_IsCharacterSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + //GUIUtility.keyboardControl = 0; + m_CharacterSearchPattern = searchPattern.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + + // Search Glyph Table for potential matches + SearchCharacterTable(m_CharacterSearchPattern, ref m_CharacterSearchList); + } + else + m_CharacterSearchPattern = null; + + m_IsCharacterSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_CharacterSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_CharacterSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + arraySize = m_CharacterSearchList.Count; + + // Display Page Navigation + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + if (arraySize > 0) + { + // Display each SpriteInfo entry using the SpriteInfo property drawer. + for (int i = itemsPerPage * m_CurrentCharacterPage; i < arraySize && i < itemsPerPage * (m_CurrentCharacterPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_CharacterSearchPattern)) + elementIndex = m_CharacterSearchList[i]; + + SerializedProperty spriteCharacterProperty = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + EditorGUI.BeginDisabledGroup(i != m_selectedElement); + { + EditorGUILayout.PropertyField(spriteCharacterProperty); + } + EditorGUI.EndDisabledGroup(); + } + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_selectedElement == i) + { + m_selectedElement = -1; + } + else + { + m_selectedElement = i; + GUIUtility.keyboardControl = 0; + } + } + + // Draw & Handle Section Area + if (m_selectedElement == i) + { + // Draw selection highlight + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw options to MoveUp, MoveDown, Add or Remove Sprites + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + controlRect.width /= 8; + + // Move sprite up. + bool guiEnabled = GUI.enabled; + if (i == 0) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Up")) + { + SwapCharacterElements(i, i - 1); + } + GUI.enabled = guiEnabled; + + // Move sprite down. + controlRect.x += controlRect.width; + if (i == arraySize - 1) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Down")) + { + SwapCharacterElements(i, i + 1); + } + GUI.enabled = guiEnabled; + + // Move sprite to new index + controlRect.x += controlRect.width * 2; + //if (i == arraySize - 1) { GUI.enabled = false; } + m_moveToIndex = EditorGUI.IntField(controlRect, m_moveToIndex); + controlRect.x -= controlRect.width; + if (GUI.Button(controlRect, "Goto")) + { + MoveCharacterToIndex(i, m_moveToIndex); + } + //controlRect.x += controlRect.width; + GUI.enabled = guiEnabled; + + // Add new Sprite + controlRect.x += controlRect.width * 4; + if (GUI.Button(controlRect, "+")) + { + m_SpriteCharacterTableProperty.arraySize += 1; + + int index = m_SpriteCharacterTableProperty.arraySize - 1; + + SerializedProperty spriteInfo_prop = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(index); + + // Copy properties of the selected element + CopyCharacterSerializedProperty(m_SpriteCharacterTableProperty.GetArrayElementAtIndex(elementIndex), ref spriteInfo_prop); + + //spriteInfo_prop.FindPropertyRelative("m_Index").intValue = index; + serializedObject.ApplyModifiedProperties(); + + m_IsCharacterSearchDirty = true; + } + + // Delete selected Sprite + controlRect.x += controlRect.width; + if (m_selectedElement == -1) GUI.enabled = false; + if (GUI.Button(controlRect, "-")) + { + m_SpriteCharacterTableProperty.DeleteArrayElementAtIndex(elementIndex); + + m_selectedElement = -1; + serializedObject.ApplyModifiedProperties(); + + m_IsCharacterSearchDirty = true; + + return; + } + + + } + } + } + + DisplayPageNavigation(ref m_CurrentCharacterPage, arraySize, itemsPerPage); + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 20f; + + GUILayout.Space(5f); + + // GLOBAL TOOLS + #region Global Tools + /* + GUI.enabled = true; + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + rect = EditorGUILayout.GetControlRect(false, 40); + + float width = (rect.width - 75f) / 4; + EditorGUI.LabelField(rect, "Global Offsets & Scale", EditorStyles.boldLabel); + + + rect.x += 70; + bool old_ChangedState = GUI.changed; + + GUI.changed = false; + m_xOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 0, rect.y + 20, width - 5f, 18), new GUIContent("OX:"), m_xOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingX", m_xOffset); + + m_yOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 1, rect.y + 20, width - 5f, 18), new GUIContent("OY:"), m_yOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingY", m_yOffset); + + m_xAdvance = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 2, rect.y + 20, width - 5f, 18), new GUIContent("ADV."), m_xAdvance); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalAdvance", m_xAdvance); + + m_scale = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 3, rect.y + 20, width - 5f, 18), new GUIContent("SF."), m_scale); + if (GUI.changed) UpdateGlobalProperty("m_Scale", m_scale); + + EditorGUILayout.EndVertical(); + + GUI.changed = old_ChangedState; + */ + #endregion + + } + #endregion + + + // SPRITE GLYPH TABLE + #region Display Sprite Glyph Table + EditorGUI.indentLevel = 0; + rect = EditorGUILayout.GetControlRect(false, 24); + + if (GUI.Button(rect, new GUIContent("Sprite Glyph Table", "A list of the SpriteGlyphs contained in this sprite asset."), TMP_UIStyleManager.sectionHeader)) + UI_PanelState.spriteGlyphTablePanel = !UI_PanelState.spriteGlyphTablePanel; + + GUI.Label(rect, (UI_PanelState.spriteGlyphTablePanel ? "" : s_UiStateLabel[1]), TMP_UIStyleManager.rightLabel); + + if (UI_PanelState.spriteGlyphTablePanel) + { + int arraySize = m_SpriteGlyphTableProperty.arraySize; + int itemsPerPage = 10; + + // Display Glyph Management Tools + EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.ExpandWidth(true)); + { + // Search Bar implementation + #region DISPLAY SEARCH BAR + EditorGUILayout.BeginHorizontal(); + { + EditorGUIUtility.labelWidth = 110f; + EditorGUI.BeginChangeCheck(); + string searchPattern = EditorGUILayout.TextField("Sprite Search", m_GlyphSearchPattern, "SearchTextField"); + if (EditorGUI.EndChangeCheck() || m_IsGlyphSearchDirty) + { + if (string.IsNullOrEmpty(searchPattern) == false) + { + //GUIUtility.keyboardControl = 0; + m_GlyphSearchPattern = searchPattern.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + + // Search Glyph Table for potential matches + SearchCharacterTable(m_GlyphSearchPattern, ref m_GlyphSearchList); + } + else + m_GlyphSearchPattern = null; + + m_IsGlyphSearchDirty = false; + } + + string styleName = string.IsNullOrEmpty(m_GlyphSearchPattern) ? "SearchCancelButtonEmpty" : "SearchCancelButton"; + if (GUILayout.Button(GUIContent.none, styleName)) + { + GUIUtility.keyboardControl = 0; + m_GlyphSearchPattern = string.Empty; + } + } + EditorGUILayout.EndHorizontal(); + #endregion + + // Display Page Navigation + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + arraySize = m_GlyphSearchList.Count; + + // Display Page Navigation + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + } + EditorGUILayout.EndVertical(); + + if (arraySize > 0) + { + // Display each SpriteInfo entry using the SpriteInfo property drawer. + for (int i = itemsPerPage * m_CurrentGlyphPage; i < arraySize && i < itemsPerPage * (m_CurrentGlyphPage + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + int elementIndex = i; + if (!string.IsNullOrEmpty(m_GlyphSearchPattern)) + elementIndex = m_GlyphSearchList[i]; + + SerializedProperty spriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + { + EditorGUI.BeginDisabledGroup(i != m_selectedElement); + { + EditorGUILayout.PropertyField(spriteGlyphProperty); + } + EditorGUI.EndDisabledGroup(); + } + EditorGUILayout.EndVertical(); + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_selectedElement == i) + { + m_selectedElement = -1; + } + else + { + m_selectedElement = i; + GUIUtility.keyboardControl = 0; + } + } + + // Draw & Handle Section Area + if (m_selectedElement == i) + { + // Draw selection highlight + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + + // Draw options to MoveUp, MoveDown, Add or Remove Sprites + Rect controlRect = EditorGUILayout.GetControlRect(true, EditorGUIUtility.singleLineHeight * 1f); + controlRect.width /= 8; + + // Move sprite up. + bool guiEnabled = GUI.enabled; + if (i == 0) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Up")) + { + SwapGlyphElements(i, i - 1); + } + GUI.enabled = guiEnabled; + + // Move sprite down. + controlRect.x += controlRect.width; + if (i == arraySize - 1) { GUI.enabled = false; } + if (GUI.Button(controlRect, "Down")) + { + SwapGlyphElements(i, i + 1); + } + GUI.enabled = guiEnabled; + + // Move sprite to new index + controlRect.x += controlRect.width * 2; + //if (i == arraySize - 1) { GUI.enabled = false; } + m_moveToIndex = EditorGUI.IntField(controlRect, m_moveToIndex); + controlRect.x -= controlRect.width; + if (GUI.Button(controlRect, "Goto")) + { + MoveGlyphToIndex(i, m_moveToIndex); + } + //controlRect.x += controlRect.width; + GUI.enabled = guiEnabled; + + // Add new Sprite + controlRect.x += controlRect.width * 4; + if (GUI.Button(controlRect, "+")) + { + m_SpriteGlyphTableProperty.arraySize += 1; + + int index = m_SpriteGlyphTableProperty.arraySize - 1; + + SerializedProperty newSpriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(index); + + // Copy properties of the selected element + CopyGlyphSerializedProperty(m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex), ref newSpriteGlyphProperty); + + newSpriteGlyphProperty.FindPropertyRelative("m_Index").intValue = index; + + serializedObject.ApplyModifiedProperties(); + + m_IsGlyphSearchDirty = true; + + //m_SpriteAsset.UpdateLookupTables(); + } + + // Delete selected Sprite + controlRect.x += controlRect.width; + if (m_selectedElement == -1) GUI.enabled = false; + if (GUI.Button(controlRect, "-")) + { + SerializedProperty selectedSpriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(elementIndex); + + int selectedGlyphIndex = selectedSpriteGlyphProperty.FindPropertyRelative("m_Index").intValue; + + m_SpriteGlyphTableProperty.DeleteArrayElementAtIndex(elementIndex); + + // Remove all Sprite Characters referencing this glyph. + for (int j = 0; j < m_SpriteCharacterTableProperty.arraySize; j++) + { + int glyphIndex = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(j).FindPropertyRelative("m_GlyphIndex").intValue; + + if (glyphIndex == selectedGlyphIndex) + { + // Remove character + m_SpriteCharacterTableProperty.DeleteArrayElementAtIndex(j); + } + } + + m_selectedElement = -1; + serializedObject.ApplyModifiedProperties(); + + m_IsGlyphSearchDirty = true; + + //m_SpriteAsset.UpdateLookupTables(); + + return; + } + + + } + } + } + + DisplayPageNavigation(ref m_CurrentGlyphPage, arraySize, itemsPerPage); + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 20f; + + GUILayout.Space(5f); + + // GLOBAL TOOLS + #region Global Tools + GUI.enabled = true; + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + rect = EditorGUILayout.GetControlRect(false, 40); + + float width = (rect.width - 75f) / 4; + EditorGUI.LabelField(rect, "Global Offsets & Scale", EditorStyles.boldLabel); + + + rect.x += 70; + bool old_ChangedState = GUI.changed; + + GUI.changed = false; + m_xOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 0, rect.y + 20, width - 5f, 18), new GUIContent("OX:"), m_xOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingX", m_xOffset); + + m_yOffset = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 1, rect.y + 20, width - 5f, 18), new GUIContent("OY:"), m_yOffset); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalBearingY", m_yOffset); + + m_xAdvance = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 2, rect.y + 20, width - 5f, 18), new GUIContent("ADV."), m_xAdvance); + if (GUI.changed) UpdateGlobalProperty("m_HorizontalAdvance", m_xAdvance); + + m_scale = EditorGUI.FloatField(new Rect(rect.x + 5f + width * 3, rect.y + 20, width - 5f, 18), new GUIContent("SF."), m_scale); + if (GUI.changed) UpdateGlobalProperty("m_Scale", m_scale); + + EditorGUILayout.EndVertical(); + #endregion + + GUI.changed = old_ChangedState; + + } + #endregion + + + if (serializedObject.ApplyModifiedProperties() || evt_cmd == k_UndoRedo || isAssetDirty) + { + if (m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty || evt_cmd == k_UndoRedo) + m_SpriteAsset.UpdateLookupTables(); + + TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, m_SpriteAsset); + + isAssetDirty = false; + EditorUtility.SetDirty(target); + } + + // Clear selection if mouse event was not consumed. + GUI.enabled = true; + if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) + m_selectedElement = -1; + + } + + + /// + /// + /// + /// + /// + void DisplayPageNavigation(ref int currentPage, int arraySize, int itemsPerPage) + { + Rect pagePos = EditorGUILayout.GetControlRect(false, 20); + pagePos.width /= 3; + + int shiftMultiplier = Event.current.shift ? 10 : 1; // Page + Shift goes 10 page forward + + // Previous Page + GUI.enabled = currentPage > 0; + + if (GUI.Button(pagePos, "Previous Page")) + { + currentPage -= 1 * shiftMultiplier; + //m_isNewPage = true; + } + + // Page Counter + GUI.enabled = true; + pagePos.x += pagePos.width; + int totalPages = (int)(arraySize / (float)itemsPerPage + 0.999f); + GUI.Label(pagePos, "Page " + (currentPage + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel); + + // Next Page + pagePos.x += pagePos.width; + GUI.enabled = itemsPerPage * (currentPage + 1) < arraySize; + + if (GUI.Button(pagePos, "Next Page")) + { + currentPage += 1 * shiftMultiplier; + //m_isNewPage = true; + } + + // Clamp page range + currentPage = Mathf.Clamp(currentPage, 0, arraySize / itemsPerPage); + + GUI.enabled = true; + } + + + /// + /// Method to update the properties of all sprites + /// + /// + /// + void UpdateGlobalProperty(string property, float value) + { + int arraySize = m_SpriteGlyphTableProperty.arraySize; + + for (int i = 0; i < arraySize; i++) + { + // Get a reference to the sprite glyph. + SerializedProperty spriteGlyphProperty = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(i); + + if (property == "m_Scale") + { + spriteGlyphProperty.FindPropertyRelative(property).floatValue = value; + } + else + { + SerializedProperty glyphMetricsProperty = spriteGlyphProperty.FindPropertyRelative("m_Metrics"); + glyphMetricsProperty.FindPropertyRelative(property).floatValue = value; + } + } + + GUI.changed = false; + } + + // Check if any of the Style elements were clicked on. + private bool DoSelectionCheck(Rect selectionArea) + { + Event currentEvent = Event.current; + + switch (currentEvent.type) + { + case EventType.MouseDown: + if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0) + { + currentEvent.Use(); + return true; + } + break; + } + + return false; + } + + + /// + /// Swap the sprite item at the currently selected array index to another index. + /// + /// Selected index. + /// New index. + void SwapCharacterElements(int selectedIndex, int newIndex) + { + m_SpriteCharacterTableProperty.MoveArrayElement(selectedIndex, newIndex); + m_selectedElement = newIndex; + m_IsCharacterSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + /// + /// Move Sprite Element at selected index to another index and reorder sprite list. + /// + /// + /// + void MoveCharacterToIndex(int selectedIndex, int newIndex) + { + int arraySize = m_SpriteCharacterTableProperty.arraySize; + + if (newIndex >= arraySize) + newIndex = arraySize - 1; + + m_SpriteCharacterTableProperty.MoveArrayElement(selectedIndex, newIndex); + + m_selectedElement = newIndex; + m_IsCharacterSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + + // TODO: Need to handle switching pages if the character or glyph is moved to a different page. + } + + /// + /// + /// + /// + /// + void SwapGlyphElements(int selectedIndex, int newIndex) + { + m_SpriteGlyphTableProperty.MoveArrayElement(selectedIndex, newIndex); + m_selectedElement = newIndex; + m_IsGlyphSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + /// + /// Move Sprite Element at selected index to another index and reorder sprite list. + /// + /// + /// + void MoveGlyphToIndex(int selectedIndex, int newIndex) + { + int arraySize = m_SpriteGlyphTableProperty.arraySize; + + if (newIndex >= arraySize) + newIndex = arraySize - 1; + + m_SpriteGlyphTableProperty.MoveArrayElement(selectedIndex, newIndex); + + m_selectedElement = newIndex; + m_IsGlyphSearchDirty = true; + m_SpriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + + // TODO: Need to handle switching pages if the character or glyph is moved to a different page. + } + + + /// + /// + /// + /// + /// + void CopyCharacterSerializedProperty(SerializedProperty source, ref SerializedProperty target) + { + target.FindPropertyRelative("m_Name").stringValue = source.FindPropertyRelative("m_Name").stringValue; + target.FindPropertyRelative("m_HashCode").intValue = source.FindPropertyRelative("m_HashCode").intValue; + target.FindPropertyRelative("m_Unicode").intValue = source.FindPropertyRelative("m_Unicode").intValue; + target.FindPropertyRelative("m_GlyphIndex").intValue = source.FindPropertyRelative("m_GlyphIndex").intValue; + target.FindPropertyRelative("m_Scale").floatValue = source.FindPropertyRelative("m_Scale").floatValue; + } + + void CopyGlyphSerializedProperty(SerializedProperty srcGlyph, ref SerializedProperty dstGlyph) + { + // TODO : Should make a generic function which copies each of the properties. + + // Index + dstGlyph.FindPropertyRelative("m_Index").intValue = srcGlyph.FindPropertyRelative("m_Index").intValue; + + // GlyphMetrics + SerializedProperty srcGlyphMetrics = srcGlyph.FindPropertyRelative("m_Metrics"); + SerializedProperty dstGlyphMetrics = dstGlyph.FindPropertyRelative("m_Metrics"); + + dstGlyphMetrics.FindPropertyRelative("m_Width").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Width").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_Height").floatValue = srcGlyphMetrics.FindPropertyRelative("m_Height").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingX").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalBearingY").floatValue; + dstGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue = srcGlyphMetrics.FindPropertyRelative("m_HorizontalAdvance").floatValue; + + // GlyphRect + SerializedProperty srcGlyphRect = srcGlyph.FindPropertyRelative("m_GlyphRect"); + SerializedProperty dstGlyphRect = dstGlyph.FindPropertyRelative("m_GlyphRect"); + + dstGlyphRect.FindPropertyRelative("m_X").intValue = srcGlyphRect.FindPropertyRelative("m_X").intValue; + dstGlyphRect.FindPropertyRelative("m_Y").intValue = srcGlyphRect.FindPropertyRelative("m_Y").intValue; + dstGlyphRect.FindPropertyRelative("m_Width").intValue = srcGlyphRect.FindPropertyRelative("m_Width").intValue; + dstGlyphRect.FindPropertyRelative("m_Height").intValue = srcGlyphRect.FindPropertyRelative("m_Height").intValue; + + dstGlyph.FindPropertyRelative("m_Scale").floatValue = srcGlyph.FindPropertyRelative("m_Scale").floatValue; + dstGlyph.FindPropertyRelative("m_AtlasIndex").intValue = srcGlyph.FindPropertyRelative("m_AtlasIndex").intValue; + } + + + /// + /// + /// + /// + /// + void SearchCharacterTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + searchResults.Clear(); + + int arraySize = m_SpriteCharacterTableProperty.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceSprite = m_SpriteCharacterTableProperty.GetArrayElementAtIndex(i); + + // Check for potential match against array index + if (i.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against decimal id + int id = sourceSprite.FindPropertyRelative("m_GlyphIndex").intValue; + if (id.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against name + string name = sourceSprite.FindPropertyRelative("m_Name").stringValue.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + if (name.Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + } + } + + void SearchGlyphTable(string searchPattern, ref List searchResults) + { + if (searchResults == null) searchResults = new List(); + searchResults.Clear(); + + int arraySize = m_SpriteGlyphTableProperty.arraySize; + + for (int i = 0; i < arraySize; i++) + { + SerializedProperty sourceSprite = m_SpriteGlyphTableProperty.GetArrayElementAtIndex(i); + + // Check for potential match against array index + if (i.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against decimal id + int id = sourceSprite.FindPropertyRelative("m_GlyphIndex").intValue; + if (id.ToString().Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + + // Check for potential match against name + string name = sourceSprite.FindPropertyRelative("m_Name").stringValue.ToLower(System.Globalization.CultureInfo.InvariantCulture).Trim(); + if (name.Contains(searchPattern)) + { + searchResults.Add(i); + continue; + } + } + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta new file mode 100644 index 0000000..9fcede3 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: b09be1f217d34247af54863a2f5587e1 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetImporter.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetImporter.cs new file mode 100644 index 0000000..89be4ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetImporter.cs @@ -0,0 +1,257 @@ +using System; +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.IO; +using System.Collections.Generic; +using TMPro.EditorUtilities; +using TMPro.SpriteAssetUtilities; + +namespace TMPro +{ + public class TMP_SpriteAssetImporter : EditorWindow + { + // Create Sprite Asset Editor Window + [MenuItem("Window/TextMeshPro/Sprite Importer", false, 2026)] + public static void ShowFontAtlasCreatorWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Sprite Importer"); + window.Focus(); + } + + Texture2D m_SpriteAtlas; + SpriteAssetImportFormats m_SpriteDataFormat = SpriteAssetImportFormats.TexturePackerJsonArray; + TextAsset m_JsonFile; + + string m_CreationFeedback; + + TMP_SpriteAsset m_SpriteAsset; + List m_SpriteInfoList = new List(); + + /// + /// + /// + void OnEnable() + { + // Set Editor Window Size + SetEditorWindowSize(); + } + + /// + /// + /// + public void OnGUI() + { + DrawEditorPanel(); + } + + /// + /// + /// + private void OnDisable() + { + // Clean up sprite asset object that may have been created and not saved. + if (m_SpriteAsset != null && !EditorUtility.IsPersistent(m_SpriteAsset)) + DestroyImmediate(m_SpriteAsset); + } + + /// + /// + /// + void DrawEditorPanel() + { + // label + GUILayout.Label("Import Settings", EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + // Sprite Texture Selection + m_JsonFile = EditorGUILayout.ObjectField("Sprite Data Source", m_JsonFile, typeof(TextAsset), false) as TextAsset; + + m_SpriteDataFormat = (SpriteAssetImportFormats)EditorGUILayout.EnumPopup("Import Format", m_SpriteDataFormat); + + // Sprite Texture Selection + m_SpriteAtlas = EditorGUILayout.ObjectField("Sprite Texture Atlas", m_SpriteAtlas, typeof(Texture2D), false) as Texture2D; + + if (EditorGUI.EndChangeCheck()) + { + m_CreationFeedback = string.Empty; + } + + GUILayout.Space(10); + + GUI.enabled = m_JsonFile != null && m_SpriteAtlas != null && m_SpriteDataFormat != SpriteAssetImportFormats.None; + + // Create Sprite Asset + if (GUILayout.Button("Create Sprite Asset")) + { + m_CreationFeedback = string.Empty; + + // Clean up sprite asset object that may have been previously created. + if (m_SpriteAsset != null && !EditorUtility.IsPersistent(m_SpriteAsset)) + DestroyImmediate(m_SpriteAsset); + + // Read json data file + if (m_JsonFile != null) + { + switch (m_SpriteDataFormat) + { + case SpriteAssetImportFormats.TexturePackerJsonArray: + TexturePacker_JsonArray.SpriteDataObject jsonData = null; + try + { + jsonData = JsonUtility.FromJson(m_JsonFile.text); + } + catch + { + m_CreationFeedback = "The Sprite Data Source file [" + m_JsonFile.name + "] appears to be invalid or incorrectly formatted."; + } + + if (jsonData != null && jsonData.frames != null && jsonData.frames.Count > 0) + { + int spriteCount = jsonData.frames.Count; + + // Update import results + m_CreationFeedback = "Import Results\n--------------------\n"; + m_CreationFeedback += "" + spriteCount + " Sprites were imported from file."; + + // Create new Sprite Asset + m_SpriteAsset = CreateInstance(); + + // Assign sprite sheet / atlas texture to sprite asset + m_SpriteAsset.spriteSheet = m_SpriteAtlas; + + List spriteGlyphTable = new List(); + List spriteCharacterTable = new List(); + + PopulateSpriteTables(jsonData, spriteCharacterTable, spriteGlyphTable); + + m_SpriteAsset.spriteCharacterTable = spriteCharacterTable; + m_SpriteAsset.spriteGlyphTable = spriteGlyphTable; + } + break; + } + } + } + + GUI.enabled = true; + + // Creation Feedback + GUILayout.Space(5); + GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(60)); + { + EditorGUILayout.TextArea(m_CreationFeedback, TMP_UIStyleManager.label); + } + GUILayout.EndVertical(); + + GUILayout.Space(5); + GUI.enabled = m_JsonFile != null && m_SpriteAtlas && m_SpriteInfoList != null && m_SpriteAsset != null; + if (GUILayout.Button("Save Sprite Asset") && m_JsonFile != null) + { + string filePath = EditorUtility.SaveFilePanel("Save Sprite Asset File", new FileInfo(AssetDatabase.GetAssetPath(m_JsonFile)).DirectoryName, m_JsonFile.name, "asset"); + + if (filePath.Length == 0) + return; + + SaveSpriteAsset(filePath); + } + GUI.enabled = true; + } + + /// + /// + /// + /// + /// + /// + private static void PopulateSpriteTables(TexturePacker_JsonArray.SpriteDataObject spriteDataObject, List spriteCharacterTable, List spriteGlyphTable) + { + List importedSprites = spriteDataObject.frames; + + float atlasHeight = spriteDataObject.meta.size.h; + + for (int i = 0; i < importedSprites.Count; i++) + { + TexturePacker_JsonArray.Frame spriteData = importedSprites[i]; + + TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph(); + spriteGlyph.index = (uint)i; + + spriteGlyph.metrics = new GlyphMetrics((int)spriteData.frame.w, (int)spriteData.frame.h, -spriteData.frame.w * spriteData.pivot.x, spriteData.frame.h * spriteData.pivot.y, (int)spriteData.frame.w); + spriteGlyph.glyphRect = new GlyphRect((int)spriteData.frame.x, (int)(atlasHeight - spriteData.frame.h - spriteData.frame.y), (int)spriteData.frame.w, (int)spriteData.frame.h); + spriteGlyph.scale = 1.0f; + + spriteGlyphTable.Add(spriteGlyph); + + TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter(0, spriteGlyph); + spriteCharacter.name = spriteData.filename.Split('.')[0]; + spriteCharacter.unicode = 0xFFFE; + spriteCharacter.scale = 1.0f; + + spriteCharacterTable.Add(spriteCharacter); + } + } + + /// + /// + /// + /// + void SaveSpriteAsset(string filePath) + { + filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath. + + string dataPath = Application.dataPath; + + if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\""); + return; + } + + string relativeAssetPath = filePath.Substring(dataPath.Length - 6); + string dirName = Path.GetDirectoryName(relativeAssetPath); + string fileName = Path.GetFileNameWithoutExtension(relativeAssetPath); + string pathNoExt = dirName + "/" + fileName; + + // Save Sprite Asset + AssetDatabase.CreateAsset(m_SpriteAsset, pathNoExt + ".asset"); + + // Set version number + m_SpriteAsset.version = "1.1.0"; + + // Compute the hash code for the sprite asset. + m_SpriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(m_SpriteAsset.name); + + // Add new default material for sprite asset. + AddDefaultMaterial(m_SpriteAsset); + } + + /// + /// Create and add new default material to sprite asset. + /// + /// + static void AddDefaultMaterial(TMP_SpriteAsset spriteAsset) + { + Shader shader = Shader.Find("TextMeshPro/Sprite"); + Material material = new Material(shader); + material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet); + + spriteAsset.material = material; + material.hideFlags = HideFlags.HideInHierarchy; + AssetDatabase.AddObjectToAsset(material, spriteAsset); + } + + /// + /// Limits the minimum size of the editor window. + /// + void SetEditorWindowSize() + { + EditorWindow editorWindow = this; + + Vector2 currentWindowSize = editorWindow.minSize; + + editorWindow.minSize = new Vector2(Mathf.Max(230, currentWindowSize.x), Mathf.Max(300, currentWindowSize.y)); + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta new file mode 100644 index 0000000..d60763a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetImporter.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: f1ea944dcf8849ebab391e461b99ccb7 +timeCreated: 1480023525 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetMenu.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetMenu.cs new file mode 100644 index 0000000..344150b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetMenu.cs @@ -0,0 +1,389 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEngine.U2D; +using UnityEditor; +using System.Linq; +using System.IO; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro.EditorUtilities +{ + public static class TMP_SpriteAssetMenu + { + // Add a Context Menu to the Sprite Asset Editor Panel to Create and Add a Default Material. + [MenuItem("CONTEXT/TMP_SpriteAsset/Add Default Material", false, 2200)] + static void CopyTexture(MenuCommand command) + { + TMP_SpriteAsset spriteAsset = (TMP_SpriteAsset)command.context; + + // Make sure the sprite asset already contains a default material + if (spriteAsset != null && spriteAsset.material == null) + { + // Add new default material for sprite asset. + AddDefaultMaterial(spriteAsset); + } + } + + // Add a Context Menu to the Sprite Asset Editor Panel to update existing sprite assets. + [MenuItem("CONTEXT/TMP_SpriteAsset/Update Sprite Asset", false, 2100)] + static void UpdateSpriteAsset(MenuCommand command) + { + TMP_SpriteAsset spriteAsset = (TMP_SpriteAsset)command.context; + + if (spriteAsset == null) + return; + + UpdateSpriteAsset(spriteAsset); + } + + internal static void UpdateSpriteAsset(TMP_SpriteAsset spriteAsset) + { + // Get a list of all the sprites contained in the texture referenced by the sprite asset. + // This only works if the texture is set to sprite mode. + string filePath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet); + + if (string.IsNullOrEmpty(filePath)) + return; + + // Get all the sprites defined in the sprite sheet texture referenced by this sprite asset. + Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).ToArray(); + + // Return if sprite sheet texture does not have any sprites defined in it. + if (sprites.Length == 0) + { + Debug.Log("Sprite Asset [" + spriteAsset.name + "]'s atlas texture does not appear to have any sprites defined in it. Use the Unity Sprite Editor to define sprites for this texture.", spriteAsset.spriteSheet); + return; + } + + List spriteGlyphTable = spriteAsset.spriteGlyphTable; + + // Find available glpyh indexes + uint[] existingGlyphIndexes = spriteGlyphTable.Select(x => x.index).ToArray(); + List availableGlyphIndexes = new List(); + + uint lastGlyphIndex = existingGlyphIndexes.Length > 0 ? existingGlyphIndexes.Last() : 0; + int elementIndex = 0; + for (uint i = 0; i < lastGlyphIndex; i++) + { + uint existingGlyphIndex = existingGlyphIndexes[elementIndex]; + + if (i == existingGlyphIndex) + elementIndex += 1; + else + availableGlyphIndexes.Add(i); + } + + // Iterate over sprites contained in the updated sprite sheet to identify new and / or modified sprites. + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + + // Check if current sprites is already contained in the sprite glyph table of the sprite asset. + TMP_SpriteGlyph spriteGlyph = spriteGlyphTable.FirstOrDefault(x => x.sprite == sprite); + + if (spriteGlyph != null) + { + // update existing sprite glyph + if (spriteGlyph.glyphRect.x != sprite.rect.x || spriteGlyph.glyphRect.y != sprite.rect.y || spriteGlyph.glyphRect.width != sprite.rect.width || spriteGlyph.glyphRect.height != sprite.rect.height) + spriteGlyph.glyphRect = new GlyphRect(sprite.rect); + } + else + { + TMP_SpriteCharacter spriteCharacter; + + // Check if this sprite potentially exists under the same name in the sprite character table. + if (spriteAsset.spriteCharacterTable != null && spriteAsset.spriteCharacterTable.Count > 0) + { + spriteCharacter = spriteAsset.spriteCharacterTable.FirstOrDefault(x => x.name == sprite.name); + spriteGlyph = spriteCharacter != null ? spriteGlyphTable[(int)spriteCharacter.glyphIndex] : null; + + if (spriteGlyph != null) + { + // Update sprite reference and data + spriteGlyph.sprite = sprite; + + if (spriteGlyph.glyphRect.x != sprite.rect.x || spriteGlyph.glyphRect.y != sprite.rect.y || spriteGlyph.glyphRect.width != sprite.rect.width || spriteGlyph.glyphRect.height != sprite.rect.height) + spriteGlyph.glyphRect = new GlyphRect(sprite.rect); + } + } + + // Add new Sprite Glyph to the table + spriteGlyph = new TMP_SpriteGlyph(); + + // Get available glyph index + if (availableGlyphIndexes.Count > 0) + { + spriteGlyph.index = availableGlyphIndexes[0]; + availableGlyphIndexes.RemoveAt(0); + } + else + spriteGlyph.index = (uint)spriteGlyphTable.Count; + + spriteGlyph.metrics = new GlyphMetrics(sprite.rect.width, sprite.rect.height, -sprite.pivot.x, sprite.rect.height - sprite.pivot.y, sprite.rect.width); + spriteGlyph.glyphRect = new GlyphRect(sprite.rect); + spriteGlyph.scale = 1.0f; + spriteGlyph.sprite = sprite; + + spriteGlyphTable.Add(spriteGlyph); + + spriteCharacter = new TMP_SpriteCharacter(0xFFFE, spriteGlyph); + spriteCharacter.name = sprite.name; + spriteCharacter.scale = 1.0f; + + spriteAsset.spriteCharacterTable.Add(spriteCharacter); + } + } + + // Update Sprite Character Table to replace unicode 0x0 by 0xFFFE + for (int i = 0; i < spriteAsset.spriteCharacterTable.Count; i++) + { + TMP_SpriteCharacter spriteCharacter = spriteAsset.spriteCharacterTable[i]; + if (spriteCharacter.unicode == 0) + spriteCharacter.unicode = 0xFFFE; + } + + // Sort glyph table by glyph index + spriteAsset.SortGlyphTable(); + spriteAsset.UpdateLookupTables(); + TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, spriteAsset); + + } + + + [MenuItem("Assets/Create/TextMeshPro/Sprite Asset", false, 110)] + public static void CreateSpriteAsset() + { + Object target = Selection.activeObject; + + if (target == null || target.GetType() != typeof(Texture2D)) // && target.GetType() != typeof(SpriteAtlas))) + { + Debug.LogWarning("A texture must first be selected in order to create a TextMesh Pro Sprite Asset."); + return; + } + + // Get the path to the selected asset. + string filePathWithName = AssetDatabase.GetAssetPath(target); + string fileNameWithExtension = Path.GetFileName(filePathWithName); + string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(filePathWithName); + string filePath = filePathWithName.Replace(fileNameWithExtension, ""); + + + // Create new Sprite Asset + TMP_SpriteAsset spriteAsset = ScriptableObject.CreateInstance(); + AssetDatabase.CreateAsset(spriteAsset, filePath + fileNameWithoutExtension + ".asset"); + + spriteAsset.version = "1.1.0"; + + // Compute the hash code for the sprite asset. + spriteAsset.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteAsset.name); + + List spriteGlyphTable = new List(); + List spriteCharacterTable = new List(); + + if (target.GetType() == typeof(Texture2D)) + { + Texture2D sourceTex = target as Texture2D; + + // Assign new Sprite Sheet texture to the Sprite Asset. + spriteAsset.spriteSheet = sourceTex; + + PopulateSpriteTables(sourceTex, ref spriteCharacterTable, ref spriteGlyphTable); + + spriteAsset.spriteCharacterTable = spriteCharacterTable; + spriteAsset.spriteGlyphTable = spriteGlyphTable; + + // Add new default material for sprite asset. + AddDefaultMaterial(spriteAsset); + } + else if (target.GetType() == typeof(SpriteAtlas)) + { + //SpriteAtlas spriteAtlas = target as SpriteAtlas; + + //PopulateSpriteTables(spriteAtlas, ref spriteCharacterTable, ref spriteGlyphTable); + + //spriteAsset.spriteCharacterTable = spriteCharacterTable; + //spriteAsset.spriteGlyphTable = spriteGlyphTable; + + //spriteAsset.spriteSheet = spriteGlyphTable[0].sprite.texture; + + //// Add new default material for sprite asset. + //AddDefaultMaterial(spriteAsset); + } + + // Update Lookup tables. + spriteAsset.UpdateLookupTables(); + + // Get the Sprites contained in the Sprite Sheet + EditorUtility.SetDirty(spriteAsset); + + //spriteAsset.sprites = sprites; + + // Set source texture back to Not Readable. + //texImporter.isReadable = false; + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(spriteAsset)); // Re-import font asset to get the new updated version. + + //AssetDatabase.Refresh(); + } + + + private static void PopulateSpriteTables(Texture source, ref List spriteCharacterTable, ref List spriteGlyphTable) + { + //Debug.Log("Creating new Sprite Asset."); + + string filePath = AssetDatabase.GetAssetPath(source); + + // Get all the Sprites sorted by Index + Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray(); + + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + + TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph(); + spriteGlyph.index = (uint)i; + spriteGlyph.metrics = new GlyphMetrics(sprite.rect.width, sprite.rect.height, -sprite.pivot.x, sprite.rect.height - sprite.pivot.y, sprite.rect.width); + spriteGlyph.glyphRect = new GlyphRect(sprite.rect); + spriteGlyph.scale = 1.0f; + spriteGlyph.sprite = sprite; + + spriteGlyphTable.Add(spriteGlyph); + + TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter(0xFFFE, spriteGlyph); + spriteCharacter.name = sprite.name; + spriteCharacter.scale = 1.0f; + + spriteCharacterTable.Add(spriteCharacter); + } + } + + + private static void PopulateSpriteTables(SpriteAtlas spriteAtlas, ref List spriteCharacterTable, ref List spriteGlyphTable) + { + // Get number of sprites contained in the sprite atlas. + int spriteCount = spriteAtlas.spriteCount; + Sprite[] sprites = new Sprite[spriteCount]; + + // Get all the sprites + spriteAtlas.GetSprites(sprites); + + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + + TMP_SpriteGlyph spriteGlyph = new TMP_SpriteGlyph(); + spriteGlyph.index = (uint)i; + spriteGlyph.metrics = new GlyphMetrics(sprite.textureRect.width, sprite.textureRect.height, -sprite.pivot.x, sprite.textureRect.height - sprite.pivot.y, sprite.textureRect.width); + spriteGlyph.glyphRect = new GlyphRect(sprite.textureRect); + spriteGlyph.scale = 1.0f; + spriteGlyph.sprite = sprite; + + spriteGlyphTable.Add(spriteGlyph); + + TMP_SpriteCharacter spriteCharacter = new TMP_SpriteCharacter(0xFFFE, spriteGlyph); + spriteCharacter.name = sprite.name; + spriteCharacter.scale = 1.0f; + + spriteCharacterTable.Add(spriteCharacter); + } + } + + + /// + /// Create and add new default material to sprite asset. + /// + /// + private static void AddDefaultMaterial(TMP_SpriteAsset spriteAsset) + { + Shader shader = Shader.Find("TextMeshPro/Sprite"); + Material material = new Material(shader); + material.SetTexture(ShaderUtilities.ID_MainTex, spriteAsset.spriteSheet); + + spriteAsset.material = material; + material.hideFlags = HideFlags.HideInHierarchy; + AssetDatabase.AddObjectToAsset(material, spriteAsset); + } + + + // Update existing SpriteInfo + private static List UpdateSpriteInfo(TMP_SpriteAsset spriteAsset) + { + //Debug.Log("Updating Sprite Asset."); + + string filePath = AssetDatabase.GetAssetPath(spriteAsset.spriteSheet); + + // Get all the Sprites sorted Left to Right / Top to Bottom + Sprite[] sprites = AssetDatabase.LoadAllAssetsAtPath(filePath).Select(x => x as Sprite).Where(x => x != null).OrderByDescending(x => x.rect.y).ThenBy(x => x.rect.x).ToArray(); + + for (int i = 0; i < sprites.Length; i++) + { + Sprite sprite = sprites[i]; + + // Check if the sprite is already contained in the SpriteInfoList + int index = -1; + if (spriteAsset.spriteInfoList.Count > i && spriteAsset.spriteInfoList[i].sprite != null) + index = spriteAsset.spriteInfoList.FindIndex(item => item.sprite.GetInstanceID() == sprite.GetInstanceID()); + + // Use existing SpriteInfo if it already exists + TMP_Sprite spriteInfo = index == -1 ? new TMP_Sprite() : spriteAsset.spriteInfoList[index]; + + Rect spriteRect = sprite.rect; + spriteInfo.x = spriteRect.x; + spriteInfo.y = spriteRect.y; + spriteInfo.width = spriteRect.width; + spriteInfo.height = spriteRect.height; + + // Get Sprite Pivot + Vector2 pivot = new Vector2(0 - (sprite.bounds.min.x) / (sprite.bounds.extents.x * 2), 0 - (sprite.bounds.min.y) / (sprite.bounds.extents.y * 2)); + + // The position of the pivot influences the Offset position. + spriteInfo.pivot = new Vector2(0 - pivot.x * spriteRect.width, spriteRect.height - pivot.y * spriteRect.height); + + if (index == -1) + { + // Find the next available index for this Sprite + int[] ids = spriteAsset.spriteInfoList.Select(item => item.id).ToArray(); + + int id = 0; + for (int j = 0; j < ids.Length; j++ ) + { + if (ids[0] != 0) break; + + if (j > 0 && (ids[j] - ids[j - 1]) > 1) + { + id = ids[j - 1] + 1; + break; + } + + id = j + 1; + } + + spriteInfo.sprite = sprite; + spriteInfo.name = sprite.name; + spriteInfo.hashCode = TMP_TextUtilities.GetSimpleHashCode(spriteInfo.name); + spriteInfo.id = id; + spriteInfo.xAdvance = spriteRect.width; + spriteInfo.scale = 1.0f; + + spriteInfo.xOffset = spriteInfo.pivot.x; + spriteInfo.yOffset = spriteInfo.pivot.y; + + spriteAsset.spriteInfoList.Add(spriteInfo); + + // Sort the Sprites by ID + spriteAsset.spriteInfoList = spriteAsset.spriteInfoList.OrderBy(s => s.id).ToList(); + } + else + { + spriteAsset.spriteInfoList[index] = spriteInfo; + } + } + + return spriteAsset.spriteInfoList; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta new file mode 100644 index 0000000..850ab1f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteAssetMenu.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 1048a87135154606808bf2030da32d18 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs new file mode 100644 index 0000000..bc50161 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs @@ -0,0 +1,227 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_SpriteCharacter))] + public class TMP_SpriteCharacterPropertyDrawer : PropertyDrawer + { + int m_GlyphSelectedForEditing = -1; + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_SpriteName = property.FindPropertyRelative("m_Name"); + SerializedProperty prop_SpriteNameHashCode = property.FindPropertyRelative("m_HashCode"); + SerializedProperty prop_SpriteUnicode = property.FindPropertyRelative("m_Unicode"); + SerializedProperty prop_SpriteGlyphIndex = property.FindPropertyRelative("m_GlyphIndex"); + SerializedProperty prop_SpriteScale = property.FindPropertyRelative("m_Scale"); + + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + EditorGUIUtility.labelWidth = 40f; + EditorGUIUtility.fieldWidth = 50; + + Rect rect = new Rect(position.x + 60, position.y, position.width, 49); + + // Display non-editable fields + if (GUI.enabled == false) + { + // Sprite Character Index + int spriteCharacterIndex; + int.TryParse(property.displayName.Split(' ')[1], out spriteCharacterIndex); + EditorGUI.LabelField(new Rect(rect.x, rect.y, 75f, 18), new GUIContent("Index: " + spriteCharacterIndex + ""), style); + + EditorGUI.LabelField(new Rect(rect.x + 75f, rect.y, 120f, 18), new GUIContent("Unicode: 0x" + prop_SpriteUnicode.intValue.ToString("X") + ""), style); + EditorGUI.LabelField(new Rect(rect.x + 195f, rect.y, rect.width - 255, 18), new GUIContent("Name: " + prop_SpriteName.stringValue + ""), style); + + EditorGUI.LabelField(new Rect(rect.x, rect.y + 18, 120, 18), new GUIContent("Glyph ID: " + prop_SpriteGlyphIndex.intValue + ""), style); + + // Draw Sprite Glyph (if exists) + DrawSpriteGlyph(position, property); + + EditorGUI.LabelField(new Rect(rect.x, rect.y + 36, 80, 18), new GUIContent("Scale: " + prop_SpriteScale.floatValue + ""), style); + } + else // Display editable fields + { + // Get a reference to the underlying Sprite Asset + TMP_SpriteAsset spriteAsset = property.serializedObject.targetObject as TMP_SpriteAsset; + + // Sprite Character Index + int spriteCharacterIndex; + int.TryParse(property.displayName.Split(' ')[1], out spriteCharacterIndex); + + EditorGUI.LabelField(new Rect(rect.x, rect.y, 75f, 18), new GUIContent("Index: " + spriteCharacterIndex + ""), style); + + EditorGUIUtility.labelWidth = 55f; + GUI.SetNextControlName("Unicode Input"); + EditorGUI.BeginChangeCheck(); + string unicode = EditorGUI.DelayedTextField(new Rect(rect.x + 75f, rect.y, 120, 18), "Unicode:", prop_SpriteUnicode.intValue.ToString("X")); + + if (GUI.GetNameOfFocusedControl() == "Unicode Input") + { + //Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F')) + { + Event.current.character = '\0'; + } + } + + if (EditorGUI.EndChangeCheck()) + { + // Update Unicode value + prop_SpriteUnicode.intValue = TMP_TextUtilities.StringHexToInt(unicode); + spriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + EditorGUIUtility.labelWidth = 41f; + EditorGUI.BeginChangeCheck(); + EditorGUI.DelayedTextField(new Rect(rect.x + 195f, rect.y, rect.width - 255, 18), prop_SpriteName, new GUIContent("Name:")); + if (EditorGUI.EndChangeCheck()) + { + // Recompute hashCode for new name + prop_SpriteNameHashCode.intValue = TMP_TextUtilities.GetSimpleHashCode(prop_SpriteName.stringValue); + spriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + EditorGUIUtility.labelWidth = 59f; + EditorGUI.BeginChangeCheck(); + EditorGUI.DelayedIntField(new Rect(rect.x, rect.y + 18, 100, 18), prop_SpriteGlyphIndex, new GUIContent("Glyph ID:")); + if (EditorGUI.EndChangeCheck()) + { + spriteAsset.m_IsSpriteAssetLookupTablesDirty = true; + } + + // Draw Sprite Glyph (if exists) + DrawSpriteGlyph(position, property); + + int glyphIndex = prop_SpriteGlyphIndex.intValue; + + // Reset glyph selection if new character has been selected. + if (GUI.enabled && m_GlyphSelectedForEditing != glyphIndex) + m_GlyphSelectedForEditing = -1; + + // Display button to edit the glyph data. + if (GUI.Button(new Rect(rect.x + 120, rect.y + 18, 75, 18), new GUIContent("Edit Glyph"))) + { + if (m_GlyphSelectedForEditing == -1) + m_GlyphSelectedForEditing = glyphIndex; + else + m_GlyphSelectedForEditing = -1; + + // Button clicks should not result in potential change. + GUI.changed = false; + } + + // Show the glyph property drawer if selected + if (glyphIndex == m_GlyphSelectedForEditing && GUI.enabled) + { + if (spriteAsset != null) + { + // Lookup glyph and draw glyph (if available) + int elementIndex = spriteAsset.spriteGlyphTable.FindIndex(item => item.index == glyphIndex); + + if (elementIndex != -1) + { + // Get a reference to the Sprite Glyph Table + SerializedProperty prop_SpriteGlyphTable = property.serializedObject.FindProperty("m_SpriteGlyphTable"); + + SerializedProperty prop_SpriteGlyph = prop_SpriteGlyphTable.GetArrayElementAtIndex(elementIndex); + SerializedProperty prop_GlyphMetrics = prop_SpriteGlyph.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = prop_SpriteGlyph.FindPropertyRelative("m_GlyphRect"); + + Rect newRect = EditorGUILayout.GetControlRect(false, 115); + EditorGUI.DrawRect(new Rect(newRect.x + 62, newRect.y - 20, newRect.width - 62, newRect.height - 5), new Color(0.1f, 0.1f, 0.1f, 0.45f)); + EditorGUI.DrawRect(new Rect(newRect.x + 63, newRect.y - 19, newRect.width - 64, newRect.height - 7), new Color(0.3f, 0.3f, 0.3f, 0.8f)); + + // Display GlyphRect + newRect.x += 65; + newRect.y -= 18; + newRect.width += 5; + EditorGUI.PropertyField(newRect, prop_GlyphRect); + + // Display GlyphMetrics + newRect.y += 45; + EditorGUI.PropertyField(newRect, prop_GlyphMetrics); + + rect.y += 120; + } + } + } + + EditorGUIUtility.labelWidth = 39f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 36, 80, 18), prop_SpriteScale, new GUIContent("Scale:")); + } + } + + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 58; + } + + + void DrawSpriteGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the sprite glyph table + TMP_SpriteAsset spriteAsset = property.serializedObject.targetObject as TMP_SpriteAsset; + + if (spriteAsset == null) + return; + + int glyphIndex = property.FindPropertyRelative("m_GlyphIndex").intValue; + + // Lookup glyph and draw glyph (if available) + int elementIndex = spriteAsset.spriteGlyphTable.FindIndex(item => item.index == glyphIndex); + + if (elementIndex != -1) + { + // Get a reference to the Sprite Glyph Table + SerializedProperty prop_SpriteGlyphTable = property.serializedObject.FindProperty("m_SpriteGlyphTable"); + SerializedProperty prop_SpriteGlyph = prop_SpriteGlyphTable.GetArrayElementAtIndex(elementIndex); + SerializedProperty prop_GlyphRect = prop_SpriteGlyph.FindPropertyRelative("m_GlyphRect"); + + // Get a reference to the sprite texture + Texture tex = spriteAsset.spriteSheet; + + // Return if we don't have a texture assigned to the sprite asset. + if (tex == null) + { + Debug.LogWarning("Please assign a valid Sprite Atlas texture to the [" + spriteAsset.name + "] Sprite Asset.", spriteAsset); + return; + } + + Vector2 spriteTexPosition = new Vector2(position.x, position.y); + Vector2 spriteSize = new Vector2(48, 48); + Vector2 alignmentOffset = new Vector2((58 - spriteSize.x) / 2, (58 - spriteSize.y) / 2); + + float x = prop_GlyphRect.FindPropertyRelative("m_X").intValue; + float y = prop_GlyphRect.FindPropertyRelative("m_Y").intValue; + float spriteWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue; + float spriteHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue; + + if (spriteWidth >= spriteHeight) + { + spriteSize.y = spriteHeight * spriteSize.x / spriteWidth; + spriteTexPosition.y += (spriteSize.x - spriteSize.y) / 2; + } + else + { + spriteSize.x = spriteWidth * spriteSize.y / spriteHeight; + spriteTexPosition.x += (spriteSize.y - spriteSize.x) / 2; + } + + // Compute the normalized texture coordinates + Rect texCoords = new Rect(x / tex.width, y / tex.height, spriteWidth / tex.width, spriteHeight / tex.height); + GUI.DrawTextureWithTexCoords(new Rect(spriteTexPosition.x + alignmentOffset.x, spriteTexPosition.y + alignmentOffset.y, spriteSize.x, spriteSize.y), tex, texCoords, true); + } + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta new file mode 100644 index 0000000..0733749 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteCharacterPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 37cff9f5a86ae494c8cb04423580480d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs new file mode 100644 index 0000000..cf79bc8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs @@ -0,0 +1,94 @@ +using UnityEngine; +using UnityEngine.TextCore; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_SpriteGlyph))] + public class TMP_SpriteGlyphPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty prop_GlyphIndex = property.FindPropertyRelative("m_Index"); + SerializedProperty prop_GlyphMetrics = property.FindPropertyRelative("m_Metrics"); + SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect"); + SerializedProperty prop_Scale = property.FindPropertyRelative("m_Scale"); + SerializedProperty prop_AtlasIndex = property.FindPropertyRelative("m_AtlasIndex"); + + GUIStyle style = new GUIStyle(EditorStyles.label); + style.richText = true; + + Rect rect = new Rect(position.x + 70, position.y, position.width, 49); + + // Draw GlyphRect + EditorGUI.PropertyField(rect, prop_GlyphRect); + + // Draw GlyphMetrics + rect.y += 45; + EditorGUI.PropertyField(rect, prop_GlyphMetrics); + + EditorGUIUtility.labelWidth = 40f; + EditorGUI.PropertyField(new Rect(rect.x, rect.y + 65, 75, 18), prop_Scale, new GUIContent("Scale:")); + + EditorGUIUtility.labelWidth = 74f; + EditorGUI.PropertyField(new Rect(rect.x + 85, rect.y + 65, 95, 18), prop_AtlasIndex, new GUIContent("Atlas Index:")); + + DrawGlyph(position, property); + + int spriteCharacterIndex; + int.TryParse(property.displayName.Split(' ')[1], out spriteCharacterIndex); + + EditorGUI.LabelField(new Rect(position.x, position.y + 5, 64f, 18f), new GUIContent("#" + spriteCharacterIndex), style); + + float labelWidthID = GUI.skin.label.CalcSize(new GUIContent("ID: " + prop_GlyphIndex.intValue)).x; + EditorGUI.LabelField(new Rect(position.x + (64 - labelWidthID) / 2, position.y + 110, 64f, 18f), new GUIContent("ID: " + prop_GlyphIndex.intValue + ""), style); + } + + void DrawGlyph(Rect position, SerializedProperty property) + { + // Get a reference to the sprite texture + Texture tex = (property.serializedObject.targetObject as TMP_SpriteAsset).spriteSheet; + + // Return if we don't have a texture assigned to the sprite asset. + if (tex == null) + { + Debug.LogWarning("Please assign a valid Sprite Atlas texture to the [" + property.serializedObject.targetObject.name + "] Sprite Asset.", property.serializedObject.targetObject); + return; + } + + Vector2 spriteTexPosition = new Vector2(position.x, position.y); + Vector2 spriteSize = new Vector2(65, 65); + + SerializedProperty prop_GlyphRect = property.FindPropertyRelative("m_GlyphRect"); + + int spriteImageX = prop_GlyphRect.FindPropertyRelative("m_X").intValue; + int spriteImageY = prop_GlyphRect.FindPropertyRelative("m_Y").intValue; + int spriteImageWidth = prop_GlyphRect.FindPropertyRelative("m_Width").intValue; + int spriteImageHeight = prop_GlyphRect.FindPropertyRelative("m_Height").intValue; + + if (spriteImageWidth >= spriteImageHeight) + { + spriteSize.y = spriteImageHeight * spriteSize.x / spriteImageWidth; + spriteTexPosition.y += (spriteSize.x - spriteSize.y) / 2; + } + else + { + spriteSize.x = spriteImageWidth * spriteSize.y / spriteImageHeight; + spriteTexPosition.x += (spriteSize.y - spriteSize.x) / 2; + } + + // Compute the normalized texture coordinates + Rect texCoords = new Rect((float)spriteImageX / tex.width, (float)spriteImageY / tex.height, (float)spriteImageWidth / tex.width, (float)spriteImageHeight / tex.height); + GUI.DrawTextureWithTexCoords(new Rect(spriteTexPosition.x + 5, spriteTexPosition.y + 32f, spriteSize.x, spriteSize.y), tex, texCoords, true); + } + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return 130f; + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta new file mode 100644 index 0000000..0414562 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SpriteGlyphPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 056819c66570ca54cadb72330a354050 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleAssetMenu.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleAssetMenu.cs new file mode 100644 index 0000000..480a776 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleAssetMenu.cs @@ -0,0 +1,56 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_StyleAssetMenu + { + + [MenuItem("Assets/Create/TextMeshPro/Style Sheet", false, 120)] + public static void CreateTextMeshProObjectPerform() + { + string filePath; + if (Selection.assetGUIDs.Length == 0) + { + // No asset selected. + filePath = "Assets"; + } + else + { + // Get the path of the selected folder or asset. + filePath = AssetDatabase.GUIDToAssetPath(Selection.assetGUIDs[0]); + + // Get the file extension of the selected asset as it might need to be removed. + string fileExtension = Path.GetExtension(filePath); + if (fileExtension != "") + { + filePath = Path.GetDirectoryName(filePath); + } + } + + + string filePathWithName = AssetDatabase.GenerateUniqueAssetPath(filePath + "/Text StyleSheet.asset"); + + //// Create new Style Sheet Asset. + TMP_StyleSheet styleSheet = ScriptableObject.CreateInstance(); + + // Create Normal default style + TMP_Style style = new TMP_Style("Normal", string.Empty, string.Empty); + styleSheet.styles.Add(style); + + AssetDatabase.CreateAsset(styleSheet, filePathWithName); + + EditorUtility.SetDirty(styleSheet); + + AssetDatabase.SaveAssets(); + + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(styleSheet); + } + } + +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta new file mode 100644 index 0000000..cb44dc2 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleAssetMenu.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 23a562f2cac6401f9f91251c68a1a794 +timeCreated: 1432690168 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleSheetEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleSheetEditor.cs new file mode 100644 index 0000000..2968c29 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleSheetEditor.cs @@ -0,0 +1,318 @@ +using System; +using UnityEngine; +using UnityEditor; + + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TMP_Style))] + public class StyleDrawer : PropertyDrawer + { + public static readonly float height = 95f; + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return height; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + SerializedProperty nameProperty = property.FindPropertyRelative("m_Name"); + SerializedProperty hashCodeProperty = property.FindPropertyRelative("m_HashCode"); + SerializedProperty openingDefinitionProperty = property.FindPropertyRelative("m_OpeningDefinition"); + SerializedProperty closingDefinitionProperty = property.FindPropertyRelative("m_ClosingDefinition"); + SerializedProperty openingDefinitionArray = property.FindPropertyRelative("m_OpeningTagArray"); + SerializedProperty closingDefinitionArray = property.FindPropertyRelative("m_ClosingTagArray"); + + + EditorGUIUtility.labelWidth = 86; + position.height = EditorGUIUtility.singleLineHeight + EditorGUIUtility.standardVerticalSpacing; + float labelHeight = position.height + 2f; + + EditorGUI.BeginChangeCheck(); + Rect rect0 = new Rect(position.x, position.y, (position.width) / 2 + 5, position.height); + EditorGUI.PropertyField(rect0, nameProperty); + if (EditorGUI.EndChangeCheck()) + { + // Recompute HashCode if name has changed. + hashCodeProperty.intValue = TMP_TextUtilities.GetSimpleHashCode(nameProperty.stringValue); + + property.serializedObject.ApplyModifiedProperties(); + + // Dictionary needs to be updated since HashCode has changed. + TMP_StyleSheet styleSheet = property.serializedObject.targetObject as TMP_StyleSheet; + styleSheet.RefreshStyles(); + } + + // HashCode + Rect rect1 = new Rect(rect0.x + rect0.width + 5, position.y, 65, position.height); + GUI.Label(rect1, "HashCode"); + GUI.enabled = false; + rect1.x += 65; + rect1.width = position.width / 2 - 75; + EditorGUI.PropertyField(rect1, hashCodeProperty, GUIContent.none); + + GUI.enabled = true; + + // Text Tags + EditorGUI.BeginChangeCheck(); + + // Opening Tags + position.y += labelHeight; + GUI.Label(position, "Opening Tags"); + Rect textRect1 = new Rect(110, position.y, position.width - 86, 35); + openingDefinitionProperty.stringValue = EditorGUI.TextArea(textRect1, openingDefinitionProperty.stringValue); + if (EditorGUI.EndChangeCheck()) + { + // If any properties have changed, we need to update the Opening and Closing Arrays. + int size = openingDefinitionProperty.stringValue.Length; + + // Adjust array size to match new string length. + if (openingDefinitionArray.arraySize != size) openingDefinitionArray.arraySize = size; + + for (int i = 0; i < size; i++) + { + SerializedProperty element = openingDefinitionArray.GetArrayElementAtIndex(i); + element.intValue = openingDefinitionProperty.stringValue[i]; + } + } + + EditorGUI.BeginChangeCheck(); + + // Closing Tags + position.y += 38; + GUI.Label(position, "Closing Tags"); + Rect textRect2 = new Rect(110, position.y, position.width - 86, 35); + closingDefinitionProperty.stringValue = EditorGUI.TextArea(textRect2, closingDefinitionProperty.stringValue); + + if (EditorGUI.EndChangeCheck()) + { + // If any properties have changed, we need to update the Opening and Closing Arrays. + int size = closingDefinitionProperty.stringValue.Length; + + // Adjust array size to match new string length. + if (closingDefinitionArray.arraySize != size) closingDefinitionArray.arraySize = size; + + for (int i = 0; i < size; i++) + { + SerializedProperty element = closingDefinitionArray.GetArrayElementAtIndex(i); + element.intValue = closingDefinitionProperty.stringValue[i]; + } + } + + } + } + + + + [CustomEditor(typeof(TMP_StyleSheet)), CanEditMultipleObjects] + public class TMP_StyleEditor : Editor + { + + TMP_StyleSheet m_StyleSheet; + SerializedProperty m_StyleListProp; + + int m_SelectedElement = -1; + int m_Page; + + bool m_IsStyleSheetDirty; + + + void OnEnable() + { + m_StyleSheet = target as TMP_StyleSheet; + m_StyleListProp = serializedObject.FindProperty("m_StyleList"); + } + + + public override void OnInspectorGUI() + { + Event currentEvent = Event.current; + + serializedObject.Update(); + + m_IsStyleSheetDirty = false; + int elementCount = m_StyleListProp.arraySize; + int itemsPerPage = (Screen.height - 100) / 110; + + if (elementCount > 0) + { + // Display each Style entry using the StyleDrawer PropertyDrawer. + for (int i = itemsPerPage * m_Page; i < elementCount && i < itemsPerPage * (m_Page + 1); i++) + { + // Define the start of the selection region of the element. + Rect elementStartRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + SerializedProperty styleProperty = m_StyleListProp.GetArrayElementAtIndex(i); + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(styleProperty); + EditorGUILayout.EndVertical(); + if (EditorGUI.EndChangeCheck()) + { + // + } + + // Define the end of the selection region of the element. + Rect elementEndRegion = GUILayoutUtility.GetRect(0f, 0f, GUILayout.ExpandWidth(true)); + + // Check for Item selection + Rect selectionArea = new Rect(elementStartRegion.x, elementStartRegion.y, elementEndRegion.width, elementEndRegion.y - elementStartRegion.y); + if (DoSelectionCheck(selectionArea)) + { + if (m_SelectedElement == i) + { + m_SelectedElement = -1; + } + else + { + m_SelectedElement = i; + GUIUtility.keyboardControl = 0; + } + } + + // Handle Selection Highlighting + if (m_SelectedElement == i) + TMP_EditorUtility.DrawBox(selectionArea, 2f, new Color32(40, 192, 255, 255)); + } + } + + // STYLE LIST MANAGEMENT + Rect rect = EditorGUILayout.GetControlRect(false, 20); + rect.width /= 6; + + // Move Style up. + bool guiEnabled = GUI.enabled; + if (m_SelectedElement == -1 || m_SelectedElement == 0) { GUI.enabled = false; } + if (GUI.Button(rect, "Up")) + { + SwapStyleElements(m_SelectedElement, m_SelectedElement - 1); + } + GUI.enabled = guiEnabled; + + // Move Style down. + rect.x += rect.width; + if (m_SelectedElement == elementCount - 1) { GUI.enabled = false; } + if (GUI.Button(rect, "Down")) + { + SwapStyleElements(m_SelectedElement, m_SelectedElement + 1); + } + GUI.enabled = guiEnabled; + + // Add Style + rect.x += rect.width * 3; + if (GUI.Button(rect, "+")) + { + int index = m_SelectedElement == -1 ? 0 : m_SelectedElement; + + if (index > elementCount) + index = elementCount; + + // Copy selected element + m_StyleListProp.InsertArrayElementAtIndex(index); + + // Select newly inserted element + m_SelectedElement = index + 1; + + serializedObject.ApplyModifiedProperties(); + m_StyleSheet.RefreshStyles(); + } + + // Delete style + rect.x += rect.width; + if (m_SelectedElement == -1 || m_SelectedElement >= elementCount) GUI.enabled = false; + if (GUI.Button(rect, "-")) + { + int index = m_SelectedElement == -1 ? 0 : m_SelectedElement; + + m_StyleListProp.DeleteArrayElementAtIndex(index); + + m_SelectedElement = -1; + serializedObject.ApplyModifiedProperties(); + m_StyleSheet.RefreshStyles(); + return; + } + + // Return if we can't display any items. + if (itemsPerPage == 0) return; + + // DISPLAY PAGE CONTROLS + int shiftMultiplier = currentEvent.shift ? 10 : 1; // Page + Shift goes 10 page forward + + Rect pagePos = EditorGUILayout.GetControlRect(false, 20); + pagePos.width /= 3; + + // Previous Page + if (m_Page > 0) GUI.enabled = true; + else GUI.enabled = false; + + if (GUI.Button(pagePos, "Previous")) + m_Page -= 1 * shiftMultiplier; + + // PAGE COUNTER + GUI.enabled = true; + pagePos.x += pagePos.width; + int totalPages = (int)(elementCount / (float)itemsPerPage + 0.999f); + GUI.Label(pagePos, "Page " + (m_Page + 1) + " / " + totalPages, TMP_UIStyleManager.centeredLabel); + + // Next Page + pagePos.x += pagePos.width; + if (itemsPerPage * (m_Page + 1) < elementCount) GUI.enabled = true; + else GUI.enabled = false; + + if (GUI.Button(pagePos, "Next")) + m_Page += 1 * shiftMultiplier; + + // Clamp page range + m_Page = Mathf.Clamp(m_Page, 0, elementCount / itemsPerPage); + + + if (serializedObject.ApplyModifiedProperties()) + { + TMPro_EventManager.ON_TEXT_STYLE_PROPERTY_CHANGED(true); + + if (m_IsStyleSheetDirty) + { + m_IsStyleSheetDirty = false; + m_StyleSheet.RefreshStyles(); + } + } + + // Clear selection if mouse event was not consumed. + GUI.enabled = true; + if (currentEvent.type == EventType.MouseDown && currentEvent.button == 0) + m_SelectedElement = -1; + + } + + + // Check if any of the Style elements were clicked on. + static bool DoSelectionCheck(Rect selectionArea) + { + Event currentEvent = Event.current; + + switch (currentEvent.type) + { + case EventType.MouseDown: + if (selectionArea.Contains(currentEvent.mousePosition) && currentEvent.button == 0) + { + currentEvent.Use(); + return true; + } + break; + } + + return false; + } + + void SwapStyleElements(int selectedIndex, int newIndex) + { + m_StyleListProp.MoveArrayElement(selectedIndex, newIndex); + m_SelectedElement = newIndex; + m_IsStyleSheetDirty = true; + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta new file mode 100644 index 0000000..a3bff26 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_StyleSheetEditor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 34e2c9b9d9e44953933afe37461f44e6 +timeCreated: 1432683777 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs new file mode 100644 index 0000000..679f445 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs @@ -0,0 +1,104 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_SubMeshUI)), CanEditMultipleObjects] + public class TMP_SubMeshUI_Editor : Editor + { + private struct m_foldout + { // Track Inspector foldout panel states, globally. + //public static bool textInput = true; + public static bool fontSettings = true; + //public static bool extraSettings = false; + //public static bool shadowSetting = false; + //public static bool materialEditor = true; + } + + private SerializedProperty fontAsset_prop; + private SerializedProperty spriteAsset_prop; + + //private TMP_SubMeshUI m_SubMeshComponent; + + //private CanvasRenderer m_canvasRenderer; + private Editor m_materialEditor; + private Material m_targetMaterial; + + + public void OnEnable() + { + fontAsset_prop = serializedObject.FindProperty("m_fontAsset"); + spriteAsset_prop = serializedObject.FindProperty("m_spriteAsset"); + + //m_SubMeshComponent = target as TMP_SubMeshUI; + //m_rectTransform = m_SubMeshComponent.rectTransform; + //m_canvasRenderer = m_SubMeshComponent.canvasRenderer; + + + // Create new Material Editor if one does not exists + /* + if (m_canvasRenderer != null && m_canvasRenderer.GetMaterial() != null) + { + m_materialEditor = Editor.CreateEditor(m_canvasRenderer.GetMaterial()); + m_targetMaterial = m_canvasRenderer.GetMaterial(); + } + */ + } + + + public void OnDisable() + { + // Destroy material editor if one exists + /* + if (m_materialEditor != null) + { + //Debug.Log("Destroying Inline Material Editor."); + DestroyImmediate(m_materialEditor); + } + */ + } + + + + public override void OnInspectorGUI() + { + GUI.enabled = false; + EditorGUILayout.PropertyField(fontAsset_prop); + EditorGUILayout.PropertyField(spriteAsset_prop); + GUI.enabled = true; + + EditorGUILayout.Space(); + + // If a Custom Material Editor exists, we use it. + /* + if (m_canvasRenderer != null && m_canvasRenderer.GetMaterial() != null) + { + Material mat = m_canvasRenderer.GetMaterial(); + + //Debug.Log(mat + " " + m_targetMaterial); + + if (mat != m_targetMaterial) + { + // Destroy previous Material Instance + //Debug.Log("New Material has been assigned."); + m_targetMaterial = mat; + DestroyImmediate(m_materialEditor); + } + + + if (m_materialEditor == null) + { + m_materialEditor = Editor.CreateEditor(mat); + } + + m_materialEditor.DrawHeader(); + + + m_materialEditor.OnInspectorGUI(); + } + */ + } + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta new file mode 100644 index 0000000..b82410e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMeshUI_Editor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6b01141ed8f74d198965c86f25eb7040 +timeCreated: 1452757501 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMesh_Editor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMesh_Editor.cs new file mode 100644 index 0000000..f668af9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMesh_Editor.cs @@ -0,0 +1,71 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TMP_SubMesh)), CanEditMultipleObjects] + public class TMP_SubMesh_Editor : Editor + { + private struct m_foldout + { // Track Inspector foldout panel states, globally. + //public static bool textInput = true; + public static bool fontSettings = true; + //public static bool extraSettings = false; + //public static bool shadowSetting = false; + //public static bool materialEditor = true; + } + + private SerializedProperty fontAsset_prop; + private SerializedProperty spriteAsset_prop; + + private TMP_SubMesh m_SubMeshComponent; + private Renderer m_Renderer; + + private string[] m_SortingLayerNames; + + public void OnEnable() + { + fontAsset_prop = serializedObject.FindProperty("m_fontAsset"); + spriteAsset_prop = serializedObject.FindProperty("m_spriteAsset"); + + m_SubMeshComponent = target as TMP_SubMesh; + + m_Renderer = m_SubMeshComponent.renderer; + + m_SortingLayerNames = SortingLayerHelper.sortingLayerNames; + } + + + public override void OnInspectorGUI() + { + EditorGUI.indentLevel = 0; + + GUI.enabled = false; + EditorGUILayout.PropertyField(fontAsset_prop); + EditorGUILayout.PropertyField(spriteAsset_prop); + GUI.enabled = true; + + EditorGUI.BeginChangeCheck(); + + // Look up the layer name using the current layer ID + string oldName = SortingLayer.IDToName(m_Renderer.sortingLayerID); + + // Use the name to look up our array index into the names list + int oldLayerIndex = System.Array.IndexOf(m_SortingLayerNames, oldName); + + // Show the pop-up for the names + int newLayerIndex = EditorGUILayout.Popup("Sorting Layer", oldLayerIndex, m_SortingLayerNames); + + // If the index changes, look up the ID for the new index to store as the new ID + if (newLayerIndex != oldLayerIndex) + m_Renderer.sortingLayerID = SortingLayer.NameToID(m_SortingLayerNames[newLayerIndex]); + + // Expose the manual sorting order + int newSortingLayerOrder = EditorGUILayout.IntField("Order in Layer", m_Renderer.sortingOrder); + if (newSortingLayerOrder != m_Renderer.sortingOrder) + m_Renderer.sortingOrder = newSortingLayerOrder; + + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta new file mode 100644 index 0000000..fd4713b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_SubMesh_Editor.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dd2fe74169b54bf58fca17288513ef38 +timeCreated: 1456189048 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs new file mode 100644 index 0000000..1361de7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs @@ -0,0 +1,273 @@ +using UnityEngine; +using UnityEditor; + +namespace TMPro.EditorUtilities +{ + + [CustomPropertyDrawer(typeof(TextAlignmentOptions))] + public class TMP_TextAlignmentDrawer : PropertyDrawer + { + const int k_AlignmentButtonWidth = 24; + const int k_AlignmentButtonHeight = 20; + const int k_WideViewWidth = 504; + const int k_ControlsSpacing = 6; + const int k_GroupWidth = k_AlignmentButtonWidth * 6; + static readonly int k_TextAlignmentHash = "DoTextAligmentControl".GetHashCode(); + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.currentViewWidth > k_WideViewWidth ? k_AlignmentButtonHeight : k_AlignmentButtonHeight * 2 + 3; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var id = GUIUtility.GetControlID(k_TextAlignmentHash, FocusType.Keyboard, position); + + EditorGUI.BeginProperty(position, label, property); + { + var controlArea = EditorGUI.PrefixLabel(position, id, label); + + var horizontalAligment = new Rect(controlArea.x, controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + var verticalAligment = new Rect(!(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.x : horizontalAligment.xMax + k_ControlsSpacing, !(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.y + k_AlignmentButtonHeight + 3 : controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + + EditorGUI.BeginChangeCheck(); + + var selectedHorizontal = DoHorizontalAligmentControl(horizontalAligment, property); + var selectedVertical = DoVerticalAligmentControl(verticalAligment, property); + + if (EditorGUI.EndChangeCheck()) + { + var value = (0x1 << selectedHorizontal) | (0x100 << selectedVertical); + property.intValue = value; + } + } + EditorGUI.EndProperty(); + } + + static int DoHorizontalAligmentControl(Rect position, SerializedProperty alignment) + { + var selected = TMP_EditorUtility.GetHorizontalAlignmentGridValue(alignment.intValue); + + var values = new bool[6]; + + values[selected] = true; + + if (alignment.hasMultipleDifferentValues) + { + foreach (var obj in alignment.serializedObject.targetObjects) + { + var text = obj as TMP_Text; + if (text != null) + { + values[TMP_EditorUtility.GetHorizontalAlignmentGridValue((int)text.alignment)] = true; + } + } + } + + position.width = k_AlignmentButtonWidth; + + for (var i = 0; i < values.Length; i++) + { + var oldValue = values[i]; + var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentA[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid)); + if (newValue != oldValue) + { + selected = i; + } + position.x += position.width; + } + + return selected; + } + + static int DoVerticalAligmentControl(Rect position, SerializedProperty alignment) + { + var selected = TMP_EditorUtility.GetVerticalAlignmentGridValue(alignment.intValue); + + var values = new bool[6]; + + values[selected] = true; + + if (alignment.hasMultipleDifferentValues) + { + foreach (var obj in alignment.serializedObject.targetObjects) + { + var text = obj as TMP_Text; + if (text != null) + { + values[TMP_EditorUtility.GetVerticalAlignmentGridValue((int)text.alignment)] = true; + } + } + } + + position.width = k_AlignmentButtonWidth; + + for (var i = 0; i < values.Length; i++) + { + var oldValue = values[i]; + var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentB[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid)); + if (newValue != oldValue) + { + selected = i; + } + position.x += position.width; + } + + return selected; + } + } + + [CustomPropertyDrawer(typeof(HorizontalAlignmentOptions))] + public class TMP_HorizontalAlignmentDrawer : PropertyDrawer + { + const int k_AlignmentButtonWidth = 24; + const int k_AlignmentButtonHeight = 20; + const int k_WideViewWidth = 504; + const int k_ControlsSpacing = 6; + const int k_GroupWidth = k_AlignmentButtonWidth * 6; + static readonly int k_TextAlignmentHash = "DoTextAligmentControl".GetHashCode(); + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.currentViewWidth > k_WideViewWidth ? k_AlignmentButtonHeight : k_AlignmentButtonHeight * 2 + 3; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var id = GUIUtility.GetControlID(k_TextAlignmentHash, FocusType.Keyboard, position); + + EditorGUI.BeginProperty(position, label, property); + { + var controlArea = EditorGUI.PrefixLabel(position, id, label); + + var horizontalAligment = new Rect(controlArea.x, controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + //var verticalAligment = new Rect(!(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.x : horizontalAligment.xMax + k_ControlsSpacing, !(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.y + k_AlignmentButtonHeight + 3 : controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + + EditorGUI.BeginChangeCheck(); + + var selectedHorizontal = DoHorizontalAligmentControl(horizontalAligment, property); + + if (EditorGUI.EndChangeCheck()) + { + var value = 0x1 << selectedHorizontal; + property.intValue = value; + } + } + EditorGUI.EndProperty(); + } + + static int DoHorizontalAligmentControl(Rect position, SerializedProperty alignment) + { + var selected = TMP_EditorUtility.GetHorizontalAlignmentGridValue(alignment.intValue); + + var values = new bool[6]; + + values[selected] = true; + + if (alignment.hasMultipleDifferentValues) + { + foreach (var obj in alignment.serializedObject.targetObjects) + { + var text = obj as TMP_Text; + if (text != null) + { + values[TMP_EditorUtility.GetHorizontalAlignmentGridValue((int)text.horizontalAlignment)] = true; + } + } + } + + position.width = k_AlignmentButtonWidth; + + for (var i = 0; i < values.Length; i++) + { + var oldValue = values[i]; + var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentA[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid)); + if (newValue != oldValue) + { + selected = i; + } + position.x += position.width; + } + + return selected; + } + } + + + [CustomPropertyDrawer(typeof(VerticalAlignmentOptions))] + public class TMP_VerticalAlignmentDrawer : PropertyDrawer + { + const int k_AlignmentButtonWidth = 24; + const int k_AlignmentButtonHeight = 20; + const int k_WideViewWidth = 504; + const int k_ControlsSpacing = 6; + const int k_GroupWidth = k_AlignmentButtonWidth * 6; + static readonly int k_TextAlignmentHash = "DoTextAligmentControl".GetHashCode(); + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.currentViewWidth > k_WideViewWidth ? k_AlignmentButtonHeight : k_AlignmentButtonHeight * 2 + 3; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var id = GUIUtility.GetControlID(k_TextAlignmentHash, FocusType.Keyboard, position); + + EditorGUI.BeginProperty(position, label, property); + { + var controlArea = EditorGUI.PrefixLabel(position, id, label); + + var horizontalAligment = new Rect(controlArea.x, controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + var verticalAligment = new Rect(!(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.x : horizontalAligment.xMax + k_ControlsSpacing, !(EditorGUIUtility.currentViewWidth > k_WideViewWidth) ? controlArea.y + k_AlignmentButtonHeight + 3 : controlArea.y, k_GroupWidth, k_AlignmentButtonHeight); + + EditorGUI.BeginChangeCheck(); + + //var selectedHorizontal = DoHorizontalAligmentControl(horizontalAligment, property); + var selectedVertical = DoVerticalAligmentControl(verticalAligment, property); + + if (EditorGUI.EndChangeCheck()) + { + var value = 0x100 << selectedVertical; + property.intValue = value; + } + } + EditorGUI.EndProperty(); + } + + static int DoVerticalAligmentControl(Rect position, SerializedProperty alignment) + { + var selected = TMP_EditorUtility.GetVerticalAlignmentGridValue(alignment.intValue); + + var values = new bool[6]; + + values[selected] = true; + + if (alignment.hasMultipleDifferentValues) + { + foreach (var obj in alignment.serializedObject.targetObjects) + { + var text = obj as TMP_Text; + if (text != null) + { + values[TMP_EditorUtility.GetVerticalAlignmentGridValue((int)text.verticalAlignment)] = true; + } + } + } + + position.width = k_AlignmentButtonWidth; + + for (var i = 0; i < values.Length; i++) + { + var oldValue = values[i]; + var newValue = TMP_EditorUtility.EditorToggle(position, oldValue, TMP_UIStyleManager.alignContentB[i], i == 0 ? TMP_UIStyleManager.alignmentButtonLeft : (i == 5 ? TMP_UIStyleManager.alignmentButtonRight : TMP_UIStyleManager.alignmentButtonMid)); + if (newValue != oldValue) + { + selected = i; + } + position.x += position.width; + } + + return selected; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta new file mode 100644 index 0000000..a68a273 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_TextAlignmentDrawer.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: c55a64c7570474f47a94abe39ebfef04 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_UIStyleManager.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_UIStyleManager.cs new file mode 100644 index 0000000..0a94a99 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_UIStyleManager.cs @@ -0,0 +1,134 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public static class TMP_UIStyleManager + { + public static GUIStyle label; + public static GUIStyle textAreaBoxWindow; + public static GUIStyle boldFoldout; + public static GUIStyle panelTitle; + public static GUIStyle sectionHeader; + public static GUIStyle centeredLabel; + public static GUIStyle rightLabel; + public static GUIStyle wrappingTextArea; + + public static GUIStyle alignmentButtonLeft; + public static GUIStyle alignmentButtonMid; + public static GUIStyle alignmentButtonRight; + + // Alignment Button Textures + public static Texture2D alignLeft; + public static Texture2D alignCenter; + public static Texture2D alignRight; + public static Texture2D alignJustified; + public static Texture2D alignFlush; + public static Texture2D alignGeoCenter; + public static Texture2D alignTop; + public static Texture2D alignMiddle; + public static Texture2D alignBottom; + public static Texture2D alignBaseline; + public static Texture2D alignMidline; + public static Texture2D alignCapline; + public static Texture2D sectionHeaderTexture; + + public static GUIContent[] alignContentA; + public static GUIContent[] alignContentB; + + static TMP_UIStyleManager() + { + // Find to location of the TextMesh Pro Asset Folder (as users may have moved it) + var tmproAssetFolderPath = TMP_EditorUtility.packageRelativePath; + + if (EditorGUIUtility.isProSkin) + { + alignLeft = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignLeft.psd", typeof(Texture2D)) as Texture2D; + alignCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenter.psd", typeof(Texture2D)) as Texture2D; + alignRight = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignRight.psd", typeof(Texture2D)) as Texture2D; + alignJustified = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignJustified.psd", typeof(Texture2D)) as Texture2D; + alignFlush = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignFlush.psd", typeof(Texture2D)) as Texture2D; + alignGeoCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenterGeo.psd", typeof(Texture2D)) as Texture2D; + alignTop = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignTop.psd", typeof(Texture2D)) as Texture2D; + alignMiddle = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMiddle.psd", typeof(Texture2D)) as Texture2D; + alignBottom = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBottom.psd", typeof(Texture2D)) as Texture2D; + alignBaseline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBaseLine.psd", typeof(Texture2D)) as Texture2D; + alignMidline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMidLine.psd", typeof(Texture2D)) as Texture2D; + alignCapline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCapLine.psd", typeof(Texture2D)) as Texture2D; + sectionHeaderTexture = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/SectionHeader_Dark.psd", typeof(Texture2D)) as Texture2D; + } + else + { + alignLeft = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignLeft_Light.psd", typeof(Texture2D)) as Texture2D; + alignCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenter_Light.psd", typeof(Texture2D)) as Texture2D; + alignRight = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignRight_Light.psd", typeof(Texture2D)) as Texture2D; + alignJustified = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignJustified_Light.psd", typeof(Texture2D)) as Texture2D; + alignFlush = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignFlush_Light.psd", typeof(Texture2D)) as Texture2D; + alignGeoCenter = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCenterGeo_Light.psd", typeof(Texture2D)) as Texture2D; + alignTop = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignTop_Light.psd", typeof(Texture2D)) as Texture2D; + alignMiddle = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMiddle_Light.psd", typeof(Texture2D)) as Texture2D; + alignBottom = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBottom_Light.psd", typeof(Texture2D)) as Texture2D; + alignBaseline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignBaseLine_Light.psd", typeof(Texture2D)) as Texture2D; + alignMidline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignMidLine_Light.psd", typeof(Texture2D)) as Texture2D; + alignCapline = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/btn_AlignCapLine_Light.psd", typeof(Texture2D)) as Texture2D; + sectionHeaderTexture = AssetDatabase.LoadAssetAtPath(tmproAssetFolderPath + "/Editor Resources/Textures/SectionHeader_Light.psd", typeof(Texture2D)) as Texture2D; + } + + label = new GUIStyle(EditorStyles.label) { richText = true, wordWrap = true, stretchWidth = true }; + textAreaBoxWindow = new GUIStyle(EditorStyles.textArea) { richText = true }; + boldFoldout = new GUIStyle(EditorStyles.foldout) { fontStyle = FontStyle.Bold }; + panelTitle = new GUIStyle(EditorStyles.label) { fontStyle = FontStyle.Bold }; + + sectionHeader = new GUIStyle(EditorStyles.label) { fixedHeight = 22, richText = true, border = new RectOffset(9, 9, 0, 0), overflow = new RectOffset(9, 0, 0, 0), padding = new RectOffset(0, 0, 4, 0) }; + sectionHeader.normal.background = sectionHeaderTexture; + + centeredLabel = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleCenter}; + rightLabel = new GUIStyle(EditorStyles.label) { alignment = TextAnchor.MiddleRight, richText = true }; + + + alignmentButtonLeft = new GUIStyle(EditorStyles.miniButtonLeft); + alignmentButtonLeft.padding.left = 4; + alignmentButtonLeft.padding.right = 4; + alignmentButtonLeft.padding.top = 2; + alignmentButtonLeft.padding.bottom = 2; + + alignmentButtonMid = new GUIStyle(EditorStyles.miniButtonMid); + alignmentButtonMid.padding.left = 4; + alignmentButtonMid.padding.right = 4; + alignmentButtonLeft.padding.top = 2; + alignmentButtonLeft.padding.bottom = 2; + + alignmentButtonRight = new GUIStyle(EditorStyles.miniButtonRight); + alignmentButtonRight.padding.left = 4; + alignmentButtonRight.padding.right = 4; + alignmentButtonLeft.padding.top = 2; + alignmentButtonLeft.padding.bottom = 2; + + wrappingTextArea = new GUIStyle(EditorStyles.textArea); + wrappingTextArea.wordWrap = true; + + alignContentA = new [] + { + new GUIContent(alignLeft, "Left"), + new GUIContent(alignCenter, "Center"), + new GUIContent(alignRight, "Right"), + new GUIContent(alignJustified, "Justified"), + new GUIContent(alignFlush, "Flush"), + new GUIContent(alignGeoCenter, "Geometry Center") + }; + + alignContentB = new [] + { + new GUIContent(alignTop, "Top"), + new GUIContent(alignMiddle, "Middle"), + new GUIContent(alignBottom, "Bottom"), + new GUIContent(alignBaseline, "Baseline"), + new GUIContent(alignMidline, "Midline"), + new GUIContent(alignCapline, "Capline") + }; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_UIStyleManager.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_UIStyleManager.cs.meta new file mode 100644 index 0000000..9c09bfa --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMP_UIStyleManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 30a939dce2fd4073955f2f20e659d506 +timeCreated: 1426454127 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_ContextMenus.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_ContextMenus.cs new file mode 100644 index 0000000..a01760d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_ContextMenus.cs @@ -0,0 +1,367 @@ +using UnityEngine; +using UnityEditor; +using System.IO; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public class TMP_ContextMenus : Editor + { + + private static Texture m_copiedTexture; + + private static Material m_copiedProperties; + private static Material m_copiedAtlasProperties; + + + // Add a Context Menu to the Texture Editor Panel to allow Copy / Paste of Texture. + [MenuItem("CONTEXT/Texture/Copy", false, 2000)] + static void CopyTexture(MenuCommand command) + { + m_copiedTexture = command.context as Texture; + } + + + // Select the currently assigned material or material preset. + [MenuItem("CONTEXT/Material/Select Material", false, 500)] + static void SelectMaterial(MenuCommand command) + { + Material mat = command.context as Material; + + // Select current material + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(mat); + } + + + // Add a Context Menu to allow easy duplication of the Material. + [MenuItem("CONTEXT/Material/Create Material Preset", false)] + static void DuplicateMaterial(MenuCommand command) + { + // Get the type of text object + // If material is not a base material, we get material leaks... + + Material source_Mat = (Material)command.context; + if (!EditorUtility.IsPersistent(source_Mat)) + { + Debug.LogWarning("Material is an instance and cannot be converted into a persistent asset."); + return; + } + + string assetPath = AssetDatabase.GetAssetPath(source_Mat).Split('.')[0]; + + if (assetPath.IndexOf("Assets/", System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogWarning("Material Preset cannot be created from a material that is located outside the project."); + return; + } + + Material duplicate = new Material(source_Mat); + + // Need to manually copy the shader keywords + duplicate.shaderKeywords = source_Mat.shaderKeywords; + + AssetDatabase.CreateAsset(duplicate, AssetDatabase.GenerateUniqueAssetPath(assetPath + ".mat")); + + GameObject[] selectedObjects = Selection.gameObjects; + + // Assign new Material Preset to selected text objects. + for (int i = 0; i < selectedObjects.Length; i++) + { + TMP_Text textObject = selectedObjects[i].GetComponent(); + + if (textObject != null) + { + textObject.fontSharedMaterial = duplicate; + } + else + { + TMP_SubMesh subMeshObject = selectedObjects[i].GetComponent(); + + if (subMeshObject != null) + subMeshObject.sharedMaterial = duplicate; + else + { + TMP_SubMeshUI subMeshUIObject = selectedObjects[i].GetComponent(); + + if (subMeshUIObject != null) + subMeshUIObject.sharedMaterial = duplicate; + } + } + } + + // Ping newly created Material Preset. + EditorUtility.FocusProjectWindow(); + EditorGUIUtility.PingObject(duplicate); + } + + + // COPY MATERIAL PROPERTIES + [MenuItem("CONTEXT/Material/Copy Material Properties", false)] + static void CopyMaterialProperties(MenuCommand command) + { + Material mat = null; + if (command.context.GetType() == typeof(Material)) + mat = (Material)command.context; + else + { + mat = Selection.activeGameObject.GetComponent().GetMaterial(); + } + + m_copiedProperties = new Material(mat); + + m_copiedProperties.shaderKeywords = mat.shaderKeywords; + + m_copiedProperties.hideFlags = HideFlags.DontSave; + } + + + // PASTE MATERIAL + //[MenuItem("CONTEXT/MaterialComponent/Paste Material Properties", false)] + [MenuItem("CONTEXT/Material/Paste Material Properties", false)] + static void PasteMaterialProperties(MenuCommand command) + { + if (m_copiedProperties == null) + { + Debug.LogWarning("No Material Properties to Paste. Use Copy Material Properties first."); + return; + } + + Material mat = null; + if (command.context.GetType() == typeof(Material)) + mat = (Material)command.context; + else + { + mat = Selection.activeGameObject.GetComponent().GetMaterial(); + } + + Undo.RecordObject(mat, "Paste Material"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + if (mat.HasProperty(ShaderUtilities.ID_GradientScale)) + { + // Preserve unique SDF properties from destination material. + m_copiedProperties.SetTexture(ShaderUtilities.ID_MainTex, mat.GetTexture(ShaderUtilities.ID_MainTex)); + m_copiedProperties.SetFloat(ShaderUtilities.ID_GradientScale, mat.GetFloat(ShaderUtilities.ID_GradientScale)); + m_copiedProperties.SetFloat(ShaderUtilities.ID_TextureWidth, mat.GetFloat(ShaderUtilities.ID_TextureWidth)); + m_copiedProperties.SetFloat(ShaderUtilities.ID_TextureHeight, mat.GetFloat(ShaderUtilities.ID_TextureHeight)); + } + + EditorShaderUtilities.CopyMaterialProperties(m_copiedProperties, mat); + + // Copy ShaderKeywords from one material to the other. + mat.shaderKeywords = m_copiedProperties.shaderKeywords; + + // Let TextMeshPro Objects that this mat has changed. + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat); + } + + + // Enable Resetting of Material properties without losing unique properties of the font atlas. + [MenuItem("CONTEXT/Material/Reset", false, 2100)] + static void ResetSettings(MenuCommand command) + { + Material mat = null; + if (command.context.GetType() == typeof(Material)) + mat = (Material)command.context; + else + { + mat = Selection.activeGameObject.GetComponent().GetMaterial(); + } + + Undo.RecordObject(mat, "Reset Material"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + if (mat.HasProperty(ShaderUtilities.ID_GradientScale)) + { + // Copy unique properties of the SDF Material + var texture = mat.GetTexture(ShaderUtilities.ID_MainTex); + var gradientScale = mat.GetFloat(ShaderUtilities.ID_GradientScale); + var texWidth = mat.GetFloat(ShaderUtilities.ID_TextureWidth); + var texHeight = mat.GetFloat(ShaderUtilities.ID_TextureHeight); + + var stencilId = 0.0f; + var stencilComp = 0.0f; + + if (mat.HasProperty(ShaderUtilities.ID_StencilID)) + { + stencilId = mat.GetFloat(ShaderUtilities.ID_StencilID); + stencilComp = mat.GetFloat(ShaderUtilities.ID_StencilComp); + } + + var normalWeight = mat.GetFloat(ShaderUtilities.ID_WeightNormal); + var boldWeight = mat.GetFloat(ShaderUtilities.ID_WeightBold); + + // Reset the material + Unsupported.SmartReset(mat); + + // Reset ShaderKeywords + mat.shaderKeywords = new string[0]; // { "BEVEL_OFF", "GLOW_OFF", "UNDERLAY_OFF" }; + + // Copy unique material properties back to the material. + mat.SetTexture(ShaderUtilities.ID_MainTex, texture); + mat.SetFloat(ShaderUtilities.ID_GradientScale, gradientScale); + mat.SetFloat(ShaderUtilities.ID_TextureWidth, texWidth); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, texHeight); + + if (mat.HasProperty(ShaderUtilities.ID_StencilID)) + { + mat.SetFloat(ShaderUtilities.ID_StencilID, stencilId); + mat.SetFloat(ShaderUtilities.ID_StencilComp, stencilComp); + } + + mat.SetFloat(ShaderUtilities.ID_WeightNormal, normalWeight); + mat.SetFloat(ShaderUtilities.ID_WeightBold, boldWeight); + } + else + { + Unsupported.SmartReset(mat); + } + + TMPro_EventManager.ON_MATERIAL_PROPERTY_CHANGED(true, mat); + } + + + //This function is used for debugging and fixing potentially broken font atlas links. + [MenuItem("CONTEXT/Material/Copy Atlas", false, 2000)] + static void CopyAtlas(MenuCommand command) + { + Material mat = command.context as Material; + + m_copiedAtlasProperties = new Material(mat); + m_copiedAtlasProperties.hideFlags = HideFlags.DontSave; + } + + + // This function is used for debugging and fixing potentially broken font atlas links + [MenuItem("CONTEXT/Material/Paste Atlas", false, 2001)] + static void PasteAtlas(MenuCommand command) + { + Material mat = command.context as Material; + + if (mat == null) + return; + + if (m_copiedAtlasProperties != null) + { + Undo.RecordObject(mat, "Paste Texture"); + + ShaderUtilities.GetShaderPropertyIDs(); // Make sure we have valid Property IDs + + if (m_copiedAtlasProperties.HasProperty(ShaderUtilities.ID_MainTex)) + mat.SetTexture(ShaderUtilities.ID_MainTex, m_copiedAtlasProperties.GetTexture(ShaderUtilities.ID_MainTex)); + + if (m_copiedAtlasProperties.HasProperty(ShaderUtilities.ID_GradientScale)) + { + mat.SetFloat(ShaderUtilities.ID_GradientScale, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_GradientScale)); + mat.SetFloat(ShaderUtilities.ID_TextureWidth, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_TextureWidth)); + mat.SetFloat(ShaderUtilities.ID_TextureHeight, m_copiedAtlasProperties.GetFloat(ShaderUtilities.ID_TextureHeight)); + } + } + else if (m_copiedTexture != null) + { + Undo.RecordObject(mat, "Paste Texture"); + + mat.SetTexture(ShaderUtilities.ID_MainTex, m_copiedTexture); + } + + //DestroyImmediate(m_copiedAtlasProperties); + } + + + // Context Menus for TMPro Font Assets + //This function is used for debugging and fixing potentially broken font atlas links. + [MenuItem("CONTEXT/TMP_FontAsset/Extract Atlas", false, 2100)] + static void ExtractAtlas(MenuCommand command) + { + TMP_FontAsset font = command.context as TMP_FontAsset; + + string fontPath = AssetDatabase.GetAssetPath(font); + string texPath = Path.GetDirectoryName(fontPath) + "/" + Path.GetFileNameWithoutExtension(fontPath) + " Atlas.png"; + + // Create a Serialized Object of the texture to allow us to make it readable. + SerializedObject texprop = new SerializedObject(font.material.GetTexture(ShaderUtilities.ID_MainTex)); + texprop.FindProperty("m_IsReadable").boolValue = true; + texprop.ApplyModifiedProperties(); + + // Create a copy of the texture. + Texture2D tex = Instantiate(font.material.GetTexture(ShaderUtilities.ID_MainTex)) as Texture2D; + + // Set the texture to not readable again. + texprop.FindProperty("m_IsReadable").boolValue = false; + texprop.ApplyModifiedProperties(); + + Debug.Log(texPath); + // Saving File for Debug + var pngData = tex.EncodeToPNG(); + File.WriteAllBytes(texPath, pngData); + + AssetDatabase.Refresh(); + DestroyImmediate(tex); + } + + /// + /// + /// + /// + [MenuItem("CONTEXT/TMP_FontAsset/Update Atlas Texture...", false, 2000)] + static void RegenerateFontAsset(MenuCommand command) + { + TMP_FontAsset fontAsset = command.context as TMP_FontAsset; + + if (fontAsset != null) + { + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(fontAsset); + } + } + + [MenuItem("CONTEXT/TMP_FontAsset/Force Upgrade To Version 1.1.0...", false, 2010)] + static void ForceFontAssetUpgrade(MenuCommand command) + { + TMP_FontAsset fontAsset = command.context as TMP_FontAsset; + + if (fontAsset != null) + { + fontAsset.UpgradeFontAsset(); + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + } + + + /// + /// Clear Dynamic Font Asset data such as glyph, character and font features. + /// + /// + [MenuItem("CONTEXT/TMP_FontAsset/Reset", false, 100)] + static void ClearFontAssetData(MenuCommand command) + { + TMP_FontAsset fontAsset = command.context as TMP_FontAsset; + + if (fontAsset != null && Selection.activeObject != fontAsset) + { + Selection.activeObject = fontAsset; + } + + fontAsset.ClearFontAssetData(true); + + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + + + [MenuItem("CONTEXT/TrueTypeFontImporter/Create TMP Font Asset...", false, 200)] + static void CreateFontAsset(MenuCommand command) + { + TrueTypeFontImporter importer = command.context as TrueTypeFontImporter; + + if (importer != null) + { + Font sourceFontFile = AssetDatabase.LoadAssetAtPath(importer.assetPath); + + if (sourceFontFile) + TMPro_FontAssetCreatorWindow.ShowFontAtlasCreatorWindow(sourceFontFile); + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_ContextMenus.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_ContextMenus.cs.meta new file mode 100644 index 0000000..f16753f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_ContextMenus.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 44e1d646473a40178712cb2150f54cec +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_CreateObjectMenu.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_CreateObjectMenu.cs new file mode 100644 index 0000000..99b83a6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_CreateObjectMenu.cs @@ -0,0 +1,392 @@ +using UnityEngine; +using UnityEditor; +using UnityEditor.Presets; +using UnityEditor.SceneManagement; +using UnityEditor.Experimental.SceneManagement; +using UnityEngine.SceneManagement; +using UnityEngine.UI; +using UnityEngine.EventSystems; + + +namespace TMPro.EditorUtilities +{ + public static class TMPro_CreateObjectMenu + { + + /// + /// Create a TextMeshPro object that works with the Mesh Renderer + /// + /// + [MenuItem("GameObject/3D Object/Text - TextMeshPro", false, 30)] + static void CreateTextMeshProObjectPerform(MenuCommand command) + { + GameObject go = ObjectFactory.CreateGameObject("Text (TMP)"); + + // Add support for new prefab mode + StageUtility.PlaceGameObjectInCurrentStage(go); + + TextMeshPro textComponent = ObjectFactory.AddComponent(go); + + if (textComponent.m_isWaitingOnResourceLoad == false) + { + // Get reference to potential Presets for component + #if UNITY_2019_3_OR_NEWER + Preset[] presets = Preset.GetDefaultPresetsForObject(textComponent); + + if (presets == null || presets.Length == 0) + { + textComponent.text = "Sample text"; + textComponent.alignment = TextAlignmentOptions.TopLeft; + } + else + { + textComponent.renderer.sortingLayerID = textComponent._SortingLayerID; + textComponent.renderer.sortingOrder = textComponent._SortingOrder; + } + #else + if (Preset.GetDefaultForObject(textComponent) == null) + { + textComponent.text = "Sample text"; + textComponent.alignment = TextAlignmentOptions.TopLeft; + } + else + { + textComponent.renderer.sortingLayerID = textComponent._SortingLayerID; + textComponent.renderer.sortingOrder = textComponent._SortingOrder; + } + #endif + + if (TMP_Settings.autoSizeTextContainer) + { + Vector2 size = textComponent.GetPreferredValues(TMP_Math.FLOAT_MAX, TMP_Math.FLOAT_MAX); + textComponent.rectTransform.sizeDelta = size; + } + else + { + textComponent.rectTransform.sizeDelta = TMP_Settings.defaultTextMeshProTextContainerSize; + } + } + else + { + textComponent.text = "Sample text"; + textComponent.alignment = TextAlignmentOptions.TopLeft; + } + + Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); + + GameObject contextObject = command.context as GameObject; + if (contextObject != null) + { + GameObjectUtility.SetParentAndAlign(go, contextObject); + Undo.SetTransformParent(go.transform, contextObject.transform, "Parent " + go.name); + } + + Selection.activeGameObject = go; + } + + + /// + /// Create a TextMeshPro object that works with the CanvasRenderer + /// + /// + [MenuItem("GameObject/UI/Text - TextMeshPro", false, 2001)] + static void CreateTextMeshProGuiObjectPerform(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateText(GetStandardResources()); + + // Override text color and font size + TextMeshProUGUI textComponent = go.GetComponent(); + + if (textComponent.m_isWaitingOnResourceLoad == false) + { + // Get reference to potential Presets for component + #if UNITY_2019_3_OR_NEWER + Preset[] presets = Preset.GetDefaultPresetsForObject(textComponent); + + if (presets == null || presets.Length == 0) + { + textComponent.fontSize = TMP_Settings.defaultFontSize; + textComponent.color = Color.white; + textComponent.text = "New Text"; + } + #else + if (Preset.GetDefaultForObject(textComponent) == null) + { + textComponent.fontSize = TMP_Settings.defaultFontSize; + textComponent.color = Color.white; + textComponent.text = "New Text"; + } + #endif + + if (TMP_Settings.autoSizeTextContainer) + { + Vector2 size = textComponent.GetPreferredValues(TMP_Math.FLOAT_MAX, TMP_Math.FLOAT_MAX); + textComponent.rectTransform.sizeDelta = size; + } + else + { + textComponent.rectTransform.sizeDelta = TMP_Settings.defaultTextMeshProUITextContainerSize; + } + } + else + { + textComponent.fontSize = 36; + textComponent.color = Color.white; + textComponent.text = "New Text"; + } + + PlaceUIElementRoot(go, menuCommand); + } + + [MenuItem("GameObject/UI/Button - TextMeshPro", false, 2031)] + public static void AddButton(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateButton(GetStandardResources()); + + // Override font size + TMP_Text textComponent = go.GetComponentInChildren(); + textComponent.fontSize = 24; + + PlaceUIElementRoot(go, menuCommand); + } + + + + [MenuItem("GameObject/UI/Input Field - TextMeshPro", false, 2037)] + static void AddTextMeshProInputField(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateInputField(GetStandardResources()); + PlaceUIElementRoot(go, menuCommand); + } + + + [MenuItem("GameObject/UI/Dropdown - TextMeshPro", false, 2036)] + public static void AddDropdown(MenuCommand menuCommand) + { + GameObject go = TMP_DefaultControls.CreateDropdown(GetStandardResources()); + PlaceUIElementRoot(go, menuCommand); + } + + + private const string kUILayerName = "UI"; + + private const string kStandardSpritePath = "UI/Skin/UISprite.psd"; + private const string kBackgroundSpritePath = "UI/Skin/Background.psd"; + private const string kInputFieldBackgroundPath = "UI/Skin/InputFieldBackground.psd"; + private const string kKnobPath = "UI/Skin/Knob.psd"; + private const string kCheckmarkPath = "UI/Skin/Checkmark.psd"; + private const string kDropdownArrowPath = "UI/Skin/DropdownArrow.psd"; + private const string kMaskPath = "UI/Skin/UIMask.psd"; + + private static TMP_DefaultControls.Resources s_StandardResources; + + + private static TMP_DefaultControls.Resources GetStandardResources() + { + if (s_StandardResources.standard == null) + { + s_StandardResources.standard = AssetDatabase.GetBuiltinExtraResource(kStandardSpritePath); + s_StandardResources.background = AssetDatabase.GetBuiltinExtraResource(kBackgroundSpritePath); + s_StandardResources.inputField = AssetDatabase.GetBuiltinExtraResource(kInputFieldBackgroundPath); + s_StandardResources.knob = AssetDatabase.GetBuiltinExtraResource(kKnobPath); + s_StandardResources.checkmark = AssetDatabase.GetBuiltinExtraResource(kCheckmarkPath); + s_StandardResources.dropdown = AssetDatabase.GetBuiltinExtraResource(kDropdownArrowPath); + s_StandardResources.mask = AssetDatabase.GetBuiltinExtraResource(kMaskPath); + } + return s_StandardResources; + } + + + private static void SetPositionVisibleinSceneView(RectTransform canvasRTransform, RectTransform itemTransform) + { + // Find the best scene view + SceneView sceneView = SceneView.lastActiveSceneView; + if (sceneView == null && SceneView.sceneViews.Count > 0) + sceneView = SceneView.sceneViews[0] as SceneView; + + // Couldn't find a SceneView. Don't set position. + if (sceneView == null || sceneView.camera == null) + return; + + // Create world space Plane from canvas position. + Camera camera = sceneView.camera; + Vector3 position = Vector3.zero; + Vector2 localPlanePosition; + + if (RectTransformUtility.ScreenPointToLocalPointInRectangle(canvasRTransform, new Vector2(camera.pixelWidth / 2, camera.pixelHeight / 2), camera, out localPlanePosition)) + { + // Adjust for canvas pivot + localPlanePosition.x = localPlanePosition.x + canvasRTransform.sizeDelta.x * canvasRTransform.pivot.x; + localPlanePosition.y = localPlanePosition.y + canvasRTransform.sizeDelta.y * canvasRTransform.pivot.y; + + localPlanePosition.x = Mathf.Clamp(localPlanePosition.x, 0, canvasRTransform.sizeDelta.x); + localPlanePosition.y = Mathf.Clamp(localPlanePosition.y, 0, canvasRTransform.sizeDelta.y); + + // Adjust for anchoring + position.x = localPlanePosition.x - canvasRTransform.sizeDelta.x * itemTransform.anchorMin.x; + position.y = localPlanePosition.y - canvasRTransform.sizeDelta.y * itemTransform.anchorMin.y; + + Vector3 minLocalPosition; + minLocalPosition.x = canvasRTransform.sizeDelta.x * (0 - canvasRTransform.pivot.x) + itemTransform.sizeDelta.x * itemTransform.pivot.x; + minLocalPosition.y = canvasRTransform.sizeDelta.y * (0 - canvasRTransform.pivot.y) + itemTransform.sizeDelta.y * itemTransform.pivot.y; + + Vector3 maxLocalPosition; + maxLocalPosition.x = canvasRTransform.sizeDelta.x * (1 - canvasRTransform.pivot.x) - itemTransform.sizeDelta.x * itemTransform.pivot.x; + maxLocalPosition.y = canvasRTransform.sizeDelta.y * (1 - canvasRTransform.pivot.y) - itemTransform.sizeDelta.y * itemTransform.pivot.y; + + position.x = Mathf.Clamp(position.x, minLocalPosition.x, maxLocalPosition.x); + position.y = Mathf.Clamp(position.y, minLocalPosition.y, maxLocalPosition.y); + } + + itemTransform.anchoredPosition = position; + itemTransform.localRotation = Quaternion.identity; + itemTransform.localScale = Vector3.one; + } + + + private static void PlaceUIElementRoot(GameObject element, MenuCommand menuCommand) + { + GameObject parent = menuCommand.context as GameObject; + bool explicitParentChoice = true; + if (parent == null) + { + parent = GetOrCreateCanvasGameObject(); + explicitParentChoice = false; + + // If in Prefab Mode, Canvas has to be part of Prefab contents, + // otherwise use Prefab root instead. + PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + if (prefabStage != null && !prefabStage.IsPartOfPrefabContents(parent)) + parent = prefabStage.prefabContentsRoot; + } + if (parent.GetComponentInParent() == null) + { + // Create canvas under context GameObject, + // and make that be the parent which UI element is added under. + GameObject canvas = CreateNewUI(); + canvas.transform.SetParent(parent.transform, false); + parent = canvas; + } + + // Setting the element to be a child of an element already in the scene should + // be sufficient to also move the element to that scene. + // However, it seems the element needs to be already in its destination scene when the + // RegisterCreatedObjectUndo is performed; otherwise the scene it was created in is dirtied. + SceneManager.MoveGameObjectToScene(element, parent.scene); + + if (element.transform.parent == null) + { + Undo.SetTransformParent(element.transform, parent.transform, "Parent " + element.name); + } + + GameObjectUtility.EnsureUniqueNameForSibling(element); + + // We have to fix up the undo name since the name of the object was only known after reparenting it. + Undo.SetCurrentGroupName("Create " + element.name); + + GameObjectUtility.SetParentAndAlign(element, parent); + if (!explicitParentChoice) // not a context click, so center in sceneview + SetPositionVisibleinSceneView(parent.GetComponent(), element.GetComponent()); + + Undo.RegisterCreatedObjectUndo(element, "Create " + element.name); + + Selection.activeGameObject = element; + } + + + public static GameObject CreateNewUI() + { + // Root for the UI + var root = new GameObject("Canvas"); + root.layer = LayerMask.NameToLayer(kUILayerName); + Canvas canvas = root.AddComponent(); + canvas.renderMode = RenderMode.ScreenSpaceOverlay; + root.AddComponent(); + root.AddComponent(); + + // Works for all stages. + StageUtility.PlaceGameObjectInCurrentStage(root); + bool customScene = false; + PrefabStage prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + if (prefabStage != null) + { + root.transform.SetParent(prefabStage.prefabContentsRoot.transform, false); + customScene = true; + } + + Undo.RegisterCreatedObjectUndo(root, "Create " + root.name); + + // If there is no event system add one... + // No need to place event system in custom scene as these are temporary anyway. + // It can be argued for or against placing it in the user scenes, + // but let's not modify scene user is not currently looking at. + if (!customScene) + CreateEventSystem(false); + return root; + } + + + private static void CreateEventSystem(bool select) + { + CreateEventSystem(select, null); + } + + + private static void CreateEventSystem(bool select, GameObject parent) + { + var esys = Object.FindObjectOfType(); + if (esys == null) + { + var eventSystem = new GameObject("EventSystem"); + GameObjectUtility.SetParentAndAlign(eventSystem, parent); + esys = eventSystem.AddComponent(); + eventSystem.AddComponent(); + + Undo.RegisterCreatedObjectUndo(eventSystem, "Create " + eventSystem.name); + } + + if (select && esys != null) + { + Selection.activeGameObject = esys.gameObject; + } + } + + + // Helper function that returns a Canvas GameObject; preferably a parent of the selection, or other existing Canvas. + public static GameObject GetOrCreateCanvasGameObject() + { + GameObject selectedGo = Selection.activeGameObject; + + // Try to find a gameobject that is the selected GO or one if its parents. + Canvas canvas = (selectedGo != null) ? selectedGo.GetComponentInParent() : null; + if (IsValidCanvas(canvas)) + return canvas.gameObject; + + // No canvas in selection or its parents? Then use any valid canvas. + // We have to find all loaded Canvases, not just the ones in main scenes. + Canvas[] canvasArray = StageUtility.GetCurrentStageHandle().FindComponentsOfType(); + for (int i = 0; i < canvasArray.Length; i++) + if (IsValidCanvas(canvasArray[i])) + return canvasArray[i].gameObject; + + // No canvas in the scene at all? Then create a new one. + return CreateNewUI(); + } + + static bool IsValidCanvas(Canvas canvas) + { + if (canvas == null || !canvas.gameObject.activeInHierarchy) + return false; + + // It's important that the non-editable canvas from a prefab scene won't be rejected, + // but canvases not visible in the Hierarchy at all do. Don't check for HideAndDontSave. + if (EditorUtility.IsPersistent(canvas) || (canvas.hideFlags & HideFlags.HideInHierarchy) != 0) + return false; + + if (StageUtility.GetStageHandle(canvas.gameObject) != StageUtility.GetCurrentStageHandle()) + return false; + + return true; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta new file mode 100644 index 0000000..be9643f --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_CreateObjectMenu.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 7065397ff8184621aa3ca4f854491259 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs new file mode 100644 index 0000000..3d63900 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs @@ -0,0 +1,53 @@ +using UnityEngine; +using UnityEditor; +using System.Linq; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public static class EditorShaderUtilities + { + + /// + /// Copy Shader properties from source to destination material. + /// + /// + /// + public static void CopyMaterialProperties(Material source, Material destination) + { + MaterialProperty[] source_prop = MaterialEditor.GetMaterialProperties(new Material[] { source }); + + for (int i = 0; i < source_prop.Length; i++) + { + int property_ID = Shader.PropertyToID(source_prop[i].name); + if (destination.HasProperty(property_ID)) + { + //Debug.Log(source_prop[i].name + " Type:" + ShaderUtil.GetPropertyType(source.shader, i)); + switch (ShaderUtil.GetPropertyType(source.shader, i)) + { + case ShaderUtil.ShaderPropertyType.Color: + destination.SetColor(property_ID, source.GetColor(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.Float: + destination.SetFloat(property_ID, source.GetFloat(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.Range: + destination.SetFloat(property_ID, source.GetFloat(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.TexEnv: + destination.SetTexture(property_ID, source.GetTexture(property_ID)); + break; + case ShaderUtil.ShaderPropertyType.Vector: + destination.SetVector(property_ID, source.GetVector(property_ID)); + break; + } + } + } + + } + + } + +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta new file mode 100644 index 0000000..89d2594 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_EditorShaderUtilities.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: aa76955fe5bb44f7915d91db8c7043c4 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs new file mode 100644 index 0000000..4d895a5 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs @@ -0,0 +1,1802 @@ +using System; +using UnityEngine; +using UnityEditor; +using System.Collections.Generic; +using System.Globalization; +using System.Threading; +using System.IO; +using System.Text.RegularExpressions; +using UnityEngine.TextCore; +using UnityEngine.TextCore.LowLevel; +using UnityEditor.TextCore.LowLevel; +using Object = UnityEngine.Object; + +namespace TMPro.EditorUtilities +{ + public class TMPro_FontAssetCreatorWindow : EditorWindow + { + [MenuItem("Window/TextMeshPro/Font Asset Creator", false, 2025)] + public static void ShowFontAtlasCreatorWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Font Asset Creator"); + window.Focus(); + + // Make sure TMP Essential Resources have been imported. + window.CheckEssentialResources(); + } + + + public static void ShowFontAtlasCreatorWindow(Font sourceFontFile) + { + var window = GetWindow(); + + window.titleContent = new GUIContent("Font Asset Creator"); + window.Focus(); + + window.ClearGeneratedData(); + window.m_LegacyFontAsset = null; + window.m_SelectedFontAsset = null; + + // Override selected font asset + window.m_SourceFontFile = sourceFontFile; + + // Make sure TMP Essential Resources have been imported. + window.CheckEssentialResources(); + } + + + public static void ShowFontAtlasCreatorWindow(TMP_FontAsset fontAsset) + { + var window = GetWindow(); + + window.titleContent = new GUIContent("Font Asset Creator"); + window.Focus(); + + // Clear any previously generated data + window.ClearGeneratedData(); + window.m_LegacyFontAsset = null; + + // Load font asset creation settings if we have valid settings + if (string.IsNullOrEmpty(fontAsset.creationSettings.sourceFontFileGUID) == false) + { + window.LoadFontCreationSettings(fontAsset.creationSettings); + + // Override settings to inject character list from font asset + window.m_CharacterSetSelectionMode = 6; + window.m_CharacterSequence = TMP_EditorUtility.GetUnicodeCharacterSequence(TMP_FontAsset.GetCharactersArray(fontAsset)); + + + window.m_ReferencedFontAsset = fontAsset; + window.m_SavedFontAtlas = fontAsset.atlasTexture; + } + else + { + window.m_WarningMessage = "Font Asset [" + fontAsset.name + "] does not contain any previous \"Font Asset Creation Settings\". This usually means [" + fontAsset.name + "] was created before this new functionality was added."; + window.m_SourceFontFile = null; + window.m_LegacyFontAsset = fontAsset; + } + + // Even if we don't have any saved generation settings, we still want to pre-select the source font file. + window.m_SelectedFontAsset = fontAsset; + + // Make sure TMP Essential Resources have been imported. + window.CheckEssentialResources(); + } + + [System.Serializable] + class FontAssetCreationSettingsContainer + { + public List fontAssetCreationSettings; + } + + FontAssetCreationSettingsContainer m_FontAssetCreationSettingsContainer; + + //static readonly string[] m_FontCreationPresets = new string[] { "Recent 1", "Recent 2", "Recent 3", "Recent 4" }; + int m_FontAssetCreationSettingsCurrentIndex = 0; + + const string k_FontAssetCreationSettingsContainerKey = "TextMeshPro.FontAssetCreator.RecentFontAssetCreationSettings.Container"; + const string k_FontAssetCreationSettingsCurrentIndexKey = "TextMeshPro.FontAssetCreator.RecentFontAssetCreationSettings.CurrentIndex"; + const float k_TwoColumnControlsWidth = 335f; + + // Diagnostics + System.Diagnostics.Stopwatch m_StopWatch; + double m_GlyphPackingGenerationTime; + double m_GlyphRenderingGenerationTime; + + string[] m_FontSizingOptions = { "Auto Sizing", "Custom Size" }; + int m_PointSizeSamplingMode; + string[] m_FontResolutionLabels = { "8", "16","32", "64", "128", "256", "512", "1024", "2048", "4096", "8192" }; + int[] m_FontAtlasResolutions = { 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 }; + string[] m_FontCharacterSets = { "ASCII", "Extended ASCII", "ASCII Lowercase", "ASCII Uppercase", "Numbers + Symbols", "Custom Range", "Unicode Range (Hex)", "Custom Characters", "Characters from File" }; + enum FontPackingModes { Fast = 0, Optimum = 4 }; + FontPackingModes m_PackingMode = FontPackingModes.Fast; + + int m_CharacterSetSelectionMode; + + string m_CharacterSequence = ""; + string m_OutputFeedback = ""; + string m_WarningMessage; + int m_CharacterCount; + Vector2 m_ScrollPosition; + Vector2 m_OutputScrollPosition; + + bool m_IsRepaintNeeded; + + float m_AtlasGenerationProgress; + string m_AtlasGenerationProgressLabel = string.Empty; + float m_RenderingProgress; + bool m_IsGlyphPackingDone; + bool m_IsGlyphRenderingDone; + bool m_IsRenderingDone; + bool m_IsProcessing; + bool m_IsGenerationDisabled; + bool m_IsGenerationCancelled; + + bool m_IsFontAtlasInvalid; + Object m_SourceFontFile; + TMP_FontAsset m_SelectedFontAsset; + TMP_FontAsset m_LegacyFontAsset; + TMP_FontAsset m_ReferencedFontAsset; + + TextAsset m_CharactersFromFile; + int m_PointSize; + int m_Padding = 5; + //FaceStyles m_FontStyle = FaceStyles.Normal; + //float m_FontStyleValue = 2; + + GlyphRenderMode m_GlyphRenderMode = GlyphRenderMode.SDFAA; + int m_AtlasWidth = 512; + int m_AtlasHeight = 512; + byte[] m_AtlasTextureBuffer; + Texture2D m_FontAtlasTexture; + Texture2D m_SavedFontAtlas; + + // + List m_FontGlyphTable = new List(); + List m_FontCharacterTable = new List(); + + Dictionary m_CharacterLookupMap = new Dictionary(); + Dictionary> m_GlyphLookupMap = new Dictionary>(); + + List m_GlyphsToPack = new List(); + List m_GlyphsPacked = new List(); + List m_FreeGlyphRects = new List(); + List m_UsedGlyphRects = new List(); + List m_GlyphsToRender = new List(); + List m_AvailableGlyphsToAdd = new List(); + List m_MissingCharacters = new List(); + List m_ExcludedCharacters = new List(); + + private FaceInfo m_FaceInfo; + + bool m_IncludeFontFeatures; + + + public void OnEnable() + { + // Used for Diagnostics + m_StopWatch = new System.Diagnostics.Stopwatch(); + + // Set Editor window size. + minSize = new Vector2(315, minSize.y); + + // Initialize & Get shader property IDs. + ShaderUtilities.GetShaderPropertyIDs(); + + // Load last selected preset if we are not already in the process of regenerating an existing font asset (via the Context menu) + if (EditorPrefs.HasKey(k_FontAssetCreationSettingsContainerKey)) + { + if (m_FontAssetCreationSettingsContainer == null) + m_FontAssetCreationSettingsContainer = JsonUtility.FromJson(EditorPrefs.GetString(k_FontAssetCreationSettingsContainerKey)); + + if (m_FontAssetCreationSettingsContainer.fontAssetCreationSettings != null && m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count > 0) + { + // Load Font Asset Creation Settings preset. + if (EditorPrefs.HasKey(k_FontAssetCreationSettingsCurrentIndexKey)) + m_FontAssetCreationSettingsCurrentIndex = EditorPrefs.GetInt(k_FontAssetCreationSettingsCurrentIndexKey); + + LoadFontCreationSettings(m_FontAssetCreationSettingsContainer.fontAssetCreationSettings[m_FontAssetCreationSettingsCurrentIndex]); + } + } + + ClearGeneratedData(); + } + + + public void OnDisable() + { + //Debug.Log("TextMeshPro Editor Window has been disabled."); + + // Destroy Engine only if it has been initialized already + FontEngine.DestroyFontEngine(); + + ClearGeneratedData(); + + // Remove Glyph Report if one was created. + if (File.Exists("Assets/TextMesh Pro/Glyph Report.txt")) + { + File.Delete("Assets/TextMesh Pro/Glyph Report.txt"); + File.Delete("Assets/TextMesh Pro/Glyph Report.txt.meta"); + + AssetDatabase.Refresh(); + } + + // Save Font Asset Creation Settings Index + SaveCreationSettingsToEditorPrefs(SaveFontCreationSettings()); + EditorPrefs.SetInt(k_FontAssetCreationSettingsCurrentIndexKey, m_FontAssetCreationSettingsCurrentIndex); + + // Unregister to event + TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED); + + Resources.UnloadUnusedAssets(); + } + + + // Event received when TMP resources have been loaded. + void ON_RESOURCES_LOADED() + { + TMPro_EventManager.RESOURCE_LOAD_EVENT.Remove(ON_RESOURCES_LOADED); + + m_IsGenerationDisabled = false; + } + + // Make sure TMP Essential Resources have been imported. + void CheckEssentialResources() + { + if (TMP_Settings.instance == null) + { + if (m_IsGenerationDisabled == false) + TMPro_EventManager.RESOURCE_LOAD_EVENT.Add(ON_RESOURCES_LOADED); + + m_IsGenerationDisabled = true; + } + } + + + public void OnGUI() + { + GUILayout.BeginHorizontal(); + DrawControls(); + if (position.width > position.height && position.width > k_TwoColumnControlsWidth) + { + DrawPreview(); + } + GUILayout.EndHorizontal(); + } + + + public void Update() + { + if (m_IsRepaintNeeded) + { + //Debug.Log("Repainting..."); + m_IsRepaintNeeded = false; + Repaint(); + } + + // Update Progress bar is we are Rendering a Font. + if (m_IsProcessing) + { + m_AtlasGenerationProgress = FontEngine.generationProgress; + + m_IsRepaintNeeded = true; + } + + if (m_IsGlyphPackingDone) + { + Debug.Log("Glyph packing completed in: " + m_GlyphPackingGenerationTime.ToString("0.000 ms.")); + m_IsGlyphPackingDone = false; + } + + if (m_IsGlyphRenderingDone) + { + Debug.Log("Font Atlas generation completed in: " + m_GlyphRenderingGenerationTime.ToString("0.000 ms.")); + m_IsGlyphRenderingDone = false; + } + + // Update Feedback Window & Create Font Texture once Rendering is done. + if (m_IsRenderingDone) + { + m_IsProcessing = false; + m_IsRenderingDone = false; + + if (m_IsGenerationCancelled == false) + { + m_AtlasGenerationProgressLabel = "Generation completed in: " + (m_GlyphPackingGenerationTime + m_GlyphRenderingGenerationTime).ToString("0.00 ms."); + + UpdateRenderFeedbackWindow(); + CreateFontAtlasTexture(); + + // If dynamic make readable ... + m_FontAtlasTexture.Apply(false, false); + } + Repaint(); + } + } + + + /// + /// Method which returns the character corresponding to a decimal value. + /// + /// + /// + static uint[] ParseNumberSequence(string sequence) + { + List unicodeList = new List(); + string[] sequences = sequence.Split(','); + + foreach (string seq in sequences) + { + string[] s1 = seq.Split('-'); + + if (s1.Length == 1) + try + { + unicodeList.Add(uint.Parse(s1[0])); + } + catch + { + Debug.Log("No characters selected or invalid format."); + } + else + { + for (uint j = uint.Parse(s1[0]); j < uint.Parse(s1[1]) + 1; j++) + { + unicodeList.Add(j); + } + } + } + + return unicodeList.ToArray(); + } + + + /// + /// Method which returns the character (decimal value) from a hex sequence. + /// + /// + /// + static uint[] ParseHexNumberSequence(string sequence) + { + List unicodeList = new List(); + string[] sequences = sequence.Split(','); + + foreach (string seq in sequences) + { + string[] s1 = seq.Split('-'); + + if (s1.Length == 1) + try + { + unicodeList.Add(uint.Parse(s1[0], NumberStyles.AllowHexSpecifier)); + } + catch + { + Debug.Log("No characters selected or invalid format."); + } + else + { + for (uint j = uint.Parse(s1[0], NumberStyles.AllowHexSpecifier); j < uint.Parse(s1[1], NumberStyles.AllowHexSpecifier) + 1; j++) + { + unicodeList.Add(j); + } + } + } + + return unicodeList.ToArray(); + } + + + void DrawControls() + { + GUILayout.Space(5f); + + if (position.width > position.height && position.width > k_TwoColumnControlsWidth) + { + m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition, GUILayout.Width(315)); + } + else + { + m_ScrollPosition = EditorGUILayout.BeginScrollView(m_ScrollPosition); + } + + GUILayout.Space(5f); + + GUILayout.Label(m_SelectedFontAsset != null ? string.Format("Font Settings [{0}]", m_SelectedFontAsset.name) : "Font Settings", EditorStyles.boldLabel); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + EditorGUIUtility.labelWidth = 125f; + EditorGUIUtility.fieldWidth = 5f; + + // Disable Options if already generating a font atlas texture. + EditorGUI.BeginDisabledGroup(m_IsProcessing); + { + // FONT TTF SELECTION + EditorGUI.BeginChangeCheck(); + m_SourceFontFile = EditorGUILayout.ObjectField("Source Font File", m_SourceFontFile, typeof(Font), false) as Font; + if (EditorGUI.EndChangeCheck()) + { + m_SelectedFontAsset = null; + m_IsFontAtlasInvalid = true; + } + + // FONT SIZING + EditorGUI.BeginChangeCheck(); + if (m_PointSizeSamplingMode == 0) + { + m_PointSizeSamplingMode = EditorGUILayout.Popup("Sampling Point Size", m_PointSizeSamplingMode, m_FontSizingOptions); + } + else + { + GUILayout.BeginHorizontal(); + m_PointSizeSamplingMode = EditorGUILayout.Popup("Sampling Point Size", m_PointSizeSamplingMode, m_FontSizingOptions, GUILayout.Width(225)); + m_PointSize = EditorGUILayout.IntField(m_PointSize); + GUILayout.EndHorizontal(); + } + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + // FONT PADDING + EditorGUI.BeginChangeCheck(); + m_Padding = EditorGUILayout.IntField("Padding", m_Padding); + m_Padding = (int)Mathf.Clamp(m_Padding, 0f, 64f); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + // FONT PACKING METHOD SELECTION + EditorGUI.BeginChangeCheck(); + m_PackingMode = (FontPackingModes)EditorGUILayout.EnumPopup("Packing Method", m_PackingMode); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + // FONT ATLAS RESOLUTION SELECTION + GUILayout.BeginHorizontal(); + GUI.changed = false; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PrefixLabel("Atlas Resolution"); + m_AtlasWidth = EditorGUILayout.IntPopup(m_AtlasWidth, m_FontResolutionLabels, m_FontAtlasResolutions); + m_AtlasHeight = EditorGUILayout.IntPopup(m_AtlasHeight, m_FontResolutionLabels, m_FontAtlasResolutions); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + GUILayout.EndHorizontal(); + + + // FONT CHARACTER SET SELECTION + EditorGUI.BeginChangeCheck(); + bool hasSelectionChanged = false; + m_CharacterSetSelectionMode = EditorGUILayout.Popup("Character Set", m_CharacterSetSelectionMode, m_FontCharacterSets); + if (EditorGUI.EndChangeCheck()) + { + m_CharacterSequence = ""; + hasSelectionChanged = true; + m_IsFontAtlasInvalid = true; + } + + switch (m_CharacterSetSelectionMode) + { + case 0: // ASCII + //characterSequence = "32 - 126, 130, 132 - 135, 139, 145 - 151, 153, 155, 161, 166 - 167, 169 - 174, 176, 181 - 183, 186 - 187, 191, 8210 - 8226, 8230, 8240, 8242 - 8244, 8249 - 8250, 8252 - 8254, 8260, 8286"; + m_CharacterSequence = "32 - 126, 160, 8203, 8230, 9633"; + break; + + case 1: // EXTENDED ASCII + m_CharacterSequence = "32 - 126, 160 - 255, 8192 - 8303, 8364, 8482, 9633"; + // Could add 9632 for missing glyph + break; + + case 2: // Lowercase + m_CharacterSequence = "32 - 64, 91 - 126, 160"; + break; + + case 3: // Uppercase + m_CharacterSequence = "32 - 96, 123 - 126, 160"; + break; + + case 4: // Numbers & Symbols + m_CharacterSequence = "32 - 64, 91 - 96, 123 - 126, 160"; + break; + + case 5: // Custom Range + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label("Enter a sequence of decimal values to define the characters to be included in the font asset or retrieve one from another font asset.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + + EditorGUI.BeginChangeCheck(); + m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset; + if (EditorGUI.EndChangeCheck() || hasSelectionChanged) + { + if (m_ReferencedFontAsset != null) + m_CharacterSequence = TMP_EditorUtility.GetDecimalCharacterSequence(TMP_FontAsset.GetCharactersArray(m_ReferencedFontAsset)); + + m_IsFontAtlasInvalid = true; + } + + // Filter out unwanted characters. + char chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < ',' || chr > '-')) + { + Event.current.character = '\0'; + } + GUILayout.Label("Character Sequence (Decimal)", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + EditorGUILayout.EndVertical(); + break; + + case 6: // Unicode HEX Range + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label("Enter a sequence of Unicode (hex) values to define the characters to be included in the font asset or retrieve one from another font asset.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + + EditorGUI.BeginChangeCheck(); + m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset; + if (EditorGUI.EndChangeCheck() || hasSelectionChanged) + { + if (m_ReferencedFontAsset != null) + m_CharacterSequence = TMP_EditorUtility.GetUnicodeCharacterSequence(TMP_FontAsset.GetCharactersArray(m_ReferencedFontAsset)); + + m_IsFontAtlasInvalid = true; + } + + // Filter out unwanted characters. + chr = Event.current.character; + if ((chr < '0' || chr > '9') && (chr < 'a' || chr > 'f') && (chr < 'A' || chr > 'F') && (chr < ',' || chr > '-')) + { + Event.current.character = '\0'; + } + GUILayout.Label("Character Sequence (Hex)", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + EditorGUILayout.EndVertical(); + break; + + case 7: // Characters from Font Asset + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + GUILayout.Label("Type the characters to be included in the font asset or retrieve them from another font asset.", TMP_UIStyleManager.label); + GUILayout.Space(10f); + + EditorGUI.BeginChangeCheck(); + m_ReferencedFontAsset = EditorGUILayout.ObjectField("Select Font Asset", m_ReferencedFontAsset, typeof(TMP_FontAsset), false) as TMP_FontAsset; + if (EditorGUI.EndChangeCheck() || hasSelectionChanged) + { + if (m_ReferencedFontAsset != null) + m_CharacterSequence = TMP_FontAsset.GetCharacters(m_ReferencedFontAsset); + + m_IsFontAtlasInvalid = true; + } + + EditorGUI.indentLevel = 0; + + GUILayout.Label("Custom Character List", EditorStyles.boldLabel); + EditorGUI.BeginChangeCheck(); + m_CharacterSequence = EditorGUILayout.TextArea(m_CharacterSequence, TMP_UIStyleManager.textAreaBoxWindow, GUILayout.Height(120), GUILayout.ExpandWidth(true)); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + EditorGUILayout.EndVertical(); + break; + + case 8: // Character List from File + EditorGUI.BeginChangeCheck(); + m_CharactersFromFile = EditorGUILayout.ObjectField("Character File", m_CharactersFromFile, typeof(TextAsset), false) as TextAsset; + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + if (m_CharactersFromFile != null) + { + Regex rx = new Regex(@"(? + { + if (match.Value.StartsWith("\\U")) + return char.ConvertFromUtf32(int.Parse(match.Value.Replace("\\U", ""), NumberStyles.HexNumber)); + + return char.ConvertFromUtf32(int.Parse(match.Value.Replace("\\u", ""), NumberStyles.HexNumber)); + }); + } + break; + } + + // FONT STYLE SELECTION + //GUILayout.BeginHorizontal(); + //EditorGUI.BeginChangeCheck(); + ////m_FontStyle = (FaceStyles)EditorGUILayout.EnumPopup("Font Style", m_FontStyle, GUILayout.Width(225)); + ////m_FontStyleValue = EditorGUILayout.IntField((int)m_FontStyleValue); + //if (EditorGUI.EndChangeCheck()) + //{ + // m_IsFontAtlasInvalid = true; + //} + //GUILayout.EndHorizontal(); + + // Render Mode Selection + CheckForLegacyGlyphRenderMode(); + + EditorGUI.BeginChangeCheck(); + m_GlyphRenderMode = (GlyphRenderMode)EditorGUILayout.EnumPopup("Render Mode", m_GlyphRenderMode); + if (EditorGUI.EndChangeCheck()) + { + m_IsFontAtlasInvalid = true; + } + + m_IncludeFontFeatures = EditorGUILayout.Toggle("Get Kerning Pairs", m_IncludeFontFeatures); + + EditorGUILayout.Space(); + } + + EditorGUI.EndDisabledGroup(); + + if (!string.IsNullOrEmpty(m_WarningMessage)) + { + EditorGUILayout.HelpBox(m_WarningMessage, MessageType.Warning); + } + + GUI.enabled = m_SourceFontFile != null && !m_IsProcessing && !m_IsGenerationDisabled; // Enable Preview if we are not already rendering a font. + if (GUILayout.Button("Generate Font Atlas") && GUI.enabled) + { + if (!m_IsProcessing && m_SourceFontFile != null) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + m_SavedFontAtlas = null; + + // Initialize font engine + FontEngineError errorCode = FontEngine.InitializeFontEngine(); + if (errorCode != FontEngineError.Success) + { + Debug.Log("Font Asset Creator - Error [" + errorCode + "] has occurred while Initializing the FreeType Library."); + } + + // Get file path of the source font file. + string fontPath = AssetDatabase.GetAssetPath(m_SourceFontFile); + + if (errorCode == FontEngineError.Success) + { + errorCode = FontEngine.LoadFontFace(fontPath); + + if (errorCode != FontEngineError.Success) + { + Debug.Log("Font Asset Creator - Error Code [" + errorCode + "] has occurred trying to load the [" + m_SourceFontFile.name + "] font file. This typically results from the use of an incompatible or corrupted font file.", m_SourceFontFile); + } + } + + + // Define an array containing the characters we will render. + if (errorCode == FontEngineError.Success) + { + uint[] characterSet = null; + + // Get list of characters that need to be packed and rendered to the atlas texture. + if (m_CharacterSetSelectionMode == 7 || m_CharacterSetSelectionMode == 8) + { + List char_List = new List(); + + for (int i = 0; i < m_CharacterSequence.Length; i++) + { + uint unicode = m_CharacterSequence[i]; + + // Handle surrogate pairs + if (i < m_CharacterSequence.Length - 1 && char.IsHighSurrogate((char)unicode) && char.IsLowSurrogate(m_CharacterSequence[i + 1])) + { + unicode = (uint)char.ConvertToUtf32(m_CharacterSequence[i], m_CharacterSequence[i + 1]); + i += 1; + } + + // Check to make sure we don't include duplicates + if (char_List.FindIndex(item => item == unicode) == -1) + char_List.Add(unicode); + } + + characterSet = char_List.ToArray(); + } + else if (m_CharacterSetSelectionMode == 6) + { + characterSet = ParseHexNumberSequence(m_CharacterSequence); + } + else + { + characterSet = ParseNumberSequence(m_CharacterSequence); + } + + m_CharacterCount = characterSet.Length; + + m_AtlasGenerationProgress = 0; + m_IsProcessing = true; + m_IsGenerationCancelled = false; + + GlyphLoadFlags glyphLoadFlags = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_HINTED) == GlyphRasterModes.RASTER_MODE_HINTED + ? GlyphLoadFlags.LOAD_RENDER + : GlyphLoadFlags.LOAD_RENDER | GlyphLoadFlags.LOAD_NO_HINTING; + + glyphLoadFlags = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_MONO) == GlyphRasterModes.RASTER_MODE_MONO + ? glyphLoadFlags | GlyphLoadFlags.LOAD_MONOCHROME + : glyphLoadFlags; + + // + AutoResetEvent autoEvent = new AutoResetEvent(false); + + // Worker thread to pack glyphs in the given texture space. + ThreadPool.QueueUserWorkItem(PackGlyphs => + { + // Start Stop Watch + m_StopWatch = System.Diagnostics.Stopwatch.StartNew(); + + // Clear the various lists used in the generation process. + m_AvailableGlyphsToAdd.Clear(); + m_MissingCharacters.Clear(); + m_ExcludedCharacters.Clear(); + m_CharacterLookupMap.Clear(); + m_GlyphLookupMap.Clear(); + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + // Check if requested characters are available in the source font file. + for (int i = 0; i < characterSet.Length; i++) + { + uint unicode = characterSet[i]; + uint glyphIndex; + + if (FontEngine.TryGetGlyphIndex(unicode, out glyphIndex)) + { + // Skip over potential duplicate characters. + if (m_CharacterLookupMap.ContainsKey(unicode)) + continue; + + // Add character to character lookup map. + m_CharacterLookupMap.Add(unicode, glyphIndex); + + // Skip over potential duplicate glyph references. + if (m_GlyphLookupMap.ContainsKey(glyphIndex)) + { + // Add additional glyph reference for this character. + m_GlyphLookupMap[glyphIndex].Add(unicode); + continue; + } + + // Add glyph reference to glyph lookup map. + m_GlyphLookupMap.Add(glyphIndex, new List() { unicode }); + + // Add glyph index to list of glyphs to add to texture. + m_AvailableGlyphsToAdd.Add(glyphIndex); + } + else + { + // Add Unicode to list of missing characters. + m_MissingCharacters.Add(unicode); + } + } + + // Pack available glyphs in the provided texture space. + if (m_AvailableGlyphsToAdd.Count > 0) + { + int packingModifier = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + + if (m_PointSizeSamplingMode == 0) // Auto-Sizing Point Size Mode + { + // Estimate min / max range for auto sizing of point size. + int minPointSize = 0; + int maxPointSize = (int)Mathf.Sqrt((m_AtlasWidth * m_AtlasHeight) / m_AvailableGlyphsToAdd.Count) * 3; + + m_PointSize = (maxPointSize + minPointSize) / 2; + + bool optimumPointSizeFound = false; + for (int iteration = 0; iteration < 15 && optimumPointSizeFound == false; iteration++) + { + m_AtlasGenerationProgressLabel = "Packing glyphs - Pass (" + iteration + ")"; + + FontEngine.SetFaceSize(m_PointSize); + + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + m_FreeGlyphRects.Clear(); + m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier)); + m_UsedGlyphRects.Clear(); + + for (int i = 0; i < m_AvailableGlyphsToAdd.Count; i++) + { + uint glyphIndex = m_AvailableGlyphsToAdd[i]; + Glyph glyph; + + if (FontEngine.TryGetGlyphWithIndexValue(glyphIndex, glyphLoadFlags, out glyph)) + { + if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0) + { + m_GlyphsToPack.Add(glyph); + } + else + { + m_GlyphsPacked.Add(glyph); + } + } + } + + FontEngine.TryPackGlyphsInAtlas(m_GlyphsToPack, m_GlyphsPacked, m_Padding, (GlyphPackingMode)m_PackingMode, m_GlyphRenderMode, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects); + + if (m_IsGenerationCancelled) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + return; + } + + //Debug.Log("Glyphs remaining to add [" + m_GlyphsToAdd.Count + "]. Glyphs added [" + m_GlyphsAdded.Count + "]."); + + if (m_GlyphsToPack.Count > 0) + { + if (m_PointSize > minPointSize) + { + maxPointSize = m_PointSize; + m_PointSize = (m_PointSize + minPointSize) / 2; + + //Debug.Log("Decreasing point size from [" + maxPointSize + "] to [" + m_PointSize + "]."); + } + } + else + { + if (maxPointSize - minPointSize > 1 && m_PointSize < maxPointSize) + { + minPointSize = m_PointSize; + m_PointSize = (m_PointSize + maxPointSize) / 2; + + //Debug.Log("Increasing point size from [" + minPointSize + "] to [" + m_PointSize + "]."); + } + else + { + //Debug.Log("[" + iteration + "] iterations to find the optimum point size of : [" + m_PointSize + "]."); + optimumPointSizeFound = true; + } + } + } + } + else // Custom Point Size Mode + { + m_AtlasGenerationProgressLabel = "Packing glyphs..."; + + // Set point size + FontEngine.SetFaceSize(m_PointSize); + + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + m_FreeGlyphRects.Clear(); + m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier)); + m_UsedGlyphRects.Clear(); + + for (int i = 0; i < m_AvailableGlyphsToAdd.Count; i++) + { + uint glyphIndex = m_AvailableGlyphsToAdd[i]; + Glyph glyph; + + if (FontEngine.TryGetGlyphWithIndexValue(glyphIndex, glyphLoadFlags, out glyph)) + { + if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0) + { + m_GlyphsToPack.Add(glyph); + } + else + { + m_GlyphsPacked.Add(glyph); + } + } + } + + FontEngine.TryPackGlyphsInAtlas(m_GlyphsToPack, m_GlyphsPacked, m_Padding, (GlyphPackingMode)m_PackingMode, m_GlyphRenderMode, m_AtlasWidth, m_AtlasHeight, m_FreeGlyphRects, m_UsedGlyphRects); + + if (m_IsGenerationCancelled) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + return; + } + //Debug.Log("Glyphs remaining to add [" + m_GlyphsToAdd.Count + "]. Glyphs added [" + m_GlyphsAdded.Count + "]."); + } + + } + else + { + int packingModifier = ((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP ? 0 : 1; + + FontEngine.SetFaceSize(m_PointSize); + + m_GlyphsToPack.Clear(); + m_GlyphsPacked.Clear(); + + m_FreeGlyphRects.Clear(); + m_FreeGlyphRects.Add(new GlyphRect(0, 0, m_AtlasWidth - packingModifier, m_AtlasHeight - packingModifier)); + m_UsedGlyphRects.Clear(); + } + + //Stop StopWatch + m_StopWatch.Stop(); + m_GlyphPackingGenerationTime = m_StopWatch.Elapsed.TotalMilliseconds; + m_IsGlyphPackingDone = true; + m_StopWatch.Reset(); + + m_FontCharacterTable.Clear(); + m_FontGlyphTable.Clear(); + m_GlyphsToRender.Clear(); + + // Add glyphs and characters successfully added to texture to their respective font tables. + foreach (Glyph glyph in m_GlyphsPacked) + { + uint glyphIndex = glyph.index; + + m_FontGlyphTable.Add(glyph); + + // Add glyphs to list of glyphs that need to be rendered. + if (glyph.glyphRect.width > 0 && glyph.glyphRect.height > 0) + m_GlyphsToRender.Add(glyph); + + foreach (uint unicode in m_GlyphLookupMap[glyphIndex]) + { + // Create new Character + m_FontCharacterTable.Add(new TMP_Character(unicode, glyph)); + } + } + + // + foreach (Glyph glyph in m_GlyphsToPack) + { + foreach (uint unicode in m_GlyphLookupMap[glyph.index]) + { + m_ExcludedCharacters.Add(unicode); + } + } + + // Get the face info for the current sampling point size. + m_FaceInfo = FontEngine.GetFaceInfo(); + + autoEvent.Set(); + }); + + // Worker thread to render glyphs in texture buffer. + ThreadPool.QueueUserWorkItem(RenderGlyphs => + { + autoEvent.WaitOne(); + + // Start Stop Watch + m_StopWatch = System.Diagnostics.Stopwatch.StartNew(); + + m_IsRenderingDone = false; + + // Allocate texture data + m_AtlasTextureBuffer = new byte[m_AtlasWidth * m_AtlasHeight]; + + m_AtlasGenerationProgressLabel = "Rendering glyphs..."; + + // Render and add glyphs to the given atlas texture. + if (m_GlyphsToRender.Count > 0) + { + FontEngine.RenderGlyphsToTexture(m_GlyphsToRender, m_Padding, m_GlyphRenderMode, m_AtlasTextureBuffer, m_AtlasWidth, m_AtlasHeight); + } + + m_IsRenderingDone = true; + + // Stop StopWatch + m_StopWatch.Stop(); + m_GlyphRenderingGenerationTime = m_StopWatch.Elapsed.TotalMilliseconds; + m_IsGlyphRenderingDone = true; + m_StopWatch.Reset(); + }); + } + + SaveCreationSettingsToEditorPrefs(SaveFontCreationSettings()); + } + } + + // FONT RENDERING PROGRESS BAR + GUILayout.Space(1); + Rect progressRect = EditorGUILayout.GetControlRect(false, 20); + + GUI.enabled = true; + progressRect.width -= 22; + EditorGUI.ProgressBar(progressRect, Mathf.Max(0.01f, m_AtlasGenerationProgress), m_AtlasGenerationProgressLabel); + progressRect.x = progressRect.x + progressRect.width + 2; + progressRect.y -= 1; + progressRect.width = 20; + progressRect.height = 20; + + GUI.enabled = m_IsProcessing; + if (GUI.Button(progressRect, "X")) + { + FontEngine.SendCancellationRequest(); + m_AtlasGenerationProgress = 0; + m_IsProcessing = false; + m_IsGenerationCancelled = true; + } + GUILayout.Space(5); + + // FONT STATUS & INFORMATION + GUI.enabled = true; + + GUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.Height(200)); + m_OutputScrollPosition = EditorGUILayout.BeginScrollView(m_OutputScrollPosition); + EditorGUILayout.LabelField(m_OutputFeedback, TMP_UIStyleManager.label); + EditorGUILayout.EndScrollView(); + GUILayout.EndVertical(); + + // SAVE TEXTURE & CREATE and SAVE FONT XML FILE + GUI.enabled = m_FontAtlasTexture != null && !m_IsProcessing; // Enable Save Button if font_Atlas is not Null. + + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button("Save") && GUI.enabled) + { + if (m_SelectedFontAsset == null) + { + if (m_LegacyFontAsset != null) + SaveNewFontAssetWithSameName(m_LegacyFontAsset); + else + SaveNewFontAsset(m_SourceFontFile); + } + else + { + // Save over exiting Font Asset + string filePath = Path.GetFullPath(AssetDatabase.GetAssetPath(m_SelectedFontAsset)).Replace('\\', '/'); + + if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + Save_Bitmap_FontAsset(filePath); + else + Save_SDF_FontAsset(filePath); + } + } + if (GUILayout.Button("Save as...") && GUI.enabled) + { + if (m_SelectedFontAsset == null) + { + SaveNewFontAsset(m_SourceFontFile); + } + else + { + SaveNewFontAssetWithSameName(m_SelectedFontAsset); + } + } + + EditorGUILayout.EndHorizontal(); + + EditorGUILayout.Space(); + + EditorGUILayout.EndVertical(); + + GUI.enabled = true; // Re-enable GUI + + if (position.height > position.width || position.width < k_TwoColumnControlsWidth) + { + DrawPreview(); + GUILayout.Space(5); + } + + EditorGUILayout.EndScrollView(); + + if (m_IsFontAtlasInvalid) + ClearGeneratedData(); + } + + + /// + /// Clear the previously generated data. + /// + void ClearGeneratedData() + { + m_IsFontAtlasInvalid = false; + + if (m_FontAtlasTexture != null && !EditorUtility.IsPersistent(m_FontAtlasTexture)) + { + DestroyImmediate(m_FontAtlasTexture); + m_FontAtlasTexture = null; + } + + m_AtlasGenerationProgressLabel = string.Empty; + m_AtlasGenerationProgress = 0; + m_SavedFontAtlas = null; + + m_OutputFeedback = string.Empty; + m_WarningMessage = string.Empty; + } + + + /// + /// Function to update the feedback window showing the results of the latest generation. + /// + void UpdateRenderFeedbackWindow() + { + m_PointSize = m_FaceInfo.pointSize; + + string missingGlyphReport = string.Empty; + + //string colorTag = m_FontCharacterTable.Count == m_CharacterCount ? "" : ""; + string colorTag2 = ""; + + missingGlyphReport = "Font: " + colorTag2 + m_FaceInfo.familyName + " Style: " + colorTag2 + m_FaceInfo.styleName + ""; + + missingGlyphReport += "\nPoint Size: " + colorTag2 + m_FaceInfo.pointSize + " SP/PD Ratio: " + colorTag2 + ((float)m_Padding / m_FaceInfo.pointSize).ToString("0.0%" + ""); + + missingGlyphReport += "\n\nCharacters included: " + m_FontCharacterTable.Count + "/" + m_CharacterCount + ""; + missingGlyphReport += "\nMissing characters: " + m_MissingCharacters.Count + ""; + missingGlyphReport += "\nExcluded characters: " + m_ExcludedCharacters.Count + ""; + + // Report characters missing from font file + missingGlyphReport += "\n\nCharacters missing from font file:"; + missingGlyphReport += "\n----------------------------------------"; + + m_OutputFeedback = missingGlyphReport; + + for (int i = 0; i < m_MissingCharacters.Count; i++) + { + missingGlyphReport += "\nID: " + m_MissingCharacters[i] + "\tHex: " + m_MissingCharacters[i].ToString("X") + "\tChar [" + (char)m_MissingCharacters[i] + "]"; + + if (missingGlyphReport.Length < 16300) + m_OutputFeedback = missingGlyphReport; + } + + // Report characters that did not fit in the atlas texture + missingGlyphReport += "\n\nCharacters excluded from packing:"; + missingGlyphReport += "\n----------------------------------------"; + + for (int i = 0; i < m_ExcludedCharacters.Count; i++) + { + missingGlyphReport += "\nID: " + m_ExcludedCharacters[i] + "\tHex: " + m_ExcludedCharacters[i].ToString("X") + "\tChar [" + (char)m_ExcludedCharacters[i] + "]"; + + if (missingGlyphReport.Length < 16300) + m_OutputFeedback = missingGlyphReport; + } + + if (missingGlyphReport.Length > 16300) + m_OutputFeedback += "\n\nReport truncated.\nSee \"TextMesh Pro\\Glyph Report.txt\""; + + // Save Missing Glyph Report file + if (Directory.Exists("Assets/TextMesh Pro")) + { + missingGlyphReport = System.Text.RegularExpressions.Regex.Replace(missingGlyphReport, @"<[^>]*>", string.Empty); + File.WriteAllText("Assets/TextMesh Pro/Glyph Report.txt", missingGlyphReport); + AssetDatabase.Refresh(); + } + } + + + void CreateFontAtlasTexture() + { + if (m_FontAtlasTexture != null) + DestroyImmediate(m_FontAtlasTexture); + + m_FontAtlasTexture = new Texture2D(m_AtlasWidth, m_AtlasHeight, TextureFormat.Alpha8, false, true); + + Color32[] colors = new Color32[m_AtlasWidth * m_AtlasHeight]; + + for (int i = 0; i < colors.Length; i++) + { + byte c = m_AtlasTextureBuffer[i]; + colors[i] = new Color32(c, c, c, c); + } + + // Clear allocation of + m_AtlasTextureBuffer = null; + + if ((m_GlyphRenderMode & GlyphRenderMode.RASTER) == GlyphRenderMode.RASTER || (m_GlyphRenderMode & GlyphRenderMode.RASTER_HINTED) == GlyphRenderMode.RASTER_HINTED) + m_FontAtlasTexture.filterMode = FilterMode.Point; + + m_FontAtlasTexture.SetPixels32(colors, 0); + m_FontAtlasTexture.Apply(false, false); + + // Saving File for Debug + //var pngData = m_FontAtlasTexture.EncodeToPNG(); + //File.WriteAllBytes("Assets/Textures/Debug Font Texture.png", pngData); + } + + + /// + /// Open Save Dialog to provide the option save the font asset using the name of the source font file. This also appends SDF to the name if using any of the SDF Font Asset creation modes. + /// + /// + void SaveNewFontAsset(Object sourceObject) + { + string filePath; + + // Save new Font Asset and open save file requester at Source Font File location. + string saveDirectory = new FileInfo(AssetDatabase.GetAssetPath(sourceObject)).DirectoryName; + + if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name, "asset"); + + if (filePath.Length == 0) + return; + + Save_Bitmap_FontAsset(filePath); + } + else + { + filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name + " SDF", "asset"); + + if (filePath.Length == 0) + return; + + Save_SDF_FontAsset(filePath); + } + } + + + /// + /// Open Save Dialog to provide the option to save the font asset under the same name. + /// + /// + void SaveNewFontAssetWithSameName(Object sourceObject) + { + string filePath; + + // Save new Font Asset and open save file requester at Source Font File location. + string saveDirectory = new FileInfo(AssetDatabase.GetAssetPath(sourceObject)).DirectoryName; + + filePath = EditorUtility.SaveFilePanel("Save TextMesh Pro! Font Asset File", saveDirectory, sourceObject.name, "asset"); + + if (filePath.Length == 0) + return; + + if (((GlyphRasterModes)m_GlyphRenderMode & GlyphRasterModes.RASTER_MODE_BITMAP) == GlyphRasterModes.RASTER_MODE_BITMAP) + { + Save_Bitmap_FontAsset(filePath); + } + else + { + Save_SDF_FontAsset(filePath); + } + } + + + void Save_Bitmap_FontAsset(string filePath) + { + filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath. + + string dataPath = Application.dataPath; + + if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\""); + return; + } + + string relativeAssetPath = filePath.Substring(dataPath.Length - 6); + string tex_DirName = Path.GetDirectoryName(relativeAssetPath); + string tex_FileName = Path.GetFileNameWithoutExtension(relativeAssetPath); + string tex_Path_NoExt = tex_DirName + "/" + tex_FileName; + + // Check if TextMeshPro font asset already exists. If not, create a new one. Otherwise update the existing one. + TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(tex_Path_NoExt + ".asset", typeof(TMP_FontAsset)) as TMP_FontAsset; + if (fontAsset == null) + { + //Debug.Log("Creating TextMeshPro font asset!"); + fontAsset = ScriptableObject.CreateInstance(); // Create new TextMeshPro Font Asset. + AssetDatabase.CreateAsset(fontAsset, tex_Path_NoExt + ".asset"); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Reference to the source font file GUID. + fontAsset.m_SourceFontFile_EditorRef = (Font)m_SourceFontFile; + fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile)); + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortAllTables(); + + // Get and Add Kerning Pairs to Font Asset + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + + // Add Font Atlas as Sub-Asset + fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture }; + m_FontAtlasTexture.name = tex_FileName + " Atlas"; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset); + + // Create new Material and Add it as Sub-Asset + Shader default_Shader = Shader.Find("TextMeshPro/Bitmap"); // m_shaderSelection; + Material tmp_material = new Material(default_Shader); + tmp_material.name = tex_FileName + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture); + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + } + else + { + // Find all Materials referencing this font atlas. + Material[] material_references = TMP_EditorUtility.FindMaterialReferences(fontAsset); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + // Special handling to remove legacy font asset data + if (fontAsset.m_glyphInfoList != null && fontAsset.m_glyphInfoList.Count > 0) + fontAsset.m_glyphInfoList = null; + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortAllTables(); + + // Get and Add Kerning Pairs to Font Asset + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + // Destroy Assets that will be replaced. + if (fontAsset.atlasTextures != null && fontAsset.atlasTextures.Length > 0) + { + for (int i = 1; i < fontAsset.atlasTextures.Length; i++) + DestroyImmediate(fontAsset.atlasTextures[i], true); + } + + fontAsset.m_AtlasTextureIndex = 0; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + // Make sure remaining atlas texture is of the correct size + Texture2D tex = fontAsset.atlasTextures[0]; + tex.name = tex_FileName + " Atlas"; + + // Make texture readable to allow resizing + bool isReadableState = tex.isReadable; + if (isReadableState == false) + FontEngineEditorUtilities.SetAtlasTextureIsReadable(tex, true); + + if (tex.width != m_AtlasWidth || tex.height != m_AtlasHeight) + { + tex.Resize(m_AtlasWidth, m_AtlasHeight); + tex.Apply(); + } + + // Copy new texture data to existing texture + Graphics.CopyTexture(m_FontAtlasTexture, tex); + + // Apply changes to the texture. + tex.Apply(false, !isReadableState); + + // Special handling due to a bug in earlier versions of Unity. + m_FontAtlasTexture.hideFlags = HideFlags.None; + fontAsset.material.hideFlags = HideFlags.None; + + // Update the Texture reference on the Material + //for (int i = 0; i < material_references.Length; i++) + //{ + // material_references[i].SetFloat(ShaderUtilities.ID_TextureWidth, tex.width); + // material_references[i].SetFloat(ShaderUtilities.ID_TextureHeight, tex.height); + + // int spread = m_Padding; + // material_references[i].SetFloat(ShaderUtilities.ID_GradientScale, spread); + + // material_references[i].SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + // material_references[i].SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + //} + } + + // Add list of GlyphRects to font asset. + fontAsset.freeGlyphRects = m_FreeGlyphRects; + fontAsset.usedGlyphRects = m_UsedGlyphRects; + + // Save Font Asset creation settings + m_SelectedFontAsset = fontAsset; + m_LegacyFontAsset = null; + fontAsset.creationSettings = SaveFontCreationSettings(); + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(fontAsset)); // Re-import font asset to get the new updated version. + + //EditorUtility.SetDirty(font_asset); + fontAsset.ReadFontAssetDefinition(); + + AssetDatabase.Refresh(); + + m_FontAtlasTexture = null; + + // NEED TO GENERATE AN EVENT TO FORCE A REDRAW OF ANY TEXTMESHPRO INSTANCES THAT MIGHT BE USING THIS FONT ASSET + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + + + void Save_SDF_FontAsset(string filePath) + { + filePath = filePath.Substring(0, filePath.Length - 6); // Trim file extension from filePath. + + string dataPath = Application.dataPath; + + if (filePath.IndexOf(dataPath, System.StringComparison.InvariantCultureIgnoreCase) == -1) + { + Debug.LogError("You're saving the font asset in a directory outside of this project folder. This is not supported. Please select a directory under \"" + dataPath + "\""); + return; + } + + string relativeAssetPath = filePath.Substring(dataPath.Length - 6); + string tex_DirName = Path.GetDirectoryName(relativeAssetPath); + string tex_FileName = Path.GetFileNameWithoutExtension(relativeAssetPath); + string tex_Path_NoExt = tex_DirName + "/" + tex_FileName; + + + // Check if TextMeshPro font asset already exists. If not, create a new one. Otherwise update the existing one. + TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(tex_Path_NoExt + ".asset"); + if (fontAsset == null) + { + //Debug.Log("Creating TextMeshPro font asset!"); + fontAsset = ScriptableObject.CreateInstance(); // Create new TextMeshPro Font Asset. + AssetDatabase.CreateAsset(fontAsset, tex_Path_NoExt + ".asset"); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + // Reference to source font file GUID. + fontAsset.m_SourceFontFile_EditorRef = (Font)m_SourceFontFile; + fontAsset.m_SourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile)); + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortAllTables(); + + // Get and Add Kerning Pairs to Font Asset + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + // Add Font Atlas as Sub-Asset + fontAsset.atlasTextures = new Texture2D[] { m_FontAtlasTexture }; + m_FontAtlasTexture.name = tex_FileName + " Atlas"; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + AssetDatabase.AddObjectToAsset(m_FontAtlasTexture, fontAsset); + + // Create new Material and Add it as Sub-Asset + Shader default_Shader = Shader.Find("TextMeshPro/Distance Field"); + Material tmp_material = new Material(default_Shader); + + tmp_material.name = tex_FileName + " Material"; + tmp_material.SetTexture(ShaderUtilities.ID_MainTex, m_FontAtlasTexture); + tmp_material.SetFloat(ShaderUtilities.ID_TextureWidth, m_FontAtlasTexture.width); + tmp_material.SetFloat(ShaderUtilities.ID_TextureHeight, m_FontAtlasTexture.height); + + int spread = m_Padding + 1; + tmp_material.SetFloat(ShaderUtilities.ID_GradientScale, spread); // Spread = Padding for Brute Force SDF. + + tmp_material.SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + tmp_material.SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + + fontAsset.material = tmp_material; + + AssetDatabase.AddObjectToAsset(tmp_material, fontAsset); + + } + else + { + // Find all Materials referencing this font atlas. + Material[] material_references = TMP_EditorUtility.FindMaterialReferences(fontAsset); + + // Set version number of font asset + fontAsset.version = "1.1.0"; + + // Special handling to remove legacy font asset data + if (fontAsset.m_glyphInfoList != null && fontAsset.m_glyphInfoList.Count > 0) + fontAsset.m_glyphInfoList = null; + + //Set Font Asset Type + fontAsset.atlasRenderMode = m_GlyphRenderMode; + + // Add FaceInfo to Font Asset + fontAsset.faceInfo = m_FaceInfo; + + // Add GlyphInfo[] to Font Asset + fontAsset.glyphTable = m_FontGlyphTable; + + // Add CharacterTable[] to font asset. + fontAsset.characterTable = m_FontCharacterTable; + + // Sort glyph and character tables. + fontAsset.SortAllTables(); + + // Get and Add Kerning Pairs to Font Asset + // TODO: Check and preserve existing adjustment pairs. + if (m_IncludeFontFeatures) + fontAsset.fontFeatureTable = GetKerningTable(); + + // Destroy Assets that will be replaced. + if (fontAsset.atlasTextures != null && fontAsset.atlasTextures.Length > 0) + { + for (int i = 1; i < fontAsset.atlasTextures.Length; i++) + DestroyImmediate(fontAsset.atlasTextures[i], true); + } + + fontAsset.m_AtlasTextureIndex = 0; + fontAsset.atlasWidth = m_AtlasWidth; + fontAsset.atlasHeight = m_AtlasHeight; + fontAsset.atlasPadding = m_Padding; + + // Make sure remaining atlas texture is of the correct size + Texture2D tex = fontAsset.atlasTextures[0]; + tex.name = tex_FileName + " Atlas"; + + // Make texture readable to allow resizing + bool isReadableState = tex.isReadable; + if (isReadableState == false) + FontEngineEditorUtilities.SetAtlasTextureIsReadable(tex, true); + + if (tex.width != m_AtlasWidth || tex.height != m_AtlasHeight) + { + tex.Resize(m_AtlasWidth, m_AtlasHeight); + tex.Apply(); + } + + // Copy new texture data to existing texture + Graphics.CopyTexture(m_FontAtlasTexture, tex); + + // Apply changes to the texture. + tex.Apply(false, !isReadableState); + + // Special handling due to a bug in earlier versions of Unity. + m_FontAtlasTexture.hideFlags = HideFlags.None; + fontAsset.material.hideFlags = HideFlags.None; + + // Update the Texture reference on the Material + for (int i = 0; i < material_references.Length; i++) + { + material_references[i].SetFloat(ShaderUtilities.ID_TextureWidth, tex.width); + material_references[i].SetFloat(ShaderUtilities.ID_TextureHeight, tex.height); + + int spread = m_Padding + 1; + material_references[i].SetFloat(ShaderUtilities.ID_GradientScale, spread); + + material_references[i].SetFloat(ShaderUtilities.ID_WeightNormal, fontAsset.normalStyle); + material_references[i].SetFloat(ShaderUtilities.ID_WeightBold, fontAsset.boldStyle); + } + } + + // Saving File for Debug + //var pngData = destination_Atlas.EncodeToPNG(); + //File.WriteAllBytes("Assets/Textures/Debug Distance Field.png", pngData); + + // Add list of GlyphRects to font asset. + fontAsset.freeGlyphRects = m_FreeGlyphRects; + fontAsset.usedGlyphRects = m_UsedGlyphRects; + + // Save Font Asset creation settings + m_SelectedFontAsset = fontAsset; + m_LegacyFontAsset = null; + fontAsset.creationSettings = SaveFontCreationSettings(); + + AssetDatabase.SaveAssets(); + + AssetDatabase.ImportAsset(AssetDatabase.GetAssetPath(fontAsset)); // Re-import font asset to get the new updated version. + + fontAsset.ReadFontAssetDefinition(); + + AssetDatabase.Refresh(); + + m_FontAtlasTexture = null; + + // NEED TO GENERATE AN EVENT TO FORCE A REDRAW OF ANY TEXTMESHPRO INSTANCES THAT MIGHT BE USING THIS FONT ASSET + TMPro_EventManager.ON_FONT_PROPERTY_CHANGED(true, fontAsset); + } + + + /// + /// Internal method to save the Font Asset Creation Settings + /// + /// + FontAssetCreationSettings SaveFontCreationSettings() + { + FontAssetCreationSettings settings = new FontAssetCreationSettings(); + + //settings.sourceFontFileName = m_SourceFontFile.name; + settings.sourceFontFileGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_SourceFontFile)); + settings.pointSizeSamplingMode = m_PointSizeSamplingMode; + settings.pointSize = m_PointSize; + settings.padding = m_Padding; + settings.packingMode = (int)m_PackingMode; + settings.atlasWidth = m_AtlasWidth; + settings.atlasHeight = m_AtlasHeight; + settings.characterSetSelectionMode = m_CharacterSetSelectionMode; + settings.characterSequence = m_CharacterSequence; + settings.referencedFontAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_ReferencedFontAsset)); + settings.referencedTextAssetGUID = AssetDatabase.AssetPathToGUID(AssetDatabase.GetAssetPath(m_CharactersFromFile)); + //settings.fontStyle = (int)m_FontStyle; + //settings.fontStyleModifier = m_FontStyleValue; + settings.renderMode = (int)m_GlyphRenderMode; + settings.includeFontFeatures = m_IncludeFontFeatures; + + return settings; + } + + + /// + /// Internal method to load the Font Asset Creation Settings + /// + /// + void LoadFontCreationSettings(FontAssetCreationSettings settings) + { + m_SourceFontFile = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(settings.sourceFontFileGUID)); + m_PointSizeSamplingMode = settings.pointSizeSamplingMode; + m_PointSize = settings.pointSize; + m_Padding = settings.padding; + m_PackingMode = (FontPackingModes)settings.packingMode; + m_AtlasWidth = settings.atlasWidth; + m_AtlasHeight = settings.atlasHeight; + m_CharacterSetSelectionMode = settings.characterSetSelectionMode; + m_CharacterSequence = settings.characterSequence; + m_ReferencedFontAsset = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(settings.referencedFontAssetGUID)); + m_CharactersFromFile = AssetDatabase.LoadAssetAtPath(AssetDatabase.GUIDToAssetPath(settings.referencedTextAssetGUID)); + //m_FontStyle = (FaceStyles)settings.fontStyle; + //m_FontStyleValue = settings.fontStyleModifier; + m_GlyphRenderMode = (GlyphRenderMode)settings.renderMode; + m_IncludeFontFeatures = settings.includeFontFeatures; + } + + + /// + /// Save the latest font asset creation settings to EditorPrefs. + /// + /// + void SaveCreationSettingsToEditorPrefs(FontAssetCreationSettings settings) + { + // Create new list if one does not already exist + if (m_FontAssetCreationSettingsContainer == null) + { + m_FontAssetCreationSettingsContainer = new FontAssetCreationSettingsContainer(); + m_FontAssetCreationSettingsContainer.fontAssetCreationSettings = new List(); + } + + // Add new creation settings to the list + m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Add(settings); + + // Since list should only contain the most 4 recent settings, we remove the first element if list exceeds 4 elements. + if (m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count > 4) + m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.RemoveAt(0); + + m_FontAssetCreationSettingsCurrentIndex = m_FontAssetCreationSettingsContainer.fontAssetCreationSettings.Count - 1; + + // Serialize list to JSON + string serializedSettings = JsonUtility.ToJson(m_FontAssetCreationSettingsContainer, true); + + EditorPrefs.SetString(k_FontAssetCreationSettingsContainerKey, serializedSettings); + } + + void DrawPreview() + { + Rect pixelRect; + if (position.width > position.height && position.width > k_TwoColumnControlsWidth) + { + float minSide = Mathf.Min(position.height - 15f, position.width - k_TwoColumnControlsWidth); + + EditorGUILayout.BeginVertical(EditorStyles.helpBox, GUILayout.MaxWidth(minSide)); + + pixelRect = GUILayoutUtility.GetRect(minSide, minSide, GUILayout.ExpandHeight(false), GUILayout.ExpandWidth(false)); + } + else + { + EditorGUILayout.BeginVertical(EditorStyles.helpBox); + + pixelRect = GUILayoutUtility.GetAspectRect(1f); + } + + if (m_FontAtlasTexture != null) + { + EditorGUI.DrawTextureAlpha(pixelRect, m_FontAtlasTexture, ScaleMode.StretchToFill); + } + else if (m_SavedFontAtlas != null) + { + EditorGUI.DrawTextureAlpha(pixelRect, m_SavedFontAtlas, ScaleMode.StretchToFill); + } + + EditorGUILayout.EndVertical(); + } + + + void CheckForLegacyGlyphRenderMode() + { + // Special handling for legacy glyph render mode + if ((int)m_GlyphRenderMode < 0x100) + { + switch ((int)m_GlyphRenderMode) + { + case 0: + m_GlyphRenderMode = GlyphRenderMode.SMOOTH_HINTED; + break; + case 1: + m_GlyphRenderMode = GlyphRenderMode.SMOOTH; + break; + case 2: + m_GlyphRenderMode = GlyphRenderMode.RASTER_HINTED; + break; + case 3: + m_GlyphRenderMode = GlyphRenderMode.RASTER; + break; + case 6: + case 7: + m_GlyphRenderMode = GlyphRenderMode.SDFAA; + break; + } + } + } + + + // Get Kerning Pairs + public TMP_FontFeatureTable GetKerningTable() + { + GlyphPairAdjustmentRecord[] adjustmentRecords = FontEngine.GetGlyphPairAdjustmentTable(m_AvailableGlyphsToAdd.ToArray()); + + if (adjustmentRecords == null) + return null; + + TMP_FontFeatureTable fontFeatureTable = new TMP_FontFeatureTable(); + + for (int i = 0; i < adjustmentRecords.Length && adjustmentRecords[i].firstAdjustmentRecord.glyphIndex != 0; i++) + { + fontFeatureTable.glyphPairAdjustmentRecords.Add(new TMP_GlyphPairAdjustmentRecord(adjustmentRecords[i])); + } + + fontFeatureTable.SortGlyphPairAdjustmentRecords(); + + return fontFeatureTable; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta new file mode 100644 index 0000000..4648857 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontAssetCreatorWindow.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 383966e89d344865a36addd5d378ffd3 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontPlugin.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontPlugin.cs new file mode 100644 index 0000000..3b098ff --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontPlugin.cs @@ -0,0 +1,115 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; +using System; +using System.Runtime.InteropServices; + + +namespace TMPro.EditorUtilities +{ + /* + public class TMPro_FontPlugin + { + [UnmanagedFunctionPointer(CallingConvention.StdCall)] + private delegate void DebugLog(string log); + private static readonly DebugLog debugLog = DebugWrapper; + private static readonly IntPtr functionPointer = Marshal.GetFunctionPointerForDelegate(debugLog); + + private static void DebugWrapper(string log) + { + Debug.Log(log); + } + + public static void LinkDebugLog() + { + LinkDebug(functionPointer); + } + + [DllImport("TMPro_Plugin")] + private static extern void LinkDebug([MarshalAs(UnmanagedType.FunctionPtr)]IntPtr debugCall); + + [DllImport("TMPro_Plugin")] + public static extern + int Initialize_FontEngine(); + + [DllImport("TMPro_Plugin")] + public static extern + int Destroy_FontEngine(); + + [DllImport("TMPro_Plugin")] + public static extern + int Load_TrueType_Font(string fontPath); + + [DllImport("TMPro_Plugin")] + public static extern + int FT_Size_Font(int fontSize); + + [DllImport("TMPro_Plugin")] + public static extern + int Render_Character(byte[] buffer_fill, byte[] buffer_edge, int buffer_width, int buffer_height, int offset, int asc, FaceStyles style, float thickness, RenderModes rasterMode, ref FT_GlyphInfo glyphInfo); + + [DllImport("TMPro_Plugin")] + public static extern + int Render_Characters(byte[] buffer, int buffer_width, int buffer_height, int character_padding, int[] asc_set, int char_count, FaceStyles style, float style_mod, bool autoSize, RenderModes renderMode, int method, ref FT_FaceInfo fontData, FT_GlyphInfo[] Output); + + [DllImport("TMPro_Plugin")] + public static extern + int FT_GetKerningPairs(string fontPath, int[] characterSet, int setCount, FT_KerningPair[] kerningPairs); + + [DllImport("TMPro_Plugin")] + public static extern + float Check_RenderProgress(); + + [DllImport("TMPro_Plugin")] + internal static extern + void SendCancellationRequest(CancellationRequestType request); + } + + public enum FaceStyles { Normal, Bold, Italic, Bold_Italic, Outline, Bold_Sim }; + public enum RenderModes { HintedSmooth = 0, Smooth = 1, RasterHinted = 2, Raster = 3, DistanceField16 = 6, DistanceField32 = 7 }; // SignedDistanceField64 = 8 + + internal enum CancellationRequestType : byte { None = 0x0, CancelInProgess = 0x1, WindowClosed = 0x2 }; + + [StructLayout(LayoutKind.Sequential)] + public struct FT_KerningPair + { + public int ascII_Left; + public int ascII_Right; + public float xAdvanceOffset; + } + + + [StructLayout(LayoutKind.Sequential)] + public struct FT_GlyphInfo + { + public int id; + public float x; + public float y; + public float width; + public float height; + public float xOffset; + public float yOffset; + public float xAdvance; + } + + + [StructLayout(LayoutKind.Sequential)] + public struct FT_FaceInfo + { + [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 64)] + public string name; + public int pointSize; + public int padding; + public float lineHeight; + public float baseline; + public float ascender; + public float descender; + public float centerLine; + public float underline; + public float underlineThickness; + public int characterCount; + public int atlasWidth; + public int atlasHeight; + } + */ +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontPlugin.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontPlugin.cs.meta new file mode 100644 index 0000000..66f3a87 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_FontPlugin.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 9edc9283e7d6409fab242fe8fb6a822c +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_SortingLayerHelper.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_SortingLayerHelper.cs new file mode 100644 index 0000000..c36f9f8 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_SortingLayerHelper.cs @@ -0,0 +1,32 @@ +using UnityEngine; + + +namespace TMPro +{ + // Helpers used by the different sorting layer classes. + public static class SortingLayerHelper + { + // Gets an array of sorting layer names. + public static string[] sortingLayerNames + { + get + { + return GetSortingLayerNames(); + } + } + + static string[] GetSortingLayerNames() + { + int layerCount = SortingLayer.layers.Length; + + string[] layerNames = new string[layerCount]; + + for (int i = 0; i < layerCount; i++) + { + layerNames[i] = SortingLayer.layers[i].name; + } + + return layerNames; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta new file mode 100644 index 0000000..9d902b9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_SortingLayerHelper.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 88ed537c17c34f339121fe9a7d6d7a0e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TextContainerEditor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TextContainerEditor.cs new file mode 100644 index 0000000..09fc617 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TextContainerEditor.cs @@ -0,0 +1,235 @@ +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + [CustomEditor(typeof(TextContainer)), CanEditMultipleObjects] + public class TMPro_TextContainerEditor : Editor + { + + // Serialized Properties + private SerializedProperty anchorPosition_prop; + private SerializedProperty pivot_prop; + private SerializedProperty rectangle_prop; + private SerializedProperty margins_prop; + + + private TextContainer m_textContainer; + //private Transform m_transform; + //private Vector3[] m_Rect_handlePoints = new Vector3[4]; + //private Vector3[] m_Margin_handlePoints = new Vector3[4]; + + //private Vector2 m_anchorPosition; + + //private Vector3 m_mousePreviousPOS; + //private Vector2 m_previousStartPOS; + //private int m_mouseDragFlag = 0; + + //private static Transform m_visualHelper; + + + void OnEnable() + { + + // Serialized Properties + anchorPosition_prop = serializedObject.FindProperty("m_anchorPosition"); + pivot_prop = serializedObject.FindProperty("m_pivot"); + rectangle_prop = serializedObject.FindProperty("m_rect"); + margins_prop = serializedObject.FindProperty("m_margins"); + + m_textContainer = (TextContainer)target; + //m_transform = m_textContainer.transform; + + + /* + if (m_visualHelper == null) + { + m_visualHelper = GameObject.CreatePrimitive(PrimitiveType.Sphere).transform; + m_visualHelper.localScale = new Vector3(0.25f, 0.25f, 0.25f); + } + */ + } + + void OnDisable() + { + /* + if (m_visualHelper != null) + DestroyImmediate (m_visualHelper.gameObject); + */ + } + + + + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(anchorPosition_prop); + if (anchorPosition_prop.enumValueIndex == 9) + { + EditorGUI.indentLevel += 1; + EditorGUILayout.PropertyField(pivot_prop, new GUIContent("Pivot Position")); + EditorGUI.indentLevel -= 1; + } + + + DrawDimensionProperty(rectangle_prop, "Dimensions"); + DrawMaginProperty(margins_prop, "Margins"); + if (EditorGUI.EndChangeCheck()) + { + // Re-compute pivot position when changes are made. + if (anchorPosition_prop.enumValueIndex != 9) + pivot_prop.vector2Value = GetAnchorPosition(anchorPosition_prop.enumValueIndex); + + m_textContainer.hasChanged = true; + } + + serializedObject.ApplyModifiedProperties(); + + EditorGUILayout.Space(); + } + + + private void DrawDimensionProperty(SerializedProperty property, string label) + { + float old_LabelWidth = EditorGUIUtility.labelWidth; + float old_FieldWidth = EditorGUIUtility.fieldWidth; + + Rect rect = EditorGUILayout.GetControlRect(false, 18); + Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18); + + float width = rect.width + 3; + pos0.width = old_LabelWidth; + GUI.Label(pos0, label); + + Rect rectangle = property.rectValue; + + float width_B = width - old_LabelWidth; + float fieldWidth = width_B / 4; + pos0.width = fieldWidth - 5; + + pos0.x = old_LabelWidth + 15; + GUI.Label(pos0, "Width"); + + pos0.x += fieldWidth; + rectangle.width = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.width); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Height"); + + pos0.x += fieldWidth; + rectangle.height = EditorGUI.FloatField(pos0, GUIContent.none, rectangle.height); + + property.rectValue = rectangle; + EditorGUIUtility.labelWidth = old_LabelWidth; + EditorGUIUtility.fieldWidth = old_FieldWidth; + } + + + private void DrawMaginProperty(SerializedProperty property, string label) + { + float old_LabelWidth = EditorGUIUtility.labelWidth; + float old_FieldWidth = EditorGUIUtility.fieldWidth; + + Rect rect = EditorGUILayout.GetControlRect(false, 2 * 18); + Rect pos0 = new Rect(rect.x, rect.y + 2, rect.width, 18); + + float width = rect.width + 3; + pos0.width = old_LabelWidth; + GUI.Label(pos0, label); + + //Vector4 vec = property.vector4Value; + Vector4 vec = Vector4.zero; + vec.x = property.FindPropertyRelative("x").floatValue; + vec.y = property.FindPropertyRelative("y").floatValue; + vec.z = property.FindPropertyRelative("z").floatValue; + vec.w = property.FindPropertyRelative("w").floatValue; + + + float widthB = width - old_LabelWidth; + float fieldWidth = widthB / 4; + pos0.width = fieldWidth - 5; + + // Labels + pos0.x = old_LabelWidth + 15; + GUI.Label(pos0, "Left"); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Top"); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Right"); + + pos0.x += fieldWidth; + GUI.Label(pos0, "Bottom"); + + pos0.y += 18; + + pos0.x = old_LabelWidth + 15; + vec.x = EditorGUI.FloatField(pos0, GUIContent.none, vec.x); + + pos0.x += fieldWidth; + vec.y = EditorGUI.FloatField(pos0, GUIContent.none, vec.y); + + pos0.x += fieldWidth; + vec.z = EditorGUI.FloatField(pos0, GUIContent.none, vec.z); + + pos0.x += fieldWidth; + vec.w = EditorGUI.FloatField(pos0, GUIContent.none, vec.w); + + //property.vector4Value = vec; + property.FindPropertyRelative("x").floatValue = vec.x; + property.FindPropertyRelative("y").floatValue = vec.y; + property.FindPropertyRelative("z").floatValue = vec.z; + property.FindPropertyRelative("w").floatValue = vec.w; + + EditorGUIUtility.labelWidth = old_LabelWidth; + EditorGUIUtility.fieldWidth = old_FieldWidth; + } + + + Vector2 GetAnchorPosition(int index) + { + Vector2 anchorPosition = Vector2.zero; + + switch (index) + { + case 0: // TOP LEFT + anchorPosition = new Vector2(0, 1); + break; + case 1: // TOP + anchorPosition = new Vector2(0.5f, 1); + break; + case 2: // TOP RIGHT + anchorPosition = new Vector2(1, 1); + break; + case 3: // LEFT + anchorPosition = new Vector2(0, 0.5f); + break; + case 4: // MIDDLE + anchorPosition = new Vector2(0.5f, 0.5f); + break; + case 5: // RIGHT + anchorPosition = new Vector2(1, 0.5f); + break; + case 6: // BOTTOM LEFT + anchorPosition = new Vector2(0, 0); + break; + case 7: // BOTTOM + anchorPosition = new Vector2(0.5f, 0); + break; + case 8: // BOTTOM RIGHT + anchorPosition = new Vector2(1, 0); + break; + } + + return anchorPosition; + } + + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta new file mode 100644 index 0000000..bad7881 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TextContainerEditor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 02893ffb522b490a9fa28eedd2584309 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TexturePostProcessor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TexturePostProcessor.cs new file mode 100644 index 0000000..b822d47 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TexturePostProcessor.cs @@ -0,0 +1,91 @@ +using System; +using UnityEngine; +using UnityEditor; +using System.Collections; + + +namespace TMPro.EditorUtilities +{ + + public class TMPro_TexturePostProcessor : AssetPostprocessor + { + void OnPostprocessTexture(Texture2D texture) + { + Texture2D tex = AssetDatabase.LoadAssetAtPath(assetPath, typeof(Texture2D)) as Texture2D; + + // Send Event Sub Objects + if (tex != null) + TMPro_EventManager.ON_SPRITE_ASSET_PROPERTY_CHANGED(true, tex); + } + } + + /// + /// Asset post processor used to handle font assets getting updated outside of the Unity editor. + /// + class FontAssetPostProcessor : AssetPostprocessor + { + private static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + { + foreach (var asset in importedAssets) + { + if (AssetDatabase.GetMainAssetTypeAtPath(asset) == typeof(TMP_FontAsset)) + { + TMP_FontAsset fontAsset = AssetDatabase.LoadAssetAtPath(asset, typeof(TMP_FontAsset)) as TMP_FontAsset; + + if (fontAsset != null) + TMP_EditorResourceManager.RegisterFontAssetForDefinitionRefresh(fontAsset); + } + } + } + } + + //public class TMPro_PackageImportPostProcessor : AssetPostprocessor + //{ + // static void OnPostprocessAllAssets(string[] importedAssets, string[] deletedAssets, string[] movedAssets, string[] movedFromAssetPaths) + // { + // for (int i = 0; i < importedAssets.Length; i++) + // { + // if (importedAssets[i].Contains("TextMesh Pro/Resources/TMP Settings.asset")) + // { + // Debug.Log("New TMP Settings file was just imported."); + + // // TMP Settings file was just re-imported. + // // Check if project already contains + // } + + + // if (importedAssets[i].Contains("com.unity.TextMeshPro/Examples")) + // { + // //Debug.Log("New TMP Examples folder was just imported."); + // } + + // //Debug.Log("[" + importedAssets[i] + "] was just imported."); + // } + + + + // //for (int i = 0; i < deletedAssets.Length; i++) + // //{ + // // if (deletedAssets[i] == "Assets/TextMesh Pro") + // // { + // // //Debug.Log("Asset [" + deletedAssets[i] + "] has been deleted."); + // // string currentBuildSettings = PlayerSettings.GetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup); + + // // //Check for and inject TMP_PRESENT + // // if (currentBuildSettings.Contains("TMP_PRESENT;")) + // // { + // // currentBuildSettings = currentBuildSettings.Replace("TMP_PRESENT;", ""); + + // // PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings); + // // } + // // else if (currentBuildSettings.Contains("TMP_PRESENT")) + // // { + // // currentBuildSettings = currentBuildSettings.Replace("TMP_PRESENT", ""); + + // // PlayerSettings.SetScriptingDefineSymbolsForGroup(EditorUserBuildSettings.selectedBuildTargetGroup, currentBuildSettings); + // // } + // // } + // //} + // } + //} +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta new file mode 100644 index 0000000..fb00b80 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/TMPro_TexturePostProcessor.cs.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f4935fb862d54980b1bcbca942962642 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef new file mode 100644 index 0000000..437e221 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef @@ -0,0 +1,11 @@ +{ + "name": "Unity.TextMeshPro.Editor", + "references": [ + "Unity.TextMeshPro" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [] +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta new file mode 100644 index 0000000..6ed76ad --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Editor/Unity.TextMeshPro.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6546d7765b4165b40850b3667f981c26 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime.meta new file mode 100644 index 0000000..4b24415 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5fc988a1d5b04aee9a5222502b201a45 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/AssemblyInfo.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/AssemblyInfo.cs new file mode 100644 index 0000000..5278493 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/AssemblyInfo.cs @@ -0,0 +1,11 @@ +using System.Runtime.CompilerServices; + +// Allow internal visibility for testing purposes. +[assembly: InternalsVisibleTo("Unity.TextCore")] + +[assembly: InternalsVisibleTo("Unity.FontEngine.Tests")] + +#if UNITY_EDITOR +[assembly: InternalsVisibleTo("Unity.TextCore.Editor")] +[assembly: InternalsVisibleTo("Unity.TextMeshPro.Editor")] +#endif diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/AssemblyInfo.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/AssemblyInfo.cs.meta new file mode 100644 index 0000000..cd52706 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1c147d10db452eb4b854a35f84472017 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/FastAction.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/FastAction.cs new file mode 100644 index 0000000..62b378d --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/FastAction.cs @@ -0,0 +1,150 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro +{ + public class FastAction + { + + LinkedList delegates = new LinkedList(); + + Dictionary> lookup = new Dictionary>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + LinkedListNode node; + if (lookup.TryGetValue(rhs, out node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call() + { + var node = delegates.First; + while (node != null) + { + node.Value(); + node = node.Next; + } + } + } + + + public class FastAction + { + + LinkedList> delegates = new LinkedList>(); + + Dictionary, LinkedListNode>> lookup = new Dictionary, LinkedListNode>>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + LinkedListNode> node; + if (lookup.TryGetValue(rhs, out node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call(A a) + { + var node = delegates.First; + while (node != null) + { + node.Value(a); + node = node.Next; + } + } + } + + + public class FastAction + { + + LinkedList> delegates = new LinkedList>(); + + Dictionary, LinkedListNode>> lookup = new Dictionary, LinkedListNode>>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + LinkedListNode> node; + if (lookup.TryGetValue(rhs, out node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call(A a, B b) + { + var node = delegates.First; + while (node != null) + { + node.Value(a, b); + node = node.Next; + } + } + } + + + public class FastAction + { + + LinkedList> delegates = new LinkedList>(); + + Dictionary, LinkedListNode>> lookup = new Dictionary, LinkedListNode>>(); + + public void Add(System.Action rhs) + { + if (lookup.ContainsKey(rhs)) return; + + lookup[rhs] = delegates.AddLast(rhs); + } + + public void Remove(System.Action rhs) + { + LinkedListNode> node; + if (lookup.TryGetValue(rhs, out node)) + { + lookup.Remove(rhs); + delegates.Remove(node); + } + } + + public void Call(A a, B b, C c) + { + var node = delegates.First; + while (node != null) + { + node.Value(a, b, c); + node = node.Next; + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/FastAction.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/FastAction.cs.meta new file mode 100644 index 0000000..fcd991e --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/FastAction.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 871f8edd56e84b8fb295b10cc3c78f36 +timeCreated: 1435956061 +licenseType: Store +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/ITextPreProcessor.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/ITextPreProcessor.cs new file mode 100644 index 0000000..5d3f57a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/ITextPreProcessor.cs @@ -0,0 +1,17 @@ + + +namespace TMPro +{ + /// + /// Interface used for preprocessing and shaping of text. + /// + public interface ITextPreprocessor + { + /// + /// Function used for preprocessing of text + /// + /// Source text to be processed + /// Processed text + string PreprocessText(string text); + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/ITextPreProcessor.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/ITextPreProcessor.cs.meta new file mode 100644 index 0000000..8dd7083 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/ITextPreProcessor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afc31ad767318c9488de260c166cd21d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/MaterialReferenceManager.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/MaterialReferenceManager.cs new file mode 100644 index 0000000..c1e05e9 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/MaterialReferenceManager.cs @@ -0,0 +1,652 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + + +namespace TMPro +{ + + public class MaterialReferenceManager + { + private static MaterialReferenceManager s_Instance; + + // Dictionaries used to track Asset references. + private Dictionary m_FontMaterialReferenceLookup = new Dictionary(); + private Dictionary m_FontAssetReferenceLookup = new Dictionary(); + private Dictionary m_SpriteAssetReferenceLookup = new Dictionary(); + private Dictionary m_ColorGradientReferenceLookup = new Dictionary(); + + + /// + /// Get a singleton instance of the registry + /// + public static MaterialReferenceManager instance + { + get + { + if (MaterialReferenceManager.s_Instance == null) + MaterialReferenceManager.s_Instance = new MaterialReferenceManager(); + return MaterialReferenceManager.s_Instance; + } + } + + + + /// + /// Add new font asset reference to dictionary. + /// + /// + public static void AddFontAsset(TMP_FontAsset fontAsset) + { + MaterialReferenceManager.instance.AddFontAssetInternal(fontAsset); + } + + /// + /// Add new Font Asset reference to dictionary. + /// + /// + private void AddFontAssetInternal(TMP_FontAsset fontAsset) + { + if (m_FontAssetReferenceLookup.ContainsKey(fontAsset.hashCode)) return; + + // Add reference to the font asset. + m_FontAssetReferenceLookup.Add(fontAsset.hashCode, fontAsset); + + // Add reference to the font material. + m_FontMaterialReferenceLookup.Add(fontAsset.materialHashCode, fontAsset.material); + } + + + + /// + /// Add new Sprite Asset to dictionary. + /// + /// + /// + public static void AddSpriteAsset(TMP_SpriteAsset spriteAsset) + { + MaterialReferenceManager.instance.AddSpriteAssetInternal(spriteAsset); + } + + /// + /// Internal method to add a new sprite asset to the dictionary. + /// + /// + /// + private void AddSpriteAssetInternal(TMP_SpriteAsset spriteAsset) + { + if (m_SpriteAssetReferenceLookup.ContainsKey(spriteAsset.hashCode)) return; + + // Add reference to sprite asset. + m_SpriteAssetReferenceLookup.Add(spriteAsset.hashCode, spriteAsset); + + // Adding reference to the sprite asset material as well + m_FontMaterialReferenceLookup.Add(spriteAsset.hashCode, spriteAsset.material); + } + + /// + /// Add new Sprite Asset to dictionary. + /// + /// + /// + public static void AddSpriteAsset(int hashCode, TMP_SpriteAsset spriteAsset) + { + MaterialReferenceManager.instance.AddSpriteAssetInternal(hashCode, spriteAsset); + } + + /// + /// Internal method to add a new sprite asset to the dictionary. + /// + /// + /// + private void AddSpriteAssetInternal(int hashCode, TMP_SpriteAsset spriteAsset) + { + if (m_SpriteAssetReferenceLookup.ContainsKey(hashCode)) return; + + // Add reference to Sprite Asset. + m_SpriteAssetReferenceLookup.Add(hashCode, spriteAsset); + + // Add reference to Sprite Asset using the asset hashcode. + m_FontMaterialReferenceLookup.Add(hashCode, spriteAsset.material); + + // Compatibility check + if (spriteAsset.hashCode == 0) spriteAsset.hashCode = hashCode; + } + + + /// + /// Add new Material reference to dictionary. + /// + /// + /// + public static void AddFontMaterial(int hashCode, Material material) + { + MaterialReferenceManager.instance.AddFontMaterialInternal(hashCode, material); + } + + /// + /// Add new material reference to dictionary. + /// + /// + /// + private void AddFontMaterialInternal(int hashCode, Material material) + { + // Since this function is called after checking if the material is + // contained in the dictionary, there is no need to check again. + m_FontMaterialReferenceLookup.Add(hashCode, material); + } + + + /// + /// Add new Color Gradient Preset to dictionary. + /// + /// + /// + public static void AddColorGradientPreset(int hashCode, TMP_ColorGradient spriteAsset) + { + MaterialReferenceManager.instance.AddColorGradientPreset_Internal(hashCode, spriteAsset); + } + + /// + /// Internal method to add a new Color Gradient Preset to the dictionary. + /// + /// + /// + private void AddColorGradientPreset_Internal(int hashCode, TMP_ColorGradient spriteAsset) + { + if (m_ColorGradientReferenceLookup.ContainsKey(hashCode)) return; + + // Add reference to Color Gradient Preset Asset. + m_ColorGradientReferenceLookup.Add(hashCode, spriteAsset); + } + + + + /// + /// Add new material reference and return the index of this new reference in the materialReferences array. + /// + /// + /// + /// + //public int AddMaterial(Material material, int materialHashCode, TMP_FontAsset fontAsset) + //{ + // if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode)) + // { + // int index = m_MaterialReferenceLookup.Count; + + // materialReferences[index].fontAsset = fontAsset; + // materialReferences[index].material = material; + // materialReferences[index].isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false; + // materialReferences[index].index = index; + // materialReferences[index].referenceCount = 0; + + // m_MaterialReferenceLookup[materialHashCode] = index; + + // // Compute Padding value and store it + // // TODO + + // int fontAssetHashCode = fontAsset.hashCode; + + // if (!m_FontAssetReferenceLookup.ContainsKey(fontAssetHashCode)) + // m_FontAssetReferenceLookup.Add(fontAssetHashCode, fontAsset); + + // m_countInternal += 1; + + // return index; + // } + // else + // { + // return m_MaterialReferenceLookup[materialHashCode]; + // } + //} + + + /// + /// Add new material reference and return the index of this new reference in the materialReferences array. + /// + /// + /// + /// + /// + //public int AddMaterial(Material material, int materialHashCode, TMP_SpriteAsset spriteAsset) + //{ + // if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode)) + // { + // int index = m_MaterialReferenceLookup.Count; + + // materialReferences[index].fontAsset = materialReferences[0].fontAsset; + // materialReferences[index].spriteAsset = spriteAsset; + // materialReferences[index].material = material; + // materialReferences[index].isDefaultMaterial = true; + // materialReferences[index].index = index; + // materialReferences[index].referenceCount = 0; + + // m_MaterialReferenceLookup[materialHashCode] = index; + + // int spriteAssetHashCode = spriteAsset.hashCode; + + // if (!m_SpriteAssetReferenceLookup.ContainsKey(spriteAssetHashCode)) + // m_SpriteAssetReferenceLookup.Add(spriteAssetHashCode, spriteAsset); + + // m_countInternal += 1; + + // return index; + // } + // else + // { + // return m_MaterialReferenceLookup[materialHashCode]; + // } + //} + + + /// + /// Function to check if the font asset is already referenced. + /// + /// + /// + public bool Contains(TMP_FontAsset font) + { + if (m_FontAssetReferenceLookup.ContainsKey(font.hashCode)) + return true; + + return false; + } + + + /// + /// Function to check if the sprite asset is already referenced. + /// + /// + /// + public bool Contains(TMP_SpriteAsset sprite) + { + if (m_FontAssetReferenceLookup.ContainsKey(sprite.hashCode)) + return true; + + return false; + } + + + + /// + /// Function returning the Font Asset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetFontAsset(int hashCode, out TMP_FontAsset fontAsset) + { + return MaterialReferenceManager.instance.TryGetFontAssetInternal(hashCode, out fontAsset); + } + + /// + /// Internal Function returning the Font Asset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetFontAssetInternal(int hashCode, out TMP_FontAsset fontAsset) + { + fontAsset = null; + + if (m_FontAssetReferenceLookup.TryGetValue(hashCode, out fontAsset)) + { + return true; + } + + return false; + } + + + + /// + /// Function returning the Sprite Asset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetSpriteAsset(int hashCode, out TMP_SpriteAsset spriteAsset) + { + return MaterialReferenceManager.instance.TryGetSpriteAssetInternal(hashCode, out spriteAsset); + } + + /// + /// Internal function returning the Sprite Asset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetSpriteAssetInternal(int hashCode, out TMP_SpriteAsset spriteAsset) + { + spriteAsset = null; + + if (m_SpriteAssetReferenceLookup.TryGetValue(hashCode, out spriteAsset)) + { + return true; + } + + return false; + } + + + /// + /// Function returning the Color Gradient Preset corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetColorGradientPreset(int hashCode, out TMP_ColorGradient gradientPreset) + { + return MaterialReferenceManager.instance.TryGetColorGradientPresetInternal(hashCode, out gradientPreset); + } + + /// + /// Internal function returning the Color Gradient Preset corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetColorGradientPresetInternal(int hashCode, out TMP_ColorGradient gradientPreset) + { + gradientPreset = null; + + if (m_ColorGradientReferenceLookup.TryGetValue(hashCode, out gradientPreset)) + { + return true; + } + + return false; + } + + + /// + /// Function returning the Font Material corresponding to the provided hash code. + /// + /// + /// + /// + public static bool TryGetMaterial(int hashCode, out Material material) + { + return MaterialReferenceManager.instance.TryGetMaterialInternal(hashCode, out material); + } + + /// + /// Internal function returning the Font Material corresponding to the provided hash code. + /// + /// + /// + /// + private bool TryGetMaterialInternal(int hashCode, out Material material) + { + material = null; + + if (m_FontMaterialReferenceLookup.TryGetValue(hashCode, out material)) + { + return true; + } + + return false; + } + + + /// + /// Function to lookup a material based on hash code and returning the MaterialReference containing this material. + /// + /// + /// + /// + //public bool TryGetMaterial(int hashCode, out MaterialReference materialReference) + //{ + // int materialIndex = -1; + + // if (m_MaterialReferenceLookup.TryGetValue(hashCode, out materialIndex)) + // { + // materialReference = materialReferences[materialIndex]; + + // return true; + // } + + // materialReference = new MaterialReference(); + + // return false; + //} + + + + /// + /// + /// + /// + /// + //public int GetMaterialIndex(TMP_FontAsset fontAsset) + //{ + // if (m_MaterialReferenceLookup.ContainsKey(fontAsset.materialHashCode)) + // return m_MaterialReferenceLookup[fontAsset.materialHashCode]; + + // return -1; + //} + + + /// + /// + /// + /// + /// + //public TMP_FontAsset GetFontAsset(int index) + //{ + // if (index >= 0 && index < materialReferences.Length) + // return materialReferences[index].fontAsset; + + // return null; + //} + + + /// + /// + /// + /// + /// + /// + //public void SetDefaultMaterial(Material material, int materialHashCode, TMP_FontAsset fontAsset) + //{ + // if (!m_MaterialReferenceLookup.ContainsKey(materialHashCode)) + // { + // materialReferences[0].fontAsset = fontAsset; + // materialReferences[0].material = material; + // materialReferences[0].index = 0; + // materialReferences[0].isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false; + // materialReferences[0].referenceCount = 0; + // m_MaterialReferenceLookup[materialHashCode] = 0; + + // // Compute Padding value and store it + // // TODO + + // int fontHashCode = fontAsset.hashCode; + + // if (!m_FontAssetReferenceLookup.ContainsKey(fontHashCode)) + // m_FontAssetReferenceLookup.Add(fontHashCode, fontAsset); + // } + // else + // { + // materialReferences[0].fontAsset = fontAsset; + // materialReferences[0].material = material; + // materialReferences[0].index = 0; + // materialReferences[0].referenceCount = 0; + // m_MaterialReferenceLookup[materialHashCode] = 0; + // } + // // Compute padding + // // TODO + + // m_countInternal = 1; + //} + + + + /// + /// + /// + //public void Clear() + //{ + // //m_currentIndex = 0; + // m_MaterialReferenceLookup.Clear(); + // m_SpriteAssetReferenceLookup.Clear(); + // m_FontAssetReferenceLookup.Clear(); + //} + + + /// + /// Function to clear the reference count for each of the material references. + /// + //public void ClearReferenceCount() + //{ + // m_countInternal = 0; + + // for (int i = 0; i < materialReferences.Length; i++) + // { + // if (materialReferences[i].fontAsset == null) + // return; + + // materialReferences[i].referenceCount = 0; + // } + //} + + } + + + public struct TMP_MaterialReference + { + public Material material; + public int referenceCount; + } + + + public struct MaterialReference + { + + public int index; + public TMP_FontAsset fontAsset; + public TMP_SpriteAsset spriteAsset; + public Material material; + public bool isDefaultMaterial; + public bool isFallbackMaterial; + public Material fallbackMaterial; + public float padding; + public int referenceCount; + + + /// + /// Constructor for new Material Reference. + /// + /// + /// + /// + /// + /// + public MaterialReference(int index, TMP_FontAsset fontAsset, TMP_SpriteAsset spriteAsset, Material material, float padding) + { + this.index = index; + this.fontAsset = fontAsset; + this.spriteAsset = spriteAsset; + this.material = material; + this.isDefaultMaterial = material.GetInstanceID() == fontAsset.material.GetInstanceID() ? true : false; + this.isFallbackMaterial = false; + this.fallbackMaterial = null; + this.padding = padding; + this.referenceCount = 0; + } + + + /// + /// Function to check if a certain font asset is contained in the material reference array. + /// + /// + /// + /// + public static bool Contains(MaterialReference[] materialReferences, TMP_FontAsset fontAsset) + { + int id = fontAsset.GetInstanceID(); + + for (int i = 0; i < materialReferences.Length && materialReferences[i].fontAsset != null; i++) + { + if (materialReferences[i].fontAsset.GetInstanceID() == id) + return true; + } + + return false; + } + + + /// + /// Function to add a new material reference and returning its index in the material reference array. + /// + /// + /// + /// + /// + /// + public static int AddMaterialReference(Material material, TMP_FontAsset fontAsset, MaterialReference[] materialReferences, Dictionary materialReferenceIndexLookup) + { + int materialID = material.GetInstanceID(); + int index; + + if (materialReferenceIndexLookup.TryGetValue(materialID, out index)) + { + return index; + } + else + { + index = materialReferenceIndexLookup.Count; + + // Add new reference index + materialReferenceIndexLookup[materialID] = index; + + materialReferences[index].index = index; + materialReferences[index].fontAsset = fontAsset; + materialReferences[index].spriteAsset = null; + materialReferences[index].material = material; + materialReferences[index].isDefaultMaterial = materialID == fontAsset.material.GetInstanceID() ? true : false; + //materialReferences[index].padding = 0; + materialReferences[index].referenceCount = 0; + + return index; + } + } + + + /// + /// + /// + /// + /// + /// + /// + /// + public static int AddMaterialReference(Material material, TMP_SpriteAsset spriteAsset, MaterialReference[] materialReferences, Dictionary materialReferenceIndexLookup) + { + int materialID = material.GetInstanceID(); + int index; + + if (materialReferenceIndexLookup.TryGetValue(materialID, out index)) + { + return index; + } + else + { + index = materialReferenceIndexLookup.Count; + + // Add new reference index + materialReferenceIndexLookup[materialID] = index; + + materialReferences[index].index = index; + materialReferences[index].fontAsset = materialReferences[0].fontAsset; + materialReferences[index].spriteAsset = spriteAsset; + materialReferences[index].material = material; + materialReferences[index].isDefaultMaterial = true; + //materialReferences[index].padding = 0; + materialReferences[index].referenceCount = 0; + + return index; + } + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/MaterialReferenceManager.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/MaterialReferenceManager.cs.meta new file mode 100644 index 0000000..17ad566 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/MaterialReferenceManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 11a6a034ab84493cbed6af5ae7aae78b +timeCreated: 1449743129 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Asset.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Asset.cs new file mode 100644 index 0000000..60ed878 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Asset.cs @@ -0,0 +1,42 @@ +using System; +using UnityEngine; + +namespace TMPro +{ + + // Base class inherited by the various TextMeshPro Assets. + [Serializable] + public abstract class TMP_Asset : ScriptableObject + { + /// + /// Instance ID of the TMP Asset + /// + public int instanceID + { + get + { + if (m_InstanceID == 0) + m_InstanceID = GetInstanceID(); + + return m_InstanceID; + } + } + private int m_InstanceID; + + /// + /// HashCode based on the name of the asset. + /// + public int hashCode; + + /// + /// The material used by this asset. + /// + public Material material; + + /// + /// HashCode based on the name of the material assigned to this asset. + /// + public int materialHashCode; + + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Asset.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Asset.cs.meta new file mode 100644 index 0000000..62e9ee7 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Asset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3bda1886f58f4e0ab1139400b160c3ee +timeCreated: 1459318952 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Character.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Character.cs new file mode 100644 index 0000000..6b4cc83 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Character.cs @@ -0,0 +1,70 @@ +using System; +using UnityEngine.TextCore; + +namespace TMPro +{ + /// + /// A basic element of text. + /// + [Serializable] + public class TMP_Character : TMP_TextElement + { + /// + /// Default constructor. + /// + public TMP_Character() + { + m_ElementType = TextElementType.Character; + this.scale = 1.0f; + } + + /// + /// Constructor for new character + /// + /// Unicode value. + /// Glyph + public TMP_Character(uint unicode, Glyph glyph) + { + m_ElementType = TextElementType.Character; + + this.unicode = unicode; + this.textAsset = null; + this.glyph = glyph; + this.glyphIndex = glyph.index; + this.scale = 1.0f; + } + + /// + /// Constructor for new character + /// + /// Unicode value. + /// The font asset to which this character belongs. + /// Glyph + public TMP_Character(uint unicode, TMP_FontAsset fontAsset, Glyph glyph) + { + m_ElementType = TextElementType.Character; + + this.unicode = unicode; + this.textAsset = fontAsset; + this.glyph = glyph; + this.glyphIndex = glyph.index; + this.scale = 1.0f; + } + + /// + /// Constructor for new character + /// + /// Unicode value. + /// Glyph index. + internal TMP_Character(uint unicode, uint glyphIndex) + { + m_ElementType = TextElementType.Character; + + this.unicode = unicode; + this.textAsset = null; + this.glyph = null; + this.glyphIndex = glyphIndex; + this.scale = 1.0f; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Character.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Character.cs.meta new file mode 100644 index 0000000..55aea1b --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Character.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ac5b6a65aaeb59478e3b78660e9f134 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CharacterInfo.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CharacterInfo.cs new file mode 100644 index 0000000..2a919f6 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CharacterInfo.cs @@ -0,0 +1,220 @@ +using System.Diagnostics; +using UnityEngine; + + +namespace TMPro +{ + public struct TMP_Vertex + { + public Vector3 position; + public Vector2 uv; + public Vector2 uv2; + public Vector2 uv4; + public Color32 color; + + public static TMP_Vertex zero { get { return k_Zero; } } + + //public Vector3 normal; + //public Vector4 tangent; + + static readonly TMP_Vertex k_Zero = new TMP_Vertex(); + } + + /// + /// + /// + public struct TMP_Offset + { + public float left { get { return m_Left; } set { m_Left = value; } } + + public float right { get { return m_Right; } set { m_Right = value; } } + + public float top { get { return m_Top; } set { m_Top = value; } } + + public float bottom { get { return m_Bottom; } set { m_Bottom = value; } } + + public float horizontal { get { return m_Left; } set { m_Left = value; m_Right = value; } } + + public float vertical { get { return m_Top; } set { m_Top = value; m_Bottom = value; } } + + /// + /// + /// + public static TMP_Offset zero { get { return k_ZeroOffset; } } + + // ============================================= + // Private backing fields for public properties. + // ============================================= + + float m_Left; + float m_Right; + float m_Top; + float m_Bottom; + + static readonly TMP_Offset k_ZeroOffset = new TMP_Offset(0F, 0F, 0F, 0F); + + /// + /// + /// + /// + /// + /// + /// + public TMP_Offset(float left, float right, float top, float bottom) + { + m_Left = left; + m_Right = right; + m_Top = top; + m_Bottom = bottom; + } + + /// + /// + /// + /// + /// + public TMP_Offset(float horizontal, float vertical) + { + m_Left = horizontal; + m_Right = horizontal; + m_Top = vertical; + m_Bottom = vertical; + } + + public static bool operator ==(TMP_Offset lhs, TMP_Offset rhs) + { + return lhs.m_Left == rhs.m_Left && + lhs.m_Right == rhs.m_Right && + lhs.m_Top == rhs.m_Top && + lhs.m_Bottom == rhs.m_Bottom; + } + + public static bool operator !=(TMP_Offset lhs, TMP_Offset rhs) + { + return !(lhs == rhs); + } + + public static TMP_Offset operator *(TMP_Offset a, float b) + { + return new TMP_Offset(a.m_Left * b, a.m_Right * b, a.m_Top * b, a.m_Bottom * b); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override bool Equals(object obj) + { + return base.Equals(obj); + } + + public bool Equals(TMP_Offset other) + { + return base.Equals(other); + } + } + + + /// + /// + /// + public struct HighlightState + { + public Color32 color; + public TMP_Offset padding; + + public HighlightState(Color32 color, TMP_Offset padding) + { + this.color = color; + this.padding = padding; + } + + public static bool operator ==(HighlightState lhs, HighlightState rhs) + { + return lhs.color.Compare(rhs.color) && lhs.padding == rhs.padding; + } + + public static bool operator !=(HighlightState lhs, HighlightState rhs) + { + return !(lhs == rhs); + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + public override bool Equals(object obj) + { + return base.Equals(obj); + } + + public bool Equals(HighlightState other) + { + return base.Equals(other); + } + } + /// + /// Structure containing information about individual text elements (character or sprites). + /// + [DebuggerDisplay("Unicode '{character}' ({((uint)character).ToString(\"X\")})")] + public struct TMP_CharacterInfo + { + public char character; // Should be changed to an uint to handle UTF32 + /// + /// Index of the character in the raw string. + /// + public int index; // Index of the character in the input string. + public int stringLength; + public TMP_TextElementType elementType; + + public TMP_TextElement textElement; + public TMP_FontAsset fontAsset; + public TMP_SpriteAsset spriteAsset; + public int spriteIndex; + public Material material; + public int materialReferenceIndex; + public bool isUsingAlternateTypeface; + + public float pointSize; + + //public short wordNumber; + public int lineNumber; + //public short charNumber; + public int pageNumber; + + + public int vertexIndex; + public TMP_Vertex vertex_BL; + public TMP_Vertex vertex_TL; + public TMP_Vertex vertex_TR; + public TMP_Vertex vertex_BR; + + public Vector3 topLeft; + public Vector3 bottomLeft; + public Vector3 topRight; + public Vector3 bottomRight; + + public float origin; + public float xAdvance; + public float ascender; + public float baseLine; + public float descender; + internal float adjustedAscender; + internal float adjustedDescender; + + public float aspectRatio; + public float scale; + public Color32 color; + public Color32 underlineColor; + public int underlineVertexIndex; + public Color32 strikethroughColor; + public int strikethroughVertexIndex; + public Color32 highlightColor; + public HighlightState highlightState; + public FontStyles style; + public bool isVisible; + //public bool isIgnoringAlignment; + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta new file mode 100644 index 0000000..9367a16 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CharacterInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 90fe1c65e6bb3bc4e90862df7297719e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_ColorGradient.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_ColorGradient.cs new file mode 100644 index 0000000..8e8e38a --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_ColorGradient.cs @@ -0,0 +1,68 @@ +using UnityEngine; +using System.Collections; + +namespace TMPro +{ + public enum ColorMode + { + Single, + HorizontalGradient, + VerticalGradient, + FourCornersGradient + } + + [System.Serializable][ExcludeFromPresetAttribute] + public class TMP_ColorGradient : ScriptableObject + { + public ColorMode colorMode = ColorMode.FourCornersGradient; + + public Color topLeft; + public Color topRight; + public Color bottomLeft; + public Color bottomRight; + + const ColorMode k_DefaultColorMode = ColorMode.FourCornersGradient; + static readonly Color k_DefaultColor = Color.white; + + /// + /// Default Constructor which sets each of the colors as white. + /// + public TMP_ColorGradient() + { + colorMode = k_DefaultColorMode; + topLeft = k_DefaultColor; + topRight = k_DefaultColor; + bottomLeft = k_DefaultColor; + bottomRight = k_DefaultColor; + } + + /// + /// Constructor allowing to set the default color of the Color Gradient. + /// + /// + public TMP_ColorGradient(Color color) + { + colorMode = k_DefaultColorMode; + topLeft = color; + topRight = color; + bottomLeft = color; + bottomRight = color; + } + + /// + /// The vertex colors at the corners of the characters. + /// + /// Top left color. + /// Top right color. + /// Bottom left color. + /// Bottom right color. + public TMP_ColorGradient(Color color0, Color color1, Color color2, Color color3) + { + colorMode = k_DefaultColorMode; + this.topLeft = color0; + this.topRight = color1; + this.bottomLeft = color2; + this.bottomRight = color3; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_ColorGradient.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_ColorGradient.cs.meta new file mode 100644 index 0000000..1d79d01 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_ColorGradient.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 54d21f6ece3b46479f0c328f8c6007e0 +timeCreated: 1468187202 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Compatibility.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Compatibility.cs new file mode 100644 index 0000000..8484a5c --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Compatibility.cs @@ -0,0 +1,74 @@ +using UnityEngine; +using System.Collections; + + +namespace TMPro +{ + // Class used to convert scenes and objects saved in version 0.1.44 to the new Text Container + public static class TMP_Compatibility + { + public enum AnchorPositions { TopLeft, Top, TopRight, Left, Center, Right, BottomLeft, Bottom, BottomRight, BaseLine, None }; + + /// + /// Function used to convert text alignment option enumeration format. + /// + /// + /// + public static TextAlignmentOptions ConvertTextAlignmentEnumValues(TextAlignmentOptions oldValue) + { + switch ((int)oldValue) + { + case 0: + return TextAlignmentOptions.TopLeft; + case 1: + return TextAlignmentOptions.Top; + case 2: + return TextAlignmentOptions.TopRight; + case 3: + return TextAlignmentOptions.TopJustified; + case 4: + return TextAlignmentOptions.Left; + case 5: + return TextAlignmentOptions.Center; + case 6: + return TextAlignmentOptions.Right; + case 7: + return TextAlignmentOptions.Justified; + case 8: + return TextAlignmentOptions.BottomLeft; + case 9: + return TextAlignmentOptions.Bottom; + case 10: + return TextAlignmentOptions.BottomRight; + case 11: + return TextAlignmentOptions.BottomJustified; + case 12: + return TextAlignmentOptions.BaselineLeft; + case 13: + return TextAlignmentOptions.Baseline; + case 14: + return TextAlignmentOptions.BaselineRight; + case 15: + return TextAlignmentOptions.BaselineJustified; + case 16: + return TextAlignmentOptions.MidlineLeft; + case 17: + return TextAlignmentOptions.Midline; + case 18: + return TextAlignmentOptions.MidlineRight; + case 19: + return TextAlignmentOptions.MidlineJustified; + case 20: + return TextAlignmentOptions.CaplineLeft; + case 21: + return TextAlignmentOptions.Capline; + case 22: + return TextAlignmentOptions.CaplineRight; + case 23: + return TextAlignmentOptions.CaplineJustified; + } + + return TextAlignmentOptions.TopLeft; + } + } +} diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Compatibility.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Compatibility.cs.meta new file mode 100644 index 0000000..e0c9cab --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_Compatibility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 21364f754cf9b9b47a60742332d4af56 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CoroutineTween.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CoroutineTween.cs new file mode 100644 index 0000000..bec1f54 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CoroutineTween.cs @@ -0,0 +1,246 @@ +using UnityEngine; +using UnityEngine.Events; +using System.Collections; + + +namespace TMPro +{ + // Base interface for tweeners, + // using an interface instead of + // an abstract class as we want the + // tweens to be structs. + internal interface ITweenValue + { + void TweenValue(float floatPercentage); + bool ignoreTimeScale { get; } + float duration { get; } + bool ValidTarget(); + } + + // Color tween class, receives the + // TweenValue callback and then sets + // the value on the target. + internal struct ColorTween : ITweenValue + { + public enum ColorTweenMode + { + All, + RGB, + Alpha + } + + public class ColorTweenCallback : UnityEvent { } + + private ColorTweenCallback m_Target; + private Color m_StartColor; + private Color m_TargetColor; + private ColorTweenMode m_TweenMode; + + private float m_Duration; + private bool m_IgnoreTimeScale; + + public Color startColor + { + get { return m_StartColor; } + set { m_StartColor = value; } + } + + public Color targetColor + { + get { return m_TargetColor; } + set { m_TargetColor = value; } + } + + public ColorTweenMode tweenMode + { + get { return m_TweenMode; } + set { m_TweenMode = value; } + } + + public float duration + { + get { return m_Duration; } + set { m_Duration = value; } + } + + public bool ignoreTimeScale + { + get { return m_IgnoreTimeScale; } + set { m_IgnoreTimeScale = value; } + } + + public void TweenValue(float floatPercentage) + { + if (!ValidTarget()) + return; + + var newColor = Color.Lerp(m_StartColor, m_TargetColor, floatPercentage); + + if (m_TweenMode == ColorTweenMode.Alpha) + { + newColor.r = m_StartColor.r; + newColor.g = m_StartColor.g; + newColor.b = m_StartColor.b; + } + else if (m_TweenMode == ColorTweenMode.RGB) + { + newColor.a = m_StartColor.a; + } + m_Target.Invoke(newColor); + } + + public void AddOnChangedCallback(UnityAction callback) + { + if (m_Target == null) + m_Target = new ColorTweenCallback(); + + m_Target.AddListener(callback); + } + + public bool GetIgnoreTimescale() + { + return m_IgnoreTimeScale; + } + + public float GetDuration() + { + return m_Duration; + } + + public bool ValidTarget() + { + return m_Target != null; + } + } + + // Float tween class, receives the + // TweenValue callback and then sets + // the value on the target. + internal struct FloatTween : ITweenValue + { + public class FloatTweenCallback : UnityEvent { } + + private FloatTweenCallback m_Target; + private float m_StartValue; + private float m_TargetValue; + + private float m_Duration; + private bool m_IgnoreTimeScale; + + public float startValue + { + get { return m_StartValue; } + set { m_StartValue = value; } + } + + public float targetValue + { + get { return m_TargetValue; } + set { m_TargetValue = value; } + } + + public float duration + { + get { return m_Duration; } + set { m_Duration = value; } + } + + public bool ignoreTimeScale + { + get { return m_IgnoreTimeScale; } + set { m_IgnoreTimeScale = value; } + } + + public void TweenValue(float floatPercentage) + { + if (!ValidTarget()) + return; + + var newValue = Mathf.Lerp(m_StartValue, m_TargetValue, floatPercentage); + m_Target.Invoke(newValue); + } + + public void AddOnChangedCallback(UnityAction callback) + { + if (m_Target == null) + m_Target = new FloatTweenCallback(); + + m_Target.AddListener(callback); + } + + public bool GetIgnoreTimescale() + { + return m_IgnoreTimeScale; + } + + public float GetDuration() + { + return m_Duration; + } + + public bool ValidTarget() + { + return m_Target != null; + } + } + + // Tween runner, executes the given tween. + // The coroutine will live within the given + // behaviour container. + internal class TweenRunner where T : struct, ITweenValue + { + protected MonoBehaviour m_CoroutineContainer; + protected IEnumerator m_Tween; + + // utility function for starting the tween + private static IEnumerator Start(T tweenInfo) + { + if (!tweenInfo.ValidTarget()) + yield break; + + var elapsedTime = 0.0f; + while (elapsedTime < tweenInfo.duration) + { + elapsedTime += tweenInfo.ignoreTimeScale ? Time.unscaledDeltaTime : Time.deltaTime; + var percentage = Mathf.Clamp01(elapsedTime / tweenInfo.duration); + tweenInfo.TweenValue(percentage); + yield return null; + } + tweenInfo.TweenValue(1.0f); + } + + public void Init(MonoBehaviour coroutineContainer) + { + m_CoroutineContainer = coroutineContainer; + } + + public void StartTween(T info) + { + if (m_CoroutineContainer == null) + { + Debug.LogWarning("Coroutine container not configured... did you forget to call Init?"); + return; + } + + StopTween(); + + if (!m_CoroutineContainer.gameObject.activeInHierarchy) + { + info.TweenValue(1.0f); + return; + } + + m_Tween = Start(info); + m_CoroutineContainer.StartCoroutine(m_Tween); + } + + public void StopTween() + { + if (m_Tween != null) + { + m_CoroutineContainer.StopCoroutine(m_Tween); + m_Tween = null; + } + } + } +} \ No newline at end of file diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta new file mode 100644 index 0000000..01cf5eb --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_CoroutineTween.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 658c1fb149e7498aa072b0c0f3bf13f0 +timeCreated: 1464850953 +licenseType: Pro +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_DefaultControls.cs b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_DefaultControls.cs new file mode 100644 index 0000000..45eac33 --- /dev/null +++ b/Unity/Better Tracking/Library/PackageCache/com.unity.textmeshpro@2.1.1/Scripts/Runtime/TMP_DefaultControls.cs @@ -0,0 +1,401 @@ +using UnityEngine; +using System.Collections; +using UnityEngine.UI; + +#if UNITY_EDITOR +using UnityEditor; +#endif + + +namespace TMPro +{ + + public static class TMP_DefaultControls + { + public struct Resources + { + public Sprite standard; + public Sprite background; + public Sprite inputField; + public Sprite knob; + public Sprite checkmark; + public Sprite dropdown; + public Sprite mask; + } + + private const float kWidth = 160f; + private const float kThickHeight = 30f; + private const float kThinHeight = 20f; + private static Vector2 s_TextElementSize = new Vector2(100f, 100f); + private static Vector2 s_ThickElementSize = new Vector2(kWidth, kThickHeight); + private static Vector2 s_ThinElementSize = new Vector2(kWidth, kThinHeight); + //private static Vector2 s_ImageElementSize = new Vector2(100f, 100f); + private static Color s_DefaultSelectableColor = new Color(1f, 1f, 1f, 1f); + //private static Color s_PanelColor = new Color(1f, 1f, 1f, 0.392f); + private static Color s_TextColor = new Color(50f / 255f, 50f / 255f, 50f / 255f, 1f); + + + private static GameObject CreateUIElementRoot(string name, Vector2 size) + { + GameObject child = new GameObject(name); + RectTransform rectTransform = child.AddComponent(); + rectTransform.sizeDelta = size; + return child; + } + + static GameObject CreateUIObject(string name, GameObject parent) + { + GameObject go = new GameObject(name); + go.AddComponent(); + SetParentAndAlign(go, parent); + return go; + } + + private static void SetDefaultTextValues(TMP_Text lbl) + { + // Set text values we want across UI elements in default controls. + // Don't set values which are the same as the default values for the Text component, + // since there's no point in that, and it's good to keep them as consistent as possible. + lbl.color = s_TextColor; + lbl.fontSize = 14; + } + + private static void SetDefaultColorTransitionValues(Selectable slider) + { + ColorBlock colors = slider.colors; + colors.highlightedColor = new Color(0.882f, 0.882f, 0.882f); + colors.pressedColor = new Color(0.698f, 0.698f, 0.698f); + colors.disabledColor = new Color(0.521f, 0.521f, 0.521f); + } + + private static void SetParentAndAlign(GameObject child, GameObject parent) + { + if (parent == null) + return; + + child.transform.SetParent(parent.transform, false); + SetLayerRecursively(child, parent.layer); + } + + private static void SetLayerRecursively(GameObject go, int layer) + { + go.layer = layer; + Transform t = go.transform; + for (int i = 0; i < t.childCount; i++) + SetLayerRecursively(t.GetChild(i).gameObject, layer); + } + + // Actual controls + + public static GameObject CreateScrollbar(Resources resources) + { + // Create GOs Hierarchy + GameObject scrollbarRoot = CreateUIElementRoot("Scrollbar", s_ThinElementSize); + + GameObject sliderArea = CreateUIObject("Sliding Area", scrollbarRoot); + GameObject handle = CreateUIObject("Handle", sliderArea); + + Image bgImage = scrollbarRoot.AddComponent(); + bgImage.sprite = resources.background; + bgImage.type = Image.Type.Sliced; + bgImage.color = s_DefaultSelectableColor; + + Image handleImage = handle.AddComponent(); + handleImage.sprite = resources.standard; + handleImage.type = Image.Type.Sliced; + handleImage.color = s_DefaultSelectableColor; + + RectTransform sliderAreaRect = sliderArea.GetComponent(); + sliderAreaRect.sizeDelta = new Vector2(-20, -20); + sliderAreaRect.anchorMin = Vector2.zero; + sliderAreaRect.anchorMax = Vector2.one; + + RectTransform handleRect = handle.GetComponent(); + handleRect.sizeDelta = new Vector2(20, 20); + + Scrollbar scrollbar = scrollbarRoot.AddComponent(); + scrollbar.handleRect = handleRect; + scrollbar.targetGraphic = handleImage; + SetDefaultColorTransitionValues(scrollbar); + + return scrollbarRoot; + } + + public static GameObject CreateButton(Resources resources) + { + GameObject buttonRoot = CreateUIElementRoot("Button", s_ThickElementSize); + + GameObject childText = new GameObject("Text (TMP)"); + childText.AddComponent(); + SetParentAndAlign(childText, buttonRoot); + + Image image = buttonRoot.AddComponent(); + image.sprite = resources.standard; + image.type = Image.Type.Sliced; + image.color = s_DefaultSelectableColor; + + Button bt = buttonRoot.AddComponent