diff --git a/.gitignore b/.gitignore index 416162b..494b95a 100644 --- a/.gitignore +++ b/.gitignore @@ -82,7 +82,7 @@ _ReSharper.Caches artifacts/ StreamingAssets/ StreamingAssets.meta - -# ====================== # -# Project Specific Links # -# ====================== # +BlockadeLabs/Assets/Resources +BlockadeLabs/Assets/Resources.meta +BlockadeLabs/Assets/Plugins +BlockadeLabs/Assets/Plugins.meta diff --git a/ProjectScope.ProjectName/.editorconfig b/BlockadeLabs/.editorconfig similarity index 100% rename from ProjectScope.ProjectName/.editorconfig rename to BlockadeLabs/.editorconfig diff --git a/BlockadeLabs/Assets/Demo.meta b/BlockadeLabs/Assets/Demo.meta new file mode 100644 index 0000000..7160697 --- /dev/null +++ b/BlockadeLabs/Assets/Demo.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e3d95f7c8ce80544a9e03bad73a9588f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Assets/Demo/BlockadeLabs.Demo.asmdef b/BlockadeLabs/Assets/Demo/BlockadeLabs.Demo.asmdef new file mode 100644 index 0000000..9a39497 --- /dev/null +++ b/BlockadeLabs/Assets/Demo/BlockadeLabs.Demo.asmdef @@ -0,0 +1,20 @@ +{ + "name": "BlockadeLabs.Demo", + "rootNamespace": "BlockadeLabs.Demo", + "references": [ + "GUID:0e64303a4898a4d4ba94306e88e6c025", + "GUID:a6609af893242c7438d701ddd4cce46a", + "GUID:6ab1da3c58a70364e92dc36aaec78f43", + "GUID:7958db66189566541a6363568aee1575", + "GUID:6055be8ebefd69e48b49212b09b47b2f" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/BlockadeLabs/Assets/Demo/BlockadeLabs.Demo.asmdef.meta b/BlockadeLabs/Assets/Demo/BlockadeLabs.Demo.asmdef.meta new file mode 100644 index 0000000..196d0ef --- /dev/null +++ b/BlockadeLabs/Assets/Demo/BlockadeLabs.Demo.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 905366ff87cf8a44c85f8f1130a91e9e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Assets/Demo/SkyboxDemo.cs b/BlockadeLabs/Assets/Demo/SkyboxDemo.cs new file mode 100644 index 0000000..6322679 --- /dev/null +++ b/BlockadeLabs/Assets/Demo/SkyboxDemo.cs @@ -0,0 +1,117 @@ +using BlockadeLabs.Skyboxes; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using TMPro; +using UnityEngine; +using UnityEngine.UI; +using Utilities.Extensions; + +namespace BlockadeLabs.Demo +{ + public class SkyboxDemo : MonoBehaviour + { + [SerializeField] + private TMP_InputField promptInputField; + + [SerializeField] + private TMP_Dropdown skyboxStyleDropdown; + + [SerializeField] + private Button generateButton; + + [SerializeField] + private Material skyboxMaterial; + + private BlockadeLabsClient api; + + private CancellationTokenSource lifetimeCancellationTokenSource; + + private IReadOnlyList skyboxOptions; + + private void OnValidate() + { + promptInputField.Validate(); + skyboxStyleDropdown.Validate(); + generateButton.Validate(); + } + + private void Awake() + { + OnValidate(); + lifetimeCancellationTokenSource = new CancellationTokenSource(); + + try + { + api = new BlockadeLabsClient(); + } + catch (Exception e) + { + Debug.LogError($"Failed to create {nameof(BlockadeLabsClient)}!\n{e}"); + enabled = false; + return; + } + + GetSkyboxStyles(); + generateButton.onClick.AddListener(GenerateSkybox); + promptInputField.onSubmit.AddListener(GenerateSkybox); + promptInputField.onValueChanged.AddListener(ValidateInput); + } + + private void ValidateInput(string input) + { + generateButton.interactable = !string.IsNullOrWhiteSpace(input); + } + + private void GenerateSkybox() => GenerateSkybox(promptInputField.text); + + private async void GenerateSkybox(string prompt) + { + if (string.IsNullOrWhiteSpace(prompt)) + { + Debug.LogWarning("No prompt given!"); + return; + } + + try + { + generateButton.interactable = false; + promptInputField.interactable = false; + var request = new SkyboxRequest(prompt, skyboxStyleId: skyboxOptions[skyboxStyleDropdown.value].Id); + var skyboxInfo = await api.SkyboxEndpoint.GenerateSkyboxAsync(request, lifetimeCancellationTokenSource.Token).ConfigureAwait(true); + skyboxMaterial.mainTexture = skyboxInfo.MainTexture; + Debug.Log($"Successfully created skybox: {skyboxInfo.Id}"); + } + catch (Exception e) + { + Debug.LogError(e); + } + finally + { + generateButton.interactable = true; + promptInputField.interactable = true; + } + } + + private void OnDestroy() + { + lifetimeCancellationTokenSource.Cancel(); + } + + private async void GetSkyboxStyles() + { + try + { + skyboxOptions = await api.SkyboxEndpoint.GetSkyboxStylesAsync(lifetimeCancellationTokenSource.Token).ConfigureAwait(true); + var dropdownOptions = new List(skyboxOptions.Count); + dropdownOptions.AddRange(skyboxOptions.Select(skyboxStyle => new TMP_Dropdown.OptionData(skyboxStyle.Name))); + skyboxStyleDropdown.options = dropdownOptions; + } + catch (Exception e) + { + Debug.LogError(e); + } + } + } +} diff --git a/BlockadeLabs/Assets/Demo/SkyboxDemo.cs.meta b/BlockadeLabs/Assets/Demo/SkyboxDemo.cs.meta new file mode 100644 index 0000000..f318e66 --- /dev/null +++ b/BlockadeLabs/Assets/Demo/SkyboxDemo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 530e128bcdf8a054898532de9d8fba80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Assets/Demo/SkyboxDemo.unity b/BlockadeLabs/Assets/Demo/SkyboxDemo.unity new file mode 100644 index 0000000..7971a19 --- /dev/null +++ b/BlockadeLabs/Assets/Demo/SkyboxDemo.unity @@ -0,0 +1,2822 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!29 &1 +OcclusionCullingSettings: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_OcclusionBakeSettings: + smallestOccluder: 5 + smallestHole: 0.25 + backfaceThreshold: 100 + m_SceneGUID: 00000000000000000000000000000000 + m_OcclusionCullingData: {fileID: 0} +--- !u!104 &2 +RenderSettings: + m_ObjectHideFlags: 0 + serializedVersion: 9 + m_Fog: 0 + m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} + m_FogMode: 3 + m_FogDensity: 0.01 + m_LinearFogStart: 0 + m_LinearFogEnd: 300 + m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} + m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} + m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} + m_AmbientIntensity: 1 + m_AmbientMode: 0 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 2100000, guid: e671ac8eb3c6f6a4a97491eb29076e3b, type: 2} + m_HaloStrength: 0.5 + m_FlareStrength: 1 + m_FlareFadeSpeed: 3 + m_HaloTexture: {fileID: 0} + m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} + m_DefaultReflectionMode: 0 + m_DefaultReflectionResolution: 128 + m_ReflectionBounces: 1 + m_ReflectionIntensity: 1 + m_CustomReflection: {fileID: 0} + m_Sun: {fileID: 0} + m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} + m_UseRadianceAmbientProbe: 0 +--- !u!157 &3 +LightmapSettings: + m_ObjectHideFlags: 0 + serializedVersion: 12 + m_GIWorkflowMode: 1 + m_GISettings: + serializedVersion: 2 + m_BounceScale: 1 + m_IndirectOutputScale: 1 + m_AlbedoBoost: 1 + m_EnvironmentLightingMode: 0 + m_EnableBakedLightmaps: 1 + m_EnableRealtimeLightmaps: 0 + m_LightmapEditorSettings: + serializedVersion: 12 + m_Resolution: 2 + m_BakeResolution: 40 + 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 + m_TextureCompression: 1 + m_FinalGather: 0 + m_FinalGatherFiltering: 1 + m_FinalGatherRayCount: 256 + m_ReflectionCompression: 2 + m_MixedBakeMode: 2 + m_BakeBackend: 1 + m_PVRSampling: 1 + m_PVRDirectSampleCount: 32 + m_PVRSampleCount: 512 + m_PVRBounces: 2 + m_PVREnvironmentSampleCount: 256 + m_PVREnvironmentReferencePointCount: 2048 + m_PVRFilteringMode: 1 + m_PVRDenoiserTypeDirect: 1 + m_PVRDenoiserTypeIndirect: 1 + m_PVRDenoiserTypeAO: 1 + m_PVRFilterTypeDirect: 0 + m_PVRFilterTypeIndirect: 0 + m_PVRFilterTypeAO: 0 + m_PVREnvironmentMIS: 1 + m_PVRCulling: 1 + m_PVRFilteringGaussRadiusDirect: 1 + m_PVRFilteringGaussRadiusIndirect: 5 + m_PVRFilteringGaussRadiusAO: 2 + m_PVRFilteringAtrousPositionSigmaDirect: 0.5 + m_PVRFilteringAtrousPositionSigmaIndirect: 2 + m_PVRFilteringAtrousPositionSigmaAO: 1 + m_ExportTrainingData: 0 + m_TrainingDataDestination: TrainingData + m_LightProbeSampleCountMultiplier: 4 + m_LightingDataAsset: {fileID: 0} + m_LightingSettings: {fileID: 0} +--- !u!196 &4 +NavMeshSettings: + serializedVersion: 2 + m_ObjectHideFlags: 0 + m_BuildSettings: + serializedVersion: 2 + agentTypeID: 0 + agentRadius: 0.5 + agentHeight: 2 + agentSlope: 45 + agentClimb: 0.4 + ledgeDropHeight: 0 + maxJumpAcrossDistance: 0 + minRegionArea: 2 + manualCellSize: 0 + cellSize: 0.16666667 + manualTileSize: 0 + tileSize: 256 + accuratePlacement: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &41372776 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 41372777} + - component: {fileID: 41372780} + - component: {fileID: 41372779} + - component: {fileID: 41372778} + - component: {fileID: 41372781} + m_Layer: 5 + m_Name: PromptInputField + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &41372777 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41372776} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 1795232782} + m_Father: {fileID: 1175833942} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &41372778 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41372776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2da0c512f12947e489f739169773d7ca, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 41372779} + m_TextViewport: {fileID: 1795232782} + m_TextComponent: {fileID: 1460347556} + m_Placeholder: {fileID: 463533643} + m_VerticalScrollbar: {fileID: 0} + m_VerticalScrollbarEventHandler: {fileID: 0} + m_LayoutGroup: {fileID: 0} + m_ScrollSensitivity: 1 + m_ContentType: 4 + m_InputType: 0 + m_AsteriskChar: 42 + m_KeyboardType: 1 + m_LineType: 0 + m_HideMobileInput: 0 + m_HideSoftKeyboard: 0 + m_CharacterValidation: 4 + m_RegexValue: + m_GlobalPointSize: 24 + m_CharacterLimit: 0 + m_OnEndEdit: + m_PersistentCalls: + m_Calls: [] + m_OnSubmit: + m_PersistentCalls: + m_Calls: [] + m_OnSelect: + m_PersistentCalls: + m_Calls: [] + m_OnDeselect: + m_PersistentCalls: + m_Calls: [] + m_OnTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnEndTextSelection: + m_PersistentCalls: + m_Calls: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_OnTouchScreenKeyboardStatusChanged: + 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 + m_RichText: 1 + m_GlobalFontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_OnFocusSelectAll: 1 + m_ResetOnDeActivation: 1 + m_RestoreOriginalTextOnEscape: 1 + m_isRichTextEditingAllowed: 0 + m_LineLimit: 0 + m_InputValidator: {fileID: 0} +--- !u!114 &41372779 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41372776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10911, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &41372780 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41372776} + m_CullTransparentMesh: 1 +--- !u!114 &41372781 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 41372776} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 256 + m_MinHeight: -1 + m_PreferredWidth: 512 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 2 +--- !u!1 &72969032 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 72969035} + - component: {fileID: 72969034} + - component: {fileID: 72969033} + m_Layer: 0 + m_Name: Main Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!81 &72969033 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 72969032} + m_Enabled: 1 +--- !u!20 &72969034 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 72969032} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.1764706, g: 0.1764706, b: 0.1764706, a: 1} + 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 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 1000 + field of view: 60 + orthographic: 0 + orthographic size: 5 + m_Depth: -1 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingPath: -1 + m_TargetTexture: {fileID: 0} + m_TargetDisplay: 0 + 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 +--- !u!4 &72969035 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 72969032} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &200225031 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 200225032} + - component: {fileID: 200225034} + - component: {fileID: 200225033} + - component: {fileID: 200225035} + - component: {fileID: 200225036} + m_Layer: 5 + m_Name: MainPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &200225032 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200225031} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 1612849246} + - {fileID: 1175833942} + - {fileID: 241954613} + m_Father: {fileID: 1093524933} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 16} + m_SizeDelta: {x: -32, y: 128} + m_Pivot: {x: 0.5, y: 0} +--- !u!114 &200225033 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200225031} + 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.21960786, g: 0.21960786, b: 0.21960786, a: 0.5019608} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 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!222 &200225034 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200225031} + m_CullTransparentMesh: 1 +--- !u!114 &200225035 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200225031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 512 + m_MinHeight: 128 + m_PreferredWidth: 512 + m_PreferredHeight: 128 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &200225036 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 200225031} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_ChildAlignment: 4 + m_Spacing: 8 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &241954612 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 241954613} + m_Layer: 5 + m_Name: BottomPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &241954613 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 241954612} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 200225032} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &261906814 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 261906815} + - component: {fileID: 261906817} + - component: {fileID: 261906816} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &261906815 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261906814} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 638446756} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -7.5, y: -0.5} + m_SizeDelta: {x: -35, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &261906816 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261906814} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 14 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &261906817 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 261906814} + m_CullTransparentMesh: 1 +--- !u!1 &280817754 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 280817755} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &280817755 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 280817754} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 2006619345} + m_Father: {fileID: 1318909067} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 28} + m_Pivot: {x: 0.5, y: 1} +--- !u!1 &304151161 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 304151164} + - component: {fileID: 304151163} + - component: {fileID: 304151162} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &304151162 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304151161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} + m_Name: + m_EditorClassIdentifier: + m_SendPointerHoverToParent: 1 + m_HorizontalAxis: Horizontal + m_VerticalAxis: Vertical + m_SubmitButton: Submit + m_CancelButton: Cancel + m_InputActionsPerSecond: 10 + m_RepeatDelay: 0.5 + m_ForceModuleActive: 0 +--- !u!114 &304151163 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304151161} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_FirstSelected: {fileID: 0} + m_sendNavigationEvents: 1 + m_DragThreshold: 10 +--- !u!4 &304151164 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 304151161} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 4 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &463533640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 463533641} + - component: {fileID: 463533644} + - component: {fileID: 463533643} + - component: {fileID: 463533642} + m_Layer: 5 + m_Name: Placeholder + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &463533641 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463533640} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1795232782} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &463533642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463533640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 1 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &463533643 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463533640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Create a new world by describing it... + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 2150773298 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 0.5} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 2 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 1 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &463533644 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 463533640} + m_CullTransparentMesh: 1 +--- !u!1 &517660783 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 517660784} + m_Layer: 5 + m_Name: Sliding Area + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &517660784 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 517660783} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 1625261307} + m_Father: {fileID: 914705824} + 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: -20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &545858271 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 545858272} + - component: {fileID: 545858275} + - component: {fileID: 545858274} + - component: {fileID: 545858273} + - component: {fileID: 545858276} + m_Layer: 5 + m_Name: Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &545858272 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 545858271} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 1570093186} + m_Father: {fileID: 1175833942} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &545858273 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 545858271} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 545858274} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &545858274 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 545858271} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &545858275 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 545858271} + m_CullTransparentMesh: 1 +--- !u!114 &545858276 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 545858271} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 128 + m_MinHeight: -1 + m_PreferredWidth: 128 + m_PreferredHeight: -1 + m_FlexibleWidth: 1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!1 &578785327 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 578785328} + - component: {fileID: 578785330} + - component: {fileID: 578785329} + m_Layer: 5 + m_Name: Item Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &578785328 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 578785327} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2006619345} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0, y: 0.5} + m_AnchoredPosition: {x: 10, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &578785329 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 578785327} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &578785330 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 578785327} + m_CullTransparentMesh: 1 +--- !u!1 &638446755 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 638446756} + - component: {fileID: 638446760} + - component: {fileID: 638446759} + - component: {fileID: 638446758} + - component: {fileID: 638446757} + m_Layer: 5 + m_Name: Dropdown + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &638446756 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638446755} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 261906815} + - {fileID: 2027249695} + - {fileID: 1539986340} + m_Father: {fileID: 1175833942} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &638446757 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638446755} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: 128 + m_MinHeight: -1 + m_PreferredWidth: 256 + m_PreferredHeight: -1 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &638446758 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638446755} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 7b743370ac3e4ec2a1668f5455a8ef8a, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 638446759} + m_Template: {fileID: 1539986340} + m_CaptionText: {fileID: 261906816} + m_CaptionImage: {fileID: 0} + m_Placeholder: {fileID: 0} + m_ItemText: {fileID: 1041967940} + m_ItemImage: {fileID: 0} + m_Value: 0 + m_Options: + m_Options: [] + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] + m_AlphaFadeSpeed: 0.15 +--- !u!114 &638446759 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638446755} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &638446760 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 638446755} + m_CullTransparentMesh: 1 +--- !u!1 &846109566 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 846109568} + - component: {fileID: 846109567} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!108 &846109567 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 846109566} + m_Enabled: 1 + 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 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + 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} + m_RenderMode: 0 + 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_UseViewFrustumForShadowCasterCull: 1 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!4 &846109568 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 846109566} + m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261} + m_LocalPosition: {x: 0, y: 3, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0} +--- !u!1 &914705823 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 914705824} + - component: {fileID: 914705827} + - component: {fileID: 914705826} + - component: {fileID: 914705825} + m_Layer: 5 + m_Name: Scrollbar + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &914705824 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 914705823} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 517660784} + m_Father: {fileID: 1539986340} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 0} + m_Pivot: {x: 1, y: 1} +--- !u!114 &914705825 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 914705823} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2a4db7a114972834c8e4117be1d82ba3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1625261308} + m_HandleRect: {fileID: 1625261307} + m_Direction: 2 + m_Value: 0 + m_Size: 0.2 + m_NumberOfSteps: 0 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &914705826 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 914705823} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10907, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &914705827 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 914705823} + m_CullTransparentMesh: 1 +--- !u!1 &1041967938 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1041967939} + - component: {fileID: 1041967941} + - component: {fileID: 1041967940} + m_Layer: 5 + m_Name: Item Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1041967939 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1041967938} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2006619345} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 5, y: -0.5} + m_SizeDelta: {x: -30, y: -3} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1041967940 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1041967938} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Option A + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 14 + m_fontSizeBase: 14 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1041967941 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1041967938} + m_CullTransparentMesh: 1 +--- !u!1 &1093524929 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1093524933} + - component: {fileID: 1093524932} + - component: {fileID: 1093524931} + - component: {fileID: 1093524930} + m_Layer: 5 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1093524930 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093524929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreReversedGraphics: 1 + m_BlockingObjects: 0 + m_BlockingMask: + serializedVersion: 2 + m_Bits: 4294967295 +--- !u!114 &1093524931 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093524929} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 0 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 800, y: 600} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!223 &1093524932 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093524929} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 0 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_AdditionalShaderChannelsFlag: 25 + m_SortingLayerID: 0 + m_SortingOrder: 0 + m_TargetDisplay: 0 +--- !u!224 &1093524933 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1093524929} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 0, y: 0, z: 0} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 200225032} + m_Father: {fileID: 0} + m_RootOrder: 3 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!1 &1175833941 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1175833942} + - component: {fileID: 1175833943} + m_Layer: 5 + m_Name: MiddlePanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1175833942 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175833941} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 41372777} + - {fileID: 638446756} + - {fileID: 545858272} + m_Father: {fileID: 200225032} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1175833943 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1175833941} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 8 + m_Right: 8 + m_Top: 8 + m_Bottom: 8 + m_ChildAlignment: 3 + m_Spacing: 8 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 1 + m_ChildControlHeight: 1 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &1318909066 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1318909067} + - component: {fileID: 1318909070} + - component: {fileID: 1318909069} + - component: {fileID: 1318909068} + m_Layer: 5 + m_Name: Viewport + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1318909067 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318909066} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 280817755} + m_Father: {fileID: 1539986340} + 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: -18, y: 0} + m_Pivot: {x: 0, y: 1} +--- !u!114 &1318909068 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318909066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10917, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1318909069 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318909066} + m_CullTransparentMesh: 1 +--- !u!114 &1318909070 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1318909066} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 31a19414c41e5ae4aae2af33fee712f6, type: 3} + m_Name: + m_EditorClassIdentifier: + m_ShowMaskGraphic: 0 +--- !u!1 &1342179885 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1342179887} + - component: {fileID: 1342179886} + m_Layer: 0 + m_Name: SkyboxDemo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1342179886 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1342179885} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 530e128bcdf8a054898532de9d8fba80, type: 3} + m_Name: + m_EditorClassIdentifier: + promptInputField: {fileID: 41372778} + skyboxStyleDropdown: {fileID: 638446758} + generateButton: {fileID: 545858273} + skyboxMaterial: {fileID: 2100000, guid: e671ac8eb3c6f6a4a97491eb29076e3b, type: 2} +--- !u!4 &1342179887 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1342179885} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 0} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &1460347554 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1460347555} + - component: {fileID: 1460347557} + - component: {fileID: 1460347556} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1460347555 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1460347554} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 1795232782} + 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!114 &1460347556 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1460347554} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: "\u200B" + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 1 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1460347557 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1460347554} + m_CullTransparentMesh: 1 +--- !u!1 &1539986339 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1539986340} + - component: {fileID: 1539986343} + - component: {fileID: 1539986342} + - component: {fileID: 1539986341} + m_Layer: 5 + m_Name: Template + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 0 +--- !u!224 &1539986340 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539986339} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 1318909067} + - {fileID: 914705824} + m_Father: {fileID: 638446756} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0} + m_AnchoredPosition: {x: 0, y: 2} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 1} +--- !u!114 &1539986341 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539986339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1aa08ab6e0800fa44ae55d278d1423e3, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Content: {fileID: 280817755} + m_Horizontal: 0 + m_Vertical: 1 + m_MovementType: 2 + m_Elasticity: 0.1 + m_Inertia: 1 + m_DecelerationRate: 0.135 + m_ScrollSensitivity: 1 + m_Viewport: {fileID: 1318909067} + m_HorizontalScrollbar: {fileID: 0} + m_VerticalScrollbar: {fileID: 914705825} + m_HorizontalScrollbarVisibility: 0 + m_VerticalScrollbarVisibility: 2 + m_HorizontalScrollbarSpacing: 0 + m_VerticalScrollbarSpacing: -3 + m_OnValueChanged: + m_PersistentCalls: + m_Calls: [] +--- !u!114 &1539986342 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539986339} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1539986343 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1539986339} + m_CullTransparentMesh: 1 +--- !u!1 &1570093185 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1570093186} + - component: {fileID: 1570093188} + - component: {fileID: 1570093187} + m_Layer: 5 + m_Name: Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1570093186 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570093185} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 545858272} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1570093187 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570093185} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Generate + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4281479730 + m_fontColor: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 24 + m_fontSizeBase: 24 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1570093188 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1570093185} + m_CullTransparentMesh: 1 +--- !u!1 &1612849245 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1612849246} + m_Layer: 5 + m_Name: TopPanel + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1612849246 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1612849245} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 200225032} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1625261306 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1625261307} + - component: {fileID: 1625261309} + - component: {fileID: 1625261308} + m_Layer: 5 + m_Name: Handle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1625261307 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625261306} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 517660784} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 0.2} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1625261308 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625261306} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1625261309 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1625261306} + m_CullTransparentMesh: 1 +--- !u!1 &1795232781 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1795232782} + - component: {fileID: 1795232783} + m_Layer: 5 + m_Name: TextArea + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1795232782 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795232781} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 463533641} + - {fileID: 1460347555} + m_Father: {fileID: 41372777} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: -0.5} + m_SizeDelta: {x: -20, y: -13} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1795232783 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1795232781} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3312d7739989d2b4e91e6319e9a96d76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: {x: -8, y: -5, z: -8, w: -5} + m_Softness: {x: 0, y: 0} +--- !u!1 &1802491287 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1802491288} + - component: {fileID: 1802491290} + - component: {fileID: 1802491289} + m_Layer: 5 + m_Name: Item Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1802491288 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802491287} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 2006619345} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1802491289 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802491287} + 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.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1802491290 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1802491287} + m_CullTransparentMesh: 1 +--- !u!1 &2006619344 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2006619345} + - component: {fileID: 2006619346} + m_Layer: 5 + m_Name: Item + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2006619345 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2006619344} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: + - {fileID: 1802491288} + - {fileID: 578785328} + - {fileID: 1041967939} + m_Father: {fileID: 280817755} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2006619346 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2006619344} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1802491289} + toggleTransition: 1 + graphic: {fileID: 578785329} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 1 +--- !u!1 &2027249694 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2027249695} + - component: {fileID: 2027249697} + - component: {fileID: 2027249696} + m_Layer: 5 + m_Name: Arrow + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2027249695 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027249694} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 1 + m_Children: [] + m_Father: {fileID: 638446756} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 1, y: 0.5} + m_AnchorMax: {x: 1, y: 0.5} + m_AnchoredPosition: {x: -15, y: 0} + m_SizeDelta: {x: 20, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2027249696 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027249694} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10915, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2027249697 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2027249694} + m_CullTransparentMesh: 1 diff --git a/BlockadeLabs/Assets/Demo/SkyboxDemo.unity.meta b/BlockadeLabs/Assets/Demo/SkyboxDemo.unity.meta new file mode 100644 index 0000000..409788f --- /dev/null +++ b/BlockadeLabs/Assets/Demo/SkyboxDemo.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c64e45bae6fa19d4a90c4037e84fbae5 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Assets/Demo/SkyboxDemoMaterial.mat b/BlockadeLabs/Assets/Demo/SkyboxDemoMaterial.mat new file mode 100644 index 0000000..45e6e85 --- /dev/null +++ b/BlockadeLabs/Assets/Demo/SkyboxDemoMaterial.mat @@ -0,0 +1,112 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!21 &2100000 +Material: + serializedVersion: 8 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: SkyboxDemoMaterial + m_Shader: {fileID: 108, guid: 0000000000000000f000000000000000, type: 0} + m_ValidKeywords: [] + m_InvalidKeywords: + - _MAPPING_LATITUDE_LONGITUDE_LAYOUT + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _BackTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _BumpMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailAlbedoMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailMask: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DetailNormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _DownTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _EmissionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _FrontTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _LeftTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MetallicGlossMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _OcclusionMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _ParallaxMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _RightTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _UpTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BumpScale: 1 + - _Cutoff: 0.5 + - _DetailNormalMapScale: 1 + - _DstBlend: 0 + - _Exposure: 1 + - _GlossMapScale: 1 + - _Glossiness: 0.5 + - _GlossyReflections: 1 + - _ImageType: 0 + - _Layout: 0 + - _Mapping: 1 + - _Metallic: 0 + - _MirrorOnBack: 0 + - _Mode: 0 + - _OcclusionStrength: 1 + - _Parallax: 0.02 + - _Rotation: 0 + - _SmoothnessTextureChannel: 0 + - _SpecularHighlights: 1 + - _SrcBlend: 1 + - _UVSec: 0 + - _ZWrite: 1 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _EmissionColor: {r: 0, g: 0, b: 0, a: 1} + - _Tint: {r: 0.5019608, g: 0.5019608, b: 0.5019608, a: 1} + m_BuildTextureStacks: [] diff --git a/BlockadeLabs/Assets/Demo/SkyboxDemoMaterial.mat.meta b/BlockadeLabs/Assets/Demo/SkyboxDemoMaterial.mat.meta new file mode 100644 index 0000000..645769d --- /dev/null +++ b/BlockadeLabs/Assets/Demo/SkyboxDemoMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e671ac8eb3c6f6a4a97491eb29076e3b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectScope.ProjectName/Assets/csc.rsp b/BlockadeLabs/Assets/csc.rsp similarity index 100% rename from ProjectScope.ProjectName/Assets/csc.rsp rename to BlockadeLabs/Assets/csc.rsp diff --git a/BlockadeLabs/Assets/csc.rsp.meta b/BlockadeLabs/Assets/csc.rsp.meta new file mode 100644 index 0000000..457ee78 --- /dev/null +++ b/BlockadeLabs/Assets/csc.rsp.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: add17bd3195f96d45875623518af9b42 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Documentation~/README.md b/BlockadeLabs/Packages/com.rest.blockadelabs/Documentation~/README.md new file mode 100644 index 0000000..7f30b21 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Documentation~/README.md @@ -0,0 +1,35 @@ +# com.rest.blockadelabs + +[![openupm](https://img.shields.io/npm/v/com.rest.blockadelabs?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/com.rest.blockadelabs/) + +A BlockadeLabs package for the [Unity](https://unity.com/) Game Engine. + +## Installing + +### Via Unity Package Manager and OpenUPM + +- Open your Unity project settings +- Select the `Package Manager` +![scoped-registries](images/package-manager-scopes.png) +- Add the OpenUPM package registry: + - Name: `OpenUPM` + - URL: `https://package.openupm.com` + - Scope(s): + - `com.rest` + - `com.utilities` +- Open the Unity Package Manager window +- Change the Registry from Unity to `My Registries` +- Add the `BlockadeLabs` package + +### Via Unity Package Manager and Git url + +- Open your Unity Package Manager +- Add package from git url: `https://github.com/RageAgainstThePixel/com.rest.blockadelabs.git#upm` + +## Documentation + +### Project Setup + +```csharp +// TODO +``` diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Documentation~/images/package-manager-scopes.png b/BlockadeLabs/Packages/com.rest.blockadelabs/Documentation~/images/package-manager-scopes.png similarity index 100% rename from ProjectScope.ProjectName/Packages/com.projectscope.projectname/Documentation~/images/package-manager-scopes.png rename to BlockadeLabs/Packages/com.rest.blockadelabs/Documentation~/images/package-manager-scopes.png diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Editor.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor.meta new file mode 100644 index 0000000..bdd4b52 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2101eecab6b0eb541b5366934d8d4cf0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Editor/AssemblyInfo.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/AssemblyInfo.cs similarity index 100% rename from ProjectScope.ProjectName/Packages/com.projectscope.projectname/Editor/AssemblyInfo.cs rename to BlockadeLabs/Packages/com.rest.blockadelabs/Editor/AssemblyInfo.cs diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/AssemblyInfo.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/AssemblyInfo.cs.meta new file mode 100644 index 0000000..2319a74 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2dd06a02189fd9644b6bbe52ee0d68a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Editor/ProjectScope.ProjectName.Editor.asmdef b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabs.Editor.asmdef similarity index 58% rename from ProjectScope.ProjectName/Packages/com.projectscope.projectname/Editor/ProjectScope.ProjectName.Editor.asmdef rename to BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabs.Editor.asmdef index ff9b17a..781a5ca 100644 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Editor/ProjectScope.ProjectName.Editor.asmdef +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabs.Editor.asmdef @@ -1,8 +1,10 @@ { - "name": "ProjectScope.ProjectName.Editor", - "rootNamespace": "ProjectScope.ProjectName.Editor", + "name": "BlockadeLabs.Editor", + "rootNamespace": "BlockadeLabs.Editor", "references": [ - "ProjectScope.ProjectName" + "GUID:0e64303a4898a4d4ba94306e88e6c025", + "GUID:7958db66189566541a6363568aee1575", + "GUID:28b599e4adde9c94a9b9667d7b08fe83" ], "includePlatforms": [ "Editor" diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabs.Editor.asmdef.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabs.Editor.asmdef.meta new file mode 100644 index 0000000..24a674b --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabs.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 39d59c8b802fd4040ab75dfad7d4de02 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabsConfigurationInspector.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabsConfigurationInspector.cs new file mode 100644 index 0000000..e3e8aae --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabsConfigurationInspector.cs @@ -0,0 +1,74 @@ +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEditor; +using Utilities.Rest.Editor; + +namespace BlockadeLabs.Editor +{ + [CustomEditor(typeof(BlockadeLabsConfiguration))] + public class BlockadeLabsConfigurationInspector : BaseConfigurationInspector + { + private static bool triggerReload; + + private SerializedProperty apiKey; + private SerializedProperty proxyDomain; + + #region Project Settings Window + + [SettingsProvider] + private static SettingsProvider Preferences() + => GetSettingsProvider(nameof(BlockadeLabs), CheckReload); + + #endregion Project Settings Window + + #region Inspector Window + + private void OnEnable() + { + GetOrCreateInstance(target); + + try + { + apiKey = serializedObject.FindProperty(nameof(apiKey)); + proxyDomain = serializedObject.FindProperty(nameof(proxyDomain)); + } + catch (Exception) + { + // Ignored + } + } + + private void OnDisable() => CheckReload(); + + public override void OnInspectorGUI() + { + serializedObject.Update(); + EditorGUILayout.Space(); + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(apiKey); + EditorGUILayout.PropertyField(proxyDomain); + + if (EditorGUI.EndChangeCheck()) + { + triggerReload = true; + } + + EditorGUI.indentLevel--; + serializedObject.ApplyModifiedProperties(); + } + + #endregion Inspector Window + + private static void CheckReload() + { + if (triggerReload) + { + triggerReload = false; + EditorUtility.RequestScriptReload(); + } + } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabsConfigurationInspector.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabsConfigurationInspector.cs.meta new file mode 100644 index 0000000..d0d76b4 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Editor/BlockadeLabsConfigurationInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3d5e338fe6bf4e9479d8eb094f4a4a36 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/LICENSE.md b/BlockadeLabs/Packages/com.rest.blockadelabs/LICENSE.md similarity index 96% rename from ProjectScope.ProjectName/Packages/com.projectscope.projectname/LICENSE.md rename to BlockadeLabs/Packages/com.rest.blockadelabs/LICENSE.md index 874421a..5687aba 100644 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/LICENSE.md +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) #CURRENT_YEAR# ProjectAuthor +Copyright (c) 2023 StephenHodgson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/LICENSE.md.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/LICENSE.md.meta new file mode 100644 index 0000000..8aa8d81 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 614863ad2d599b8468e993d3cd417383 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime.meta new file mode 100644 index 0000000..f0330d3 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2cf002517315eed4eb875cc600973dc7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/AssemblyInfo.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/AssemblyInfo.cs new file mode 100644 index 0000000..074e02e --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/AssemblyInfo.cs @@ -0,0 +1,6 @@ +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("BlockadeLabs.Tests")] +[assembly: InternalsVisibleTo("BlockadeLabs.Editor")] diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/AssemblyInfo.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/AssemblyInfo.cs.meta new file mode 100644 index 0000000..f9f505f --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eba84567d64d2aa4fae5f247a3b315de +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Runtime/ProjectScope.ProjectName.asmdef b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabs.asmdef similarity index 58% rename from ProjectScope.ProjectName/Packages/com.projectscope.projectname/Runtime/ProjectScope.ProjectName.asmdef rename to BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabs.asmdef index 966cd46..3122f0b 100644 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Runtime/ProjectScope.ProjectName.asmdef +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabs.asmdef @@ -1,7 +1,10 @@ { - "name": "ProjectScope.ProjectName", - "rootNamespace": "ProjectScope.ProjectName", - "references": [], + "name": "BlockadeLabs", + "rootNamespace": "BlockadeLabs", + "references": [ + "GUID:a6609af893242c7438d701ddd4cce46a", + "GUID:7958db66189566541a6363568aee1575" + ], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabs.asmdef.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabs.asmdef.meta new file mode 100644 index 0000000..c40dc4b --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabs.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0e64303a4898a4d4ba94306e88e6c025 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthInfo.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthInfo.cs new file mode 100644 index 0000000..579b4c2 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthInfo.cs @@ -0,0 +1,29 @@ +using System; +using System.Security.Authentication; +using UnityEngine; +using Utilities.WebRequestRest.Interfaces; + +namespace BlockadeLabs +{ + [Serializable] + public sealed class BlockadeLabsAuthInfo : IAuthInfo + { + public BlockadeLabsAuthInfo(string apiKey) + { + if (string.IsNullOrWhiteSpace(apiKey)) + { + throw new InvalidCredentialException(nameof(apiKey)); + } + + this.apiKey = apiKey; + } + + [SerializeField] + private string apiKey; + + /// + /// The API key, required to access the service. + /// + public string ApiKey => apiKey; + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthInfo.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthInfo.cs.meta new file mode 100644 index 0000000..fd180d6 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c2bb629a87fee6249865b5d1b5f8f10d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthentication.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthentication.cs new file mode 100644 index 0000000..db1aaa8 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthentication.cs @@ -0,0 +1,153 @@ +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.IO; +using System.Linq; +using UnityEngine; +using Utilities.WebRequestRest.Interfaces; + +namespace BlockadeLabs +{ + public sealed class BlockadeLabsAuthentication : AbstractAuthentication + { + internal const string CONFIG_FILE = ".blockadelabs"; + private const string BLOCKADE_LABS_API_KEY = nameof(BLOCKADE_LABS_API_KEY); + + public static implicit operator BlockadeLabsAuthentication(string apiKey) => new BlockadeLabsAuthentication(apiKey); + + /// + /// Instantiates a new Authentication object that will load the default config. + /// + public BlockadeLabsAuthentication() + { + if (cachedDefault != null) + { + return; + } + + cachedDefault = (LoadFromAsset() ?? + LoadFromDirectory()) ?? + LoadFromDirectory(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile)) ?? + LoadFromEnvironment(); + Info = cachedDefault?.Info; + } + + /// + /// Instantiates a new Authentication object with the given , which may be . + /// + /// The API key, required to access the API endpoint. + public BlockadeLabsAuthentication(string apiKey) => Info = new BlockadeLabsAuthInfo(apiKey); + + /// + /// Instantiates a new Authentication object with the given , which may be . + /// + /// + public BlockadeLabsAuthentication(BlockadeLabsAuthInfo authInfo) => Info = authInfo; + + /// + public override BlockadeLabsAuthInfo Info { get; } + + private static BlockadeLabsAuthentication cachedDefault; + + /// + /// The default authentication to use when no other auth is specified. + /// This can be set manually, or automatically loaded via environment variables or a config file. + /// + /// + public static BlockadeLabsAuthentication Default + { + get => cachedDefault ??= new BlockadeLabsAuthentication(); + internal set => cachedDefault = value; + } + + /// + public override BlockadeLabsAuthentication LoadFromAsset() + => Resources.LoadAll(string.Empty) + .Where(asset => asset != null) + .Where(asset => asset is BlockadeLabsConfiguration config && + !string.IsNullOrWhiteSpace(config.ApiKey)) + .Select(asset => asset is BlockadeLabsConfiguration config + ? new BlockadeLabsAuthentication(config.ApiKey) + : null) + .FirstOrDefault(); + + /// + public override BlockadeLabsAuthentication LoadFromEnvironment() + { + var apiKey = Environment.GetEnvironmentVariable(BLOCKADE_LABS_API_KEY); + return string.IsNullOrEmpty(apiKey) ? null : new BlockadeLabsAuthentication(apiKey); + } + + /// + /// ReSharper disable once OptionalParameterHierarchyMismatch + public override BlockadeLabsAuthentication LoadFromDirectory(string directory = null, string filename = CONFIG_FILE, bool searchUp = true) + { + if (string.IsNullOrWhiteSpace(directory)) + { + directory = Environment.CurrentDirectory; + } + + BlockadeLabsAuthInfo tempAuthInfo = null; + + var currentDirectory = new DirectoryInfo(directory); + + while (tempAuthInfo == null && currentDirectory.Parent != null) + { + var filePath = Path.Combine(currentDirectory.FullName, filename); + + if (File.Exists(filePath)) + { + try + { + tempAuthInfo = JsonUtility.FromJson(File.ReadAllText(filePath)); + break; + } + catch (Exception) + { + // try to parse the old way for backwards support. + } + + var lines = File.ReadAllLines(filePath); + string apiKey = null; + + foreach (var line in lines) + { + var parts = line.Split('=', ':'); + + for (var i = 0; i < parts.Length - 1; i++) + { + var part = parts[i]; + var nextPart = parts[i + 1]; + + switch (part) + { + case BLOCKADE_LABS_API_KEY: + apiKey = nextPart.Trim(); + break; + } + } + } + + tempAuthInfo = new BlockadeLabsAuthInfo(apiKey); + } + + if (searchUp) + { + currentDirectory = currentDirectory.Parent; + } + else + { + break; + } + } + + if (tempAuthInfo == null || + string.IsNullOrEmpty(tempAuthInfo.ApiKey)) + { + return null; + } + + return new BlockadeLabsAuthentication(tempAuthInfo); + } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthentication.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthentication.cs.meta new file mode 100644 index 0000000..99872a6 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsAuthentication.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 71a2f4b36d6e9924a9f9a616b05893e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsBaseEndpoint.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsBaseEndpoint.cs new file mode 100644 index 0000000..26b5867 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsBaseEndpoint.cs @@ -0,0 +1,9 @@ +using Utilities.WebRequestRest; + +namespace BlockadeLabs +{ + public abstract class BlockadeLabsBaseEndpoint : BaseEndPoint + { + protected BlockadeLabsBaseEndpoint(BlockadeLabsClient client) : base(client) { } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsBaseEndpoint.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsBaseEndpoint.cs.meta new file mode 100644 index 0000000..8d6a812 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsBaseEndpoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 164dbbca81eda934898b1dde87a3f59d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsClient.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsClient.cs new file mode 100644 index 0000000..ccb83a0 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsClient.cs @@ -0,0 +1,49 @@ +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using BlockadeLabs.Skyboxes; +using Newtonsoft.Json; +using System.Collections.Generic; +using System.Security.Authentication; +using Utilities.WebRequestRest; + +namespace BlockadeLabs +{ + public sealed class BlockadeLabsClient : BaseClient + { + public BlockadeLabsClient(BlockadeLabsAuthentication authentication = null, BlockadeLabsSettings settings = null) + : base(authentication ?? BlockadeLabsAuthentication.Default, settings ?? BlockadeLabsSettings.Default) + { + JsonSerializationOptions = new JsonSerializerSettings + { + DefaultValueHandling = DefaultValueHandling.Ignore + }; + + SkyboxEndpoint = new SkyboxEndpoint(this); + } + + protected override void ValidateAuthentication() + { + if (!HasValidAuthentication) + { + throw new AuthenticationException("You must provide API authentication. Please refer to https://github.com/RageAgainstThePixel/com.rest.blockadelabs#authentication for details."); + } + } + + protected override void SetupDefaultRequestHeaders() + { + DefaultRequestHeaders = new Dictionary + { +#if !UNITY_WEBGL + {"User-Agent", "com.rest.blockadelabs" }, +#endif + {"X-API-Key", Authentication.Info.ApiKey } + }; + } + + public override bool HasValidAuthentication => !string.IsNullOrWhiteSpace(Authentication?.Info?.ApiKey); + + internal JsonSerializerSettings JsonSerializationOptions { get; } + + public SkyboxEndpoint SkyboxEndpoint { get; } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsClient.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsClient.cs.meta new file mode 100644 index 0000000..495242c --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsClient.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d8aeaf6d251e324485de96e8858496d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsConfiguration.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsConfiguration.cs new file mode 100644 index 0000000..2c9fa5d --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsConfiguration.cs @@ -0,0 +1,25 @@ +using UnityEngine; +using Utilities.WebRequestRest.Interfaces; + +namespace BlockadeLabs +{ + [CreateAssetMenu(fileName = nameof(BlockadeLabsConfiguration), menuName = nameof(BlockadeLabs) + "/" + nameof(BlockadeLabsConfiguration), order = 0)] + public sealed class BlockadeLabsConfiguration : ScriptableObject, IConfiguration + { + [SerializeField] + [Tooltip("The api key.")] + private string apiKey; + + public string ApiKey + { + get => apiKey; + internal set => apiKey = value; + } + + [SerializeField] + [Tooltip("Optional proxy domain to make requests though.")] + private string proxyDomain; + + public string ProxyDomain => proxyDomain; + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsConfiguration.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsConfiguration.cs.meta new file mode 100644 index 0000000..91b4fb6 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 432fd15d755598745846ee6a8ccd3575 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettings.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettings.cs new file mode 100644 index 0000000..6a35c2b --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettings.cs @@ -0,0 +1,46 @@ +using System.Linq; +using UnityEngine; +using Utilities.WebRequestRest.Interfaces; + +namespace BlockadeLabs +{ + public sealed class BlockadeLabsSettings : ISettings + { + public BlockadeLabsSettings() + { + if (cachedDefault != null) { return; } + + var config = Resources.LoadAll(string.Empty) + .FirstOrDefault(asset => asset != null); + + if (config != null) + { + Info = new BlockadeLabsSettingsInfo(config.ProxyDomain); + Default = new BlockadeLabsSettings(Info); + } + else + { + Info = new BlockadeLabsSettingsInfo(); + Default = new BlockadeLabsSettings(Info); + } + } + + public BlockadeLabsSettings(BlockadeLabsSettingsInfo settingsInfo) + => Info = settingsInfo; + + public BlockadeLabsSettings(string domain) + => Info = new BlockadeLabsSettingsInfo(domain); + + private static BlockadeLabsSettings cachedDefault; + + public static BlockadeLabsSettings Default + { + get => cachedDefault ??= new BlockadeLabsSettings(); + internal set => cachedDefault = value; + } + + public BlockadeLabsSettingsInfo Info { get; } + + public string BaseRequestUrlFormat => Info.BaseRequestUrlFormat; + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettings.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettings.cs.meta new file mode 100644 index 0000000..27bf890 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f7d297ad1a2d7fc499f8a6e78344d9f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettingsInfo.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettingsInfo.cs new file mode 100644 index 0000000..61d3cd7 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettingsInfo.cs @@ -0,0 +1,38 @@ +using System; +using Utilities.WebRequestRest.Interfaces; + +namespace BlockadeLabs +{ + public sealed class BlockadeLabsSettingsInfo : ISettingsInfo + { + internal const string DefaultDomain = "blockade.cloudshell.run"; + internal const string DefaultVersion = "v1"; + + public BlockadeLabsSettingsInfo() + { + Domain = DefaultDomain; + BaseRequestUrlFormat = $"https://{Domain}/api/{DefaultVersion}/{{0}}"; + } + + public BlockadeLabsSettingsInfo(string domain) + { + if (string.IsNullOrWhiteSpace(domain)) + { + domain = DefaultDomain; + } + + if (!domain.Contains('.') && + !domain.Contains(':')) + { + throw new ArgumentException($"Invalid parameter \"{nameof(domain)}\""); + } + + Domain = domain; + BaseRequestUrlFormat = $"https://{Domain}/api/{DefaultVersion}/{{0}}"; + } + + public string Domain { get; } + + public string BaseRequestUrlFormat { get; } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettingsInfo.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettingsInfo.cs.meta new file mode 100644 index 0000000..f2abe05 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/BlockadeLabsSettingsInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 79d3f6ed13f28e847860af708a30ceaa +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons.meta new file mode 100644 index 0000000..bea6e21 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 391195b07672f15469a8aa37b7a11a2b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons/blockadelabs_icon.png b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons/blockadelabs_icon.png new file mode 100644 index 0000000..4b71041 Binary files /dev/null and b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons/blockadelabs_icon.png differ diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons/blockadelabs_icon.png.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons/blockadelabs_icon.png.meta new file mode 100644 index 0000000..32f2695 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Icons/blockadelabs_icon.png.meta @@ -0,0 +1,147 @@ +fileFormatVersion: 2 +guid: c0cdfd8ee0b46544aa66ab20cde3ddd1 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 12 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMasterTextureLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 1 + wrapV: 1 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + flipbookRows: 1 + flipbookColumns: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + ignorePngGamma: 0 + applyGammaDecoding: 0 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 256 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - 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: 0 + - serializedVersion: 3 + buildTarget: Server + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - 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: 0 + - serializedVersion: 3 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes.meta new file mode 100644 index 0000000..808f243 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 654b55aa040bd4a43a28ddd4ad5770e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxEndpoint.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxEndpoint.cs new file mode 100644 index 0000000..be28758 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxEndpoint.cs @@ -0,0 +1,90 @@ +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using Newtonsoft.Json; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using UnityEngine.Scripting; +using Utilities.WebRequestRest; + +namespace BlockadeLabs.Skyboxes +{ + public sealed class SkyboxEndpoint : BlockadeLabsBaseEndpoint + { + [Preserve] + private class SkyboxMetadata + { + [Preserve] + public SkyboxMetadata([JsonProperty("request")] SkyboxInfo request) + { + Request = request; + } + + [Preserve] + [JsonProperty("request")] + public SkyboxInfo Request { get; } + } + + public SkyboxEndpoint(BlockadeLabsClient client) : base(client) { } + + protected override string Root => "skybox"; + + /// + /// Returns the list of predefined styles that can influence the overall aesthetic of your skybox generation. + /// + /// + /// A list of s. + public async Task> GetSkyboxStylesAsync(CancellationToken cancellationToken = default) + { + var endpoint = GetUrl("/styles"); + var response = await Rest.GetAsync(endpoint, parameters: new RestParameters(client.DefaultRequestHeaders), cancellationToken); + response.Validate(); + return JsonConvert.DeserializeObject>(response.Body, client.JsonSerializationOptions); + } + + /// + /// Generate a skybox image + /// + /// + /// + /// + public async Task GenerateSkyboxAsync(SkyboxRequest skyboxRequest, CancellationToken cancellationToken = default) + { + var jsonContent = JsonConvert.SerializeObject(skyboxRequest, client.JsonSerializationOptions); + var response = await Rest.PostAsync(GetUrl("/generate"), jsonContent, parameters: new RestParameters(client.DefaultRequestHeaders), cancellationToken); + response.Validate(); + var skyboxInfo = JsonConvert.DeserializeObject(response.Body, client.JsonSerializationOptions); + + var downloadTasks = new List(2) + { + Task.Run(async () => + { + skyboxInfo.MainTexture = await Rest.DownloadTextureAsync(skyboxInfo.MainTextureUrl, parameters: null, cancellationToken: cancellationToken); + }, cancellationToken), + Task.Run(async () => + { + if (!string.IsNullOrWhiteSpace(skyboxInfo.DepthTextureUrl)) + { + skyboxInfo.DepthTexture = await Rest.DownloadTextureAsync(skyboxInfo.DepthTextureUrl, parameters: null, cancellationToken: cancellationToken); + } + }, cancellationToken) + }; + + await Task.WhenAll(downloadTasks); + return skyboxInfo; + } + + /// + /// Returns the skybox metadata for the given skybox id. + /// + /// + /// + /// . + public async Task GetSkyboxInfoAsync(int id, CancellationToken cancellationToken = default) + { + var response = await Rest.GetAsync(GetUrl($"/info/{id}"), parameters: new RestParameters(client.DefaultRequestHeaders), cancellationToken); + response.Validate(); + return JsonConvert.DeserializeObject(response.Body, client.JsonSerializationOptions).Request; + } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxEndpoint.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxEndpoint.cs.meta new file mode 100644 index 0000000..d4d15d2 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxEndpoint.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 742e5bd6b969a3142b789f454809cee2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxInfo.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxInfo.cs new file mode 100644 index 0000000..b477cad --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxInfo.cs @@ -0,0 +1,83 @@ +using Newtonsoft.Json; +using System; +using UnityEngine; + +namespace BlockadeLabs.Skyboxes +{ + public sealed class SkyboxInfo + { + [JsonConstructor] + public SkyboxInfo( + [JsonProperty("id")] int id, + [JsonProperty("skybox_style_id")] int skyboxStyleId, + [JsonProperty("skybox_style_name")] string skyboxStyleName, + [JsonProperty("status")] string status, + [JsonProperty("type")] string type, + [JsonProperty("file_url")] string mainTextureUrl, + [JsonProperty("thumb_url")] string thumbUrl, + [JsonProperty("depth_map_url")] string depthTextureUrl, + [JsonProperty("title")] string title, + [JsonProperty("obfuscated_id")] string obfuscatedId, + [JsonProperty("created_at")] DateTime createdAt, + [JsonProperty("updated_at")] DateTime updatedAt) + { + Id = id; + SkyboxStyleId = skyboxStyleId; + SkyboxStyleName = skyboxStyleName; + Status = status; + Type = type; + MainTextureUrl = mainTextureUrl; + ThumbUrl = thumbUrl; + DepthTextureUrl = depthTextureUrl; + Title = title; + ObfuscatedId = obfuscatedId; + CreatedAt = createdAt; + UpdatedAt = updatedAt; + } + + [JsonProperty("id")] + public int Id { get; } + + [JsonProperty("skybox_style_id")] + public int SkyboxStyleId { get; } + + [JsonProperty("skybox_style_name")] + public string SkyboxStyleName { get; } + + [JsonProperty("status")] + public string Status { get; } + + [JsonProperty("type")] + public string Type { get; } + + [JsonProperty("file_url")] + public string MainTextureUrl { get; } + + [JsonIgnore] + public Texture2D MainTexture { get; internal set; } + + [JsonProperty("thumb_url")] + public string ThumbUrl { get; } + + [JsonIgnore] + public Texture2D Thumbnail { get; internal set; } + + [JsonProperty("depth_map_url")] + public string DepthTextureUrl { get; } + + [JsonIgnore] + public Texture2D DepthTexture { get; internal set; } + + [JsonProperty("title")] + public string Title { get; } + + [JsonProperty("obfuscated_id")] + public string ObfuscatedId { get; } + + [JsonProperty("created_at")] + public DateTime CreatedAt { get; } + + [JsonProperty("updated_at")] + public DateTime UpdatedAt { get; } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxInfo.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxInfo.cs.meta new file mode 100644 index 0000000..a6b64e5 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 651845ef3fe1a604eaafa10dd8abde60 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxRequest.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxRequest.cs new file mode 100644 index 0000000..51e4159 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxRequest.cs @@ -0,0 +1,41 @@ +using Newtonsoft.Json; + +namespace BlockadeLabs.Skyboxes +{ + public sealed class SkyboxRequest + { + public SkyboxRequest( + string prompt, + string negativeText = null, + int? seed = null, + int? skyboxStyleId = null, + int? remixImagineId = null, + bool depth = false) + { + Prompt = prompt; + NegativeText = negativeText; + Seed = seed; + SkyboxStyleId = skyboxStyleId; + RemixImagineId = remixImagineId; + Depth = depth; + } + + [JsonProperty("prompt")] + public string Prompt { get; } + + [JsonProperty("negative_text")] + public string NegativeText { get; } + + [JsonProperty("seed")] + public int? Seed { get; } + + [JsonProperty("skybox_style_id")] + public int? SkyboxStyleId { get; } + + [JsonProperty("remix_imagine_id")] + public int? RemixImagineId { get; } + + [JsonProperty("return_depth")] + public bool Depth { get; } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxRequest.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxRequest.cs.meta new file mode 100644 index 0000000..c01f7d7 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxRequest.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e23408713ed88e4eb2b6fe8c1644047 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxStyle.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxStyle.cs new file mode 100644 index 0000000..92a54d3 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxStyle.cs @@ -0,0 +1,43 @@ +using Newtonsoft.Json; + +namespace BlockadeLabs.Skyboxes +{ + public sealed class SkyboxStyle + { + [JsonConstructor] + public SkyboxStyle( + [JsonProperty("id")] int id, + [JsonProperty("name")] string name, + [JsonProperty("max-char")] string maxChar, + [JsonProperty("negative-text-max-char")] int negativeTextMaxChar, + [JsonProperty("image")] string image, + [JsonProperty("sort_order")] int sortOrder + ) + { + Id = id; + Name = name; + MaxChar = maxChar; + NegativeTextMaxChar = negativeTextMaxChar; + Image = image; + SortOrder = sortOrder; + } + + [JsonProperty("id")] + public int Id { get; } + + [JsonProperty("name")] + public string Name { get; } + + [JsonProperty("max-char")] + public string MaxChar { get; } + + [JsonProperty("negative-text-max-char")] + public int NegativeTextMaxChar { get; } + + [JsonProperty("image")] + public string Image { get; } + + [JsonProperty("sort_order")] + public int SortOrder { get; } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxStyle.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxStyle.cs.meta new file mode 100644 index 0000000..f8466d7 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Runtime/Skyboxes/SkyboxStyle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 202f86bacf591e04b8d0f51e5dd377d5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Tests.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests.meta new file mode 100644 index 0000000..b240f38 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e768a97a35dd1c478aeae4eeacbb6ae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Tests/ProjectScope.ProjectName.Tests.asmdef b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/BlockadeLabs.Tests.asmdef similarity index 77% rename from ProjectScope.ProjectName/Packages/com.projectscope.projectname/Tests/ProjectScope.ProjectName.Tests.asmdef rename to BlockadeLabs/Packages/com.rest.blockadelabs/Tests/BlockadeLabs.Tests.asmdef index bd05375..5478d19 100644 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Tests/ProjectScope.ProjectName.Tests.asmdef +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/BlockadeLabs.Tests.asmdef @@ -1,10 +1,11 @@ { - "name": "ProjectScope.ProjectName.Tests", - "rootNamespace": "ProjectScope.ProjectName.Tests", + "name": "BlockadeLabs.Tests", + "rootNamespace": "BlockadeLabs.Tests", "references": [ "UnityEngine.TestRunner", "UnityEditor.TestRunner", - "ProjectScope.ProjectName" + "BlockadeLabs", + "Utilities.Rest" ], "includePlatforms": [ "Editor" diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/BlockadeLabs.Tests.asmdef.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/BlockadeLabs.Tests.asmdef.meta new file mode 100644 index 0000000..dff1bcc --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/BlockadeLabs.Tests.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0f8df948dff9ede48b3797e9ee24ffa1 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Authentication.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Authentication.cs new file mode 100644 index 0000000..7d9e650 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Authentication.cs @@ -0,0 +1,159 @@ +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using NUnit.Framework; +using System; +using System.IO; +using System.Security.Authentication; +using UnityEditor; +using UnityEngine; + +namespace BlockadeLabs.Tests +{ + internal class TestFixture_00_Authentication + { + [SetUp] + public void Setup() + { + var authJson = new BlockadeLabsAuthInfo("key-test12"); + var authText = JsonUtility.ToJson(authJson, true); + File.WriteAllText(BlockadeLabsAuthentication.CONFIG_FILE, authText); + } + + [Test] + public void Test_01_GetAuthFromEnv() + { + var auth = BlockadeLabsAuthentication.Default.LoadFromEnvironment(); + Assert.IsNotNull(auth); + Assert.IsNotNull(auth.Info.ApiKey); + Assert.IsNotEmpty(auth.Info.ApiKey); + } + + [Test] + public void Test_02_GetAuthFromFile() + { + var auth = BlockadeLabsAuthentication.Default.LoadFromPath(Path.GetFullPath(BlockadeLabsAuthentication.CONFIG_FILE)); + Assert.IsNotNull(auth); + Assert.IsNotNull(auth.Info.ApiKey); + Assert.AreEqual("key-test12", auth.Info.ApiKey); + } + + [Test] + public void Test_03_GetAuthFromNonExistentFile() + { + var auth = BlockadeLabsAuthentication.Default.LoadFromDirectory(filename: "bad.config"); + Assert.IsNull(auth); + } + + [Test] + public void Test_04_GetAuthFromConfiguration() + { + var configPath = $"Assets/Resources/{nameof(BlockadeLabsConfiguration)}.asset"; + var cleanup = false; + + if (!File.Exists(Path.GetFullPath(configPath))) + { + if (!Directory.Exists($"{Application.dataPath}/Resources")) + { + Directory.CreateDirectory($"{Application.dataPath}/Resources"); + } + + var instance = ScriptableObject.CreateInstance(); + instance.ApiKey = "key-test12"; + AssetDatabase.CreateAsset(instance, configPath); + cleanup = true; + } + + var config = AssetDatabase.LoadAssetAtPath(configPath); + var auth = BlockadeLabsAuthentication.Default.LoadFromAsset(); + + Assert.IsNotNull(auth); + Assert.IsNotNull(auth.Info.ApiKey); + Assert.IsNotEmpty(auth.Info.ApiKey); + Assert.AreEqual(auth.Info.ApiKey, config.ApiKey); + + if (cleanup) + { + AssetDatabase.DeleteAsset(configPath); + AssetDatabase.DeleteAsset("Assets/Resources"); + } + } + + [Test] + public void Test_05_Authentication() + { + var defaultAuth = BlockadeLabsAuthentication.Default; + var manualAuth = new BlockadeLabsAuthentication("key-testAA"); + + Assert.IsNotNull(defaultAuth); + Assert.IsNotNull(defaultAuth.Info.ApiKey); + Assert.AreEqual(defaultAuth.Info.ApiKey, BlockadeLabsAuthentication.Default.Info.ApiKey); + + BlockadeLabsAuthentication.Default = new BlockadeLabsAuthentication("key-testAA"); + Assert.IsNotNull(manualAuth); + Assert.IsNotNull(manualAuth.Info.ApiKey); + Assert.AreEqual(manualAuth.Info.ApiKey, BlockadeLabsAuthentication.Default.Info.ApiKey); + + BlockadeLabsAuthentication.Default = defaultAuth; + } + + [Test] + public void Test_06_GetKey() + { + var auth = new BlockadeLabsAuthentication("key-testAA"); + Assert.IsNotNull(auth.Info.ApiKey); + Assert.AreEqual("key-testAA", auth.Info.ApiKey); + } + + [Test] + public void Test_07_GetKeyFailed() + { + BlockadeLabsAuthentication auth = null; + + try + { + auth = new BlockadeLabsAuthentication("fail-key"); + } + catch (InvalidCredentialException) + { + Assert.IsNull(auth); + } + catch (Exception e) + { + Assert.IsTrue(false, $"Expected exception {nameof(InvalidCredentialException)} but got {e.GetType().Name}"); + } + } + + [Test] + public void Test_08_ParseKey() + { + var auth = new BlockadeLabsAuthentication("key-testAA"); + Assert.IsNotNull(auth.Info.ApiKey); + Assert.AreEqual("key-testAA", auth.Info.ApiKey); + auth = "key-testCC"; + Assert.IsNotNull(auth.Info.ApiKey); + Assert.AreEqual("key-testCC", auth.Info.ApiKey); + + auth = new BlockadeLabsAuthentication("key-testBB"); + Assert.IsNotNull(auth.Info.ApiKey); + Assert.AreEqual("key-testBB", auth.Info.ApiKey); + } + + [Test] + public void Test_12_CustomDomainConfigurationSettings() + { + var auth = new BlockadeLabsAuthentication("customIssuedToken"); + var settings = new BlockadeLabsSettings(domain: "api.your-custom-domain.com"); + var api = new BlockadeLabsClient(auth, settings); + Debug.Log(api.Settings.Info.BaseRequestUrlFormat); + } + + [TearDown] + public void TearDown() + { + if (File.Exists(BlockadeLabsAuthentication.CONFIG_FILE)) + { + File.Delete(BlockadeLabsAuthentication.CONFIG_FILE); + } + } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Authentication.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Authentication.cs.meta new file mode 100644 index 0000000..0c9836c --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Authentication.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4edef2e8edae41c4b89fa0841a587b81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Skyboxes.cs b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Skyboxes.cs new file mode 100644 index 0000000..329f529 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Skyboxes.cs @@ -0,0 +1,44 @@ +using BlockadeLabs.Skyboxes; +using NUnit.Framework; +using UnityEngine; +using Task = System.Threading.Tasks.Task; + +namespace BlockadeLabs.Tests +{ + public class TestFixture_01_Skyboxes + { + [Test] + public async Task Test_01_GetSkyboxStyles() + { + var api = new BlockadeLabsClient(); + Assert.IsNotNull(api.SkyboxEndpoint); + var result = await api.SkyboxEndpoint.GetSkyboxStylesAsync(); + Assert.IsNotNull(result); + + foreach (var skyboxStyle in result) + { + Debug.Log($"{skyboxStyle.Name}"); + } + } + + [Test] + public async Task Test_02_GenerateSkybox() + { + var api = new BlockadeLabsClient(); + Assert.IsNotNull(api.SkyboxEndpoint); + + var request = new SkyboxRequest("underwater"/*, depth: true*/); + var skyboxInfo = await api.SkyboxEndpoint.GenerateSkyboxAsync(request); + Assert.IsNotNull(skyboxInfo); + Debug.Log(skyboxInfo.MainTextureUrl); + Assert.IsNotNull(skyboxInfo.MainTexture); + Debug.Log(skyboxInfo.DepthTextureUrl); + //Assert.IsNotNull(skyboxInfo.DepthTexture); + + var result = await api.SkyboxEndpoint.GetSkyboxInfoAsync(skyboxInfo.Id); + Assert.IsNotNull(result); + Debug.Log($"Skybox: {result.Id} | {result.MainTextureUrl}"); + Assert.IsTrue(skyboxInfo.Id == result.Id); + } + } +} diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Skyboxes.cs.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Skyboxes.cs.meta new file mode 100644 index 0000000..d146a1c --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/Tests/TestFixture_00_Skyboxes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8fa4e3db4cb20043aeda323d9bf7c41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: c0cdfd8ee0b46544aa66ab20cde3ddd1, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/package.json b/BlockadeLabs/Packages/com.rest.blockadelabs/package.json new file mode 100644 index 0000000..99554b9 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/package.json @@ -0,0 +1,26 @@ +{ + "name": "com.rest.blockadelabs", + "displayName": "BlockadeLabs", + "description": "A Non-Official Blockade Labs Rest Client for Unity (UPM)", + "keywords": [], + "version": "1.0.0-preview.1", + "unity": "2021.3", + "documentationUrl": "https://github.com/RageAgainstThePixel/com.rest.blockadelabs#documentation", + "changelogUrl": "https://github.com/RageAgainstThePixel/com.rest.blockadelabs/releases", + "license": "MIT", + "repository": { + "type": "git", + "repository": "https://github.com/RageAgainstThePixel/com.rest.blockadelabs.git" + }, + "author": { + "name": "Stephen Hodgson", + "url": "https://github.com/StephenHodgson" + }, + "dependencies": { + "com.utilities.rest": "2.0.1" + }, + "publishConfig": { + "registry": "https://package.openupm.com" + }, + "hideInEditor": false +} \ No newline at end of file diff --git a/BlockadeLabs/Packages/com.rest.blockadelabs/package.json.meta b/BlockadeLabs/Packages/com.rest.blockadelabs/package.json.meta new file mode 100644 index 0000000..8771856 --- /dev/null +++ b/BlockadeLabs/Packages/com.rest.blockadelabs/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 6caaa60c6709c474aa06b5d659bc847f +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/BlockadeLabs/Packages/manifest.json b/BlockadeLabs/Packages/manifest.json new file mode 100644 index 0000000..6d3653f --- /dev/null +++ b/BlockadeLabs/Packages/manifest.json @@ -0,0 +1,17 @@ +{ + "dependencies": { + "com.unity.ide.rider": "3.0.22", + "com.unity.ide.visualstudio": "2.0.18", + "com.unity.test-framework": "1.1.33", + "com.unity.textmeshpro": "3.0.6" + }, + "scopedRegistries": [ + { + "name": "OpenUPM", + "url": "https://package.openupm.com", + "scopes": [ + "com.utilities" + ] + } + ] +} diff --git a/ProjectScope.ProjectName/ProjectSettings/AudioManager.asset b/BlockadeLabs/ProjectSettings/AudioManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/AudioManager.asset rename to BlockadeLabs/ProjectSettings/AudioManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/ClusterInputManager.asset b/BlockadeLabs/ProjectSettings/ClusterInputManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/ClusterInputManager.asset rename to BlockadeLabs/ProjectSettings/ClusterInputManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/DynamicsManager.asset b/BlockadeLabs/ProjectSettings/DynamicsManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/DynamicsManager.asset rename to BlockadeLabs/ProjectSettings/DynamicsManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/EditorBuildSettings.asset b/BlockadeLabs/ProjectSettings/EditorBuildSettings.asset similarity index 57% rename from ProjectScope.ProjectName/ProjectSettings/EditorBuildSettings.asset rename to BlockadeLabs/ProjectSettings/EditorBuildSettings.asset index 0147887..8e9efc3 100644 --- a/ProjectScope.ProjectName/ProjectSettings/EditorBuildSettings.asset +++ b/BlockadeLabs/ProjectSettings/EditorBuildSettings.asset @@ -4,5 +4,8 @@ EditorBuildSettings: m_ObjectHideFlags: 0 serializedVersion: 2 - m_Scenes: [] + m_Scenes: + - enabled: 1 + path: Assets/Demo/SkyboxDemo.unity + guid: c64e45bae6fa19d4a90c4037e84fbae5 m_configObjects: {} diff --git a/ProjectScope.ProjectName/ProjectSettings/EditorSettings.asset b/BlockadeLabs/ProjectSettings/EditorSettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/EditorSettings.asset rename to BlockadeLabs/ProjectSettings/EditorSettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/GraphicsSettings.asset b/BlockadeLabs/ProjectSettings/GraphicsSettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/GraphicsSettings.asset rename to BlockadeLabs/ProjectSettings/GraphicsSettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/InputManager.asset b/BlockadeLabs/ProjectSettings/InputManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/InputManager.asset rename to BlockadeLabs/ProjectSettings/InputManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/MemorySettings.asset b/BlockadeLabs/ProjectSettings/MemorySettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/MemorySettings.asset rename to BlockadeLabs/ProjectSettings/MemorySettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/NavMeshAreas.asset b/BlockadeLabs/ProjectSettings/NavMeshAreas.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/NavMeshAreas.asset rename to BlockadeLabs/ProjectSettings/NavMeshAreas.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/PackageManagerSettings.asset b/BlockadeLabs/ProjectSettings/PackageManagerSettings.asset similarity index 56% rename from ProjectScope.ProjectName/ProjectSettings/PackageManagerSettings.asset rename to BlockadeLabs/ProjectSettings/PackageManagerSettings.asset index 6920e3a..71f3ecd 100644 --- a/ProjectScope.ProjectName/ProjectSettings/PackageManagerSettings.asset +++ b/BlockadeLabs/ProjectSettings/PackageManagerSettings.asset @@ -12,27 +12,33 @@ MonoBehaviour: m_Script: {fileID: 13964, guid: 0000000000000000e000000000000000, type: 0} m_Name: m_EditorClassIdentifier: + m_EnablePreReleasePackages: 1 + m_EnablePackageDependencies: 1 + m_AdvancedSettingsExpanded: 1 m_ScopedRegistriesSettingsExpanded: 1 - oneTimeWarningShown: 0 + m_SeeAllPackageVersions: 0 + oneTimeWarningShown: 1 m_Registries: - m_Id: main m_Name: m_Url: https://packages.unity.com m_Scopes: [] m_IsDefault: 1 - m_UserSelectedRegistryName: + m_Capabilities: 0 + m_ConfigSource: 0 + - m_Id: scoped:project:OpenUPM + m_Name: OpenUPM + m_Url: https://package.openupm.com + m_Scopes: + - com.utilities + m_IsDefault: 0 + m_Capabilities: 0 + m_ConfigSource: 4 + m_UserSelectedRegistryName: OpenUPM m_UserAddingNewScopedRegistry: 0 m_RegistryInfoDraft: - m_ErrorMessage: - m_Original: - m_Id: - m_Name: - m_Url: - m_Scopes: [] - m_IsDefault: 0 m_Modified: 0 - m_Name: - m_Url: - m_Scopes: - - - m_SelectedScopeIndex: 0 + m_ErrorMessage: + m_UserModificationsInstanceId: -850 + m_OriginalInstanceId: -852 + m_LoadAssets: 0 diff --git a/ProjectScope.ProjectName/ProjectSettings/Physics2DSettings.asset b/BlockadeLabs/ProjectSettings/Physics2DSettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/Physics2DSettings.asset rename to BlockadeLabs/ProjectSettings/Physics2DSettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/PresetManager.asset b/BlockadeLabs/ProjectSettings/PresetManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/PresetManager.asset rename to BlockadeLabs/ProjectSettings/PresetManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/ProjectSettings.asset b/BlockadeLabs/ProjectSettings/ProjectSettings.asset similarity index 97% rename from ProjectScope.ProjectName/ProjectSettings/ProjectSettings.asset rename to BlockadeLabs/ProjectSettings/ProjectSettings.asset index 18cfda4..3e47e6a 100644 --- a/ProjectScope.ProjectName/ProjectSettings/ProjectSettings.asset +++ b/BlockadeLabs/ProjectSettings/ProjectSettings.asset @@ -3,7 +3,7 @@ --- !u!129 &1 PlayerSettings: m_ObjectHideFlags: 0 - serializedVersion: 23 + serializedVersion: 24 productGUID: 40b10b75df2bc1c4081e9d8da766a3c0 AndroidProfiler: 0 AndroidFilterTouchesWhenObscured: 0 @@ -12,8 +12,8 @@ PlayerSettings: targetDevice: 2 useOnDemandResources: 0 accelerometerFrequency: 60 - companyName: ProjectAuthor - productName: ProjectName + companyName: RageAgainstThePixel + productName: BlockadeLabs defaultCursor: {fileID: 0} cursorHotspot: {x: 0, y: 0} m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} @@ -76,7 +76,7 @@ PlayerSettings: androidFullscreenMode: 1 defaultIsNativeResolution: 1 macRetinaSupport: 1 - runInBackground: 0 + runInBackground: 1 captureSingleScreen: 0 muteOtherAudioSources: 0 Prepare IOS For Recording: 0 @@ -155,10 +155,10 @@ PlayerSettings: androidSupportedAspectRatio: 1 androidMaxAspectRatio: 2.1 applicationIdentifier: - Android: com.projectscope.projectname - Lumin: com.ProjectScope.ProjectName - Standalone: com.projectscope.projectname - iPhone: com.projectscope.projectname + Android: com.rest.blockadelabs + Lumin: com.Rest.BlockadeLabs + Standalone: com.rest.blockadelabs + iPhone: com.rest.blockadelabs buildNumber: Standalone: 0 iPhone: 0 @@ -183,7 +183,7 @@ PlayerSettings: iOSTargetOSVersionString: 15.0 tvOSSdkVersion: 0 tvOSRequireExtendedGameController: 0 - tvOSTargetOSVersionString: 11.0 + tvOSTargetOSVersionString: 12.0 uIPrerenderedIcon: 0 uIRequiresPersistentWiFi: 0 uIRequiresFullScreen: 1 @@ -583,7 +583,6 @@ PlayerSettings: switchReleaseVersion: 0 switchDisplayVersion: 1.0.0 switchStartupUserAccount: 0 - switchTouchScreenUsage: 0 switchSupportedLanguagesMask: 0 switchLogoType: 0 switchApplicationErrorCodeCategory: @@ -625,6 +624,7 @@ PlayerSettings: switchNativeFsCacheSize: 32 switchIsHoldTypeHorizontal: 0 switchSupportedNpadCount: 8 + switchEnableTouchScreen: 1 switchSocketConfigEnabled: 0 switchTcpInitialSendBufferSize: 32 switchTcpInitialReceiveBufferSize: 64 @@ -746,7 +746,23 @@ PlayerSettings: Server: 1 Standalone: 1 il2cppCompilerConfiguration: {} - managedStrippingLevel: {} + managedStrippingLevel: + Android: 1 + EmbeddedLinux: 1 + GameCoreScarlett: 1 + GameCoreXboxOne: 1 + Lumin: 1 + Nintendo Switch: 1 + PS4: 1 + PS5: 1 + Server: 1 + Stadia: 1 + Standalone: 1 + WebGL: 1 + Windows Store Apps: 1 + XboxOne: 1 + iPhone: 1 + tvOS: 1 incrementalIl2cppBuild: {} suppressCommonWarnings: 1 allowUnsafeCode: 0 @@ -762,14 +778,14 @@ PlayerSettings: Windows Store Apps: 6 m_RenderingPath: 1 m_MobileRenderingPath: 1 - metroPackageName: com.ProjectScope.ProjectName + metroPackageName: com.Rest.BlockadeLabs metroPackageVersion: 0.1.0.0 metroCertificatePath: metroCertificatePassword: metroCertificateSubject: metroCertificateIssuer: metroCertificateNotAfter: 0000000000000000 - metroApplicationDescription: com.ProjectScope.ProjectName + metroApplicationDescription: com.Rest.BlockadeLabs wsaImages: {} metroTileShortName: metroTileShowName: 0 @@ -785,7 +801,7 @@ PlayerSettings: metroSplashScreenUseBackgroundColor: 0 platformCapabilities: WindowsStoreApps: - EnterpriseAuthentication: False + CodeGeneration: False OfflineMapsManagement: False HumanInterfaceDevice: False Location: False @@ -819,10 +835,10 @@ PlayerSettings: PointOfService: False RecordedCallsFolder: False Contacts: False + Proximity: False InternetClient: False - CodeGeneration: False BackgroundMediaPlayback: False - Proximity: False + EnterpriseAuthentication: False metroTargetDeviceFamilies: Desktop: False Holographic: False diff --git a/BlockadeLabs/ProjectSettings/ProjectVersion.txt b/BlockadeLabs/ProjectSettings/ProjectVersion.txt new file mode 100644 index 0000000..6c676f0 --- /dev/null +++ b/BlockadeLabs/ProjectSettings/ProjectVersion.txt @@ -0,0 +1,2 @@ +m_EditorVersion: 2021.3.24f1 +m_EditorVersionWithRevision: 2021.3.24f1 (cf10dcf7010d) diff --git a/ProjectScope.ProjectName/ProjectSettings/QualitySettings.asset b/BlockadeLabs/ProjectSettings/QualitySettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/QualitySettings.asset rename to BlockadeLabs/ProjectSettings/QualitySettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/TagManager.asset b/BlockadeLabs/ProjectSettings/TagManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/TagManager.asset rename to BlockadeLabs/ProjectSettings/TagManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/TimeManager.asset b/BlockadeLabs/ProjectSettings/TimeManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/TimeManager.asset rename to BlockadeLabs/ProjectSettings/TimeManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/UnityConnectSettings.asset b/BlockadeLabs/ProjectSettings/UnityConnectSettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/UnityConnectSettings.asset rename to BlockadeLabs/ProjectSettings/UnityConnectSettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/VFXManager.asset b/BlockadeLabs/ProjectSettings/VFXManager.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/VFXManager.asset rename to BlockadeLabs/ProjectSettings/VFXManager.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/VersionControlSettings.asset b/BlockadeLabs/ProjectSettings/VersionControlSettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/VersionControlSettings.asset rename to BlockadeLabs/ProjectSettings/VersionControlSettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/XRSettings.asset b/BlockadeLabs/ProjectSettings/XRSettings.asset similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/XRSettings.asset rename to BlockadeLabs/ProjectSettings/XRSettings.asset diff --git a/ProjectScope.ProjectName/ProjectSettings/boot.config b/BlockadeLabs/ProjectSettings/boot.config similarity index 100% rename from ProjectScope.ProjectName/ProjectSettings/boot.config rename to BlockadeLabs/ProjectSettings/boot.config diff --git a/InitializeTemplate.ps1 b/InitializeTemplate.ps1 deleted file mode 100644 index d8772c9..0000000 --- a/InitializeTemplate.ps1 +++ /dev/null @@ -1,140 +0,0 @@ -# Copyright (c) Stephen Hodgson. All rights reserved. -# Licensed under the MIT License. See LICENSE in the project root for license information. - -$InputAuthor = Read-Host "Set Author name: (i.e. your GitHub username)" -$ProjectAuthor = "ProjectAuthor" - -$InputName = Read-Host "Enter a name for your new project" -$ProjectName = "ProjectName" - -$InputScope = Read-Host "Enter a scope for your new project (optional)" - -if(-not [String]::IsNullOrWhiteSpace($InputScope)) { - $InputScope = "$InputScope." -} - -$ProjectScope = "ProjectScope." - -Write-Host "Your new com.$($InputScope.ToLower())$($InputName.ToLower()) project is being created..." -Remove-Item -Path ".\Readme.md" -Copy-Item -Path ".\$ProjectScope$ProjectName\Packages\com.$($ProjectScope.ToLower())$($ProjectName.ToLower())\Documentation~\Readme.md" ` - -Destination ".\Readme.md" - -# Rename any directories before we crawl the folders -Rename-Item -Path ".\$ProjectScope$ProjectName\Packages\com.$($ProjectScope.ToLower())$($ProjectName.ToLower())\Runtime\$ProjectScope$ProjectName.asmdef" ` - -NewName "$InputScope$InputName.asmdef" -Rename-Item -Path ".\$ProjectScope$ProjectName\Packages\com.$($ProjectScope.ToLower())$($ProjectName.ToLower())\Editor\$ProjectScope$ProjectName.Editor.asmdef" ` - -NewName "$InputScope$InputName.Editor.asmdef" -Rename-Item -Path ".\$ProjectScope$ProjectName\Packages\com.$($ProjectScope.ToLower())$($ProjectName.ToLower())\Tests\$ProjectScope$ProjectName.Tests.asmdef" ` - -NewName "$InputScope$InputName.Tests.asmdef" -Rename-Item -Path ".\$ProjectScope$ProjectName\Packages\com.$($ProjectScope.ToLower())$($ProjectName.ToLower())" ` - -NewName "com.$($InputScope.ToLower())$($InputName.ToLower())" -Rename-Item -Path ".\$ProjectScope$ProjectName" ` - -NewName ".\$InputScope$InputName" - -$excludes = @('*Library*', '*Obj*','*InitializeTemplate*') -Get-ChildItem -Path "*"-File -Recurse -Exclude $excludes | ForEach-Object -Process { - $isValid = $true - - foreach ($exclude in $excludes) { - if ((Split-Path -Path $_.FullName -Parent) -ilike $exclude) { - $isValid = $false - break - } - } - - if ($isValid) { - Get-ChildItem -Path $_ -File | ForEach-Object -Process { - $updated = $false; - - $fileContent = Get-Content $($_.FullName) -Raw - - # Rename all PascalCase instances - if ($fileContent -cmatch $ProjectName) { - $fileContent -creplace $ProjectName, $InputName | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - if ($fileContent -cmatch $ProjectScope) { - $fileContent -creplace $ProjectScope, $InputScope | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - if ($fileContent -cmatch $ProjectAuthor) { - $fileContent -creplace $ProjectAuthor, $InputAuthor | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - $StephenHodgson = "StephenHodgson" - - if ($fileContent -cmatch $StephenHodgson) { - $fileContent -creplace $StephenHodgson, $InputAuthor | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - # Rename all lowercase instances - if ($fileContent -cmatch $ProjectName.ToLower()) { - $fileContent -creplace $ProjectName.ToLower(), $InputName.ToLower() | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - if ($fileContent -cmatch $ProjectScope.ToLower()) { - $fileContent -creplace $ProjectScope.ToLower(), $InputScope.ToLower() | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - # Rename all UPPERCASE instances - if ($fileContent -cmatch $ProjectName.ToUpper()) { - $fileContent -creplace $ProjectName.ToUpper(), $InputName.ToUpper() | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - if ($fileContent -cmatch $ProjectScope.ToUpper()) { - $fileContent -creplace $ProjectScope.ToUpper(), $InputScope.ToUpper() | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - # Update guids - if ($fileContent -match "#INSERT_GUID_HERE#") { - $fileContent -replace "#INSERT_GUID_HERE#", [guid]::NewGuid() | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - $fileContent = Get-Content $($_.FullName) -Raw - - # Update year - if ($fileContent -match "#CURRENT_YEAR#") { - $fileContent -replace "#CURRENT_YEAR#", (Get-Date).year | Set-Content $($_.FullName) -NoNewline - $updated = $true - } - - # Rename files - if ($_.Name -match $ProjectName) { - Rename-Item -LiteralPath $_.FullName -NewName ($_.Name -replace ($ProjectName, $InputName)) - $updated = $true - } - - if ($updated) { - Write-Host $_.Name - } - } - } -} - -Remove-Item -Path "InitializeTemplate.ps1" diff --git a/LICENSE.md b/LICENSE.md index 874421a..84fe352 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,6 @@ MIT License -Copyright (c) #CURRENT_YEAR# ProjectAuthor +Copyright (c) 2023 Stephen Hodgson Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Documentation~/README.md b/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Documentation~/README.md deleted file mode 100644 index 32467cd..0000000 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Documentation~/README.md +++ /dev/null @@ -1,34 +0,0 @@ -# com.projectscope.projectname - -[![openupm](https://img.shields.io/npm/v/com.projectscope.projectname?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/com.projectscope.projectname/) - -A ProjectScope.ProjectName package for the [Unity](https://unity.com/) Game Engine. - -## Installing - -### Via Unity Package Manager and OpenUPM - -- Open your Unity project settings -- Select the `Package Manager` -![scoped-registries](https://github.com/ProjectAuthor/com.projectscope.projectname/raw/main/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Documentation~/images/package-manager-scopes.png) -- Add the OpenUPM package registry: - - `Name: OpenUPM` - - `URL: https://package.openupm.com` - - `Scope(s):` - - `com.projectscope.projectname` -- Open the Unity Package Manager window -- Change the Registry from Unity to `My Registries` -- Add the `ProjectScope.ProjectName` package - -### Via Unity Package Manager and Git url - -- Open your Unity Package Manager -- Add package from git url: `https://github.com/ProjectAuthor/com.projectscope.projectname.git#upm` - -## Documentation - -### Project Setup - -```csharp -// TODO -``` diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Runtime/AssemblyInfo.cs b/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Runtime/AssemblyInfo.cs deleted file mode 100644 index 26b0717..0000000 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Runtime/AssemblyInfo.cs +++ /dev/null @@ -1 +0,0 @@ -// Licensed under the MIT License. See LICENSE in the project root for license information. diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Tests/ExampleTestScript.cs b/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Tests/ExampleTestScript.cs deleted file mode 100644 index 9fcb46b..0000000 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/Tests/ExampleTestScript.cs +++ /dev/null @@ -1,16 +0,0 @@ -// Licensed under the MIT License. See LICENSE in the project root for license information. - -using NUnit.Framework; - -namespace ProjectScope.ProjectName.Tests -{ - internal class ExampleTestScript - { - [Test] - public void ExampleTestScriptSimplePasses() - { - // A Test behaves as an ordinary method - // Use the Assert class to test conditions - } - } -} diff --git a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/package.json b/ProjectScope.ProjectName/Packages/com.projectscope.projectname/package.json deleted file mode 100644 index af591d9..0000000 --- a/ProjectScope.ProjectName/Packages/com.projectscope.projectname/package.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "name": "com.projectscope.projectname", - "displayName": "ProjectScope.ProjectName", - "description": "ProjectScope.ProjectName description goes here.", - "keywords": [], - "version": "1.0.0-preview.1", - "unity": "2021.3", - "documentationUrl": "https://github.com/ProjectAuthor/com.projectscope.projectname#documentation", - "changelogUrl": "https://github.com/ProjectAuthor/com.projectscope.projectname/releases", - "license": "MIT", - "repository": { - "type": "git", - "repository": "https://github.com/ProjectAuthor/com.projectscope.projectname.git" - }, - "author": { - "name": "ProjectAuthor", - "url": "https://github.com/ProjectAuthor" - }, - "dependencies": {}, - "publishConfig": { - "registry": "https://package.openupm.com" - } -} diff --git a/ProjectScope.ProjectName/Packages/manifest.json b/ProjectScope.ProjectName/Packages/manifest.json deleted file mode 100644 index f8211be..0000000 --- a/ProjectScope.ProjectName/Packages/manifest.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "dependencies": { - "com.unity.ide.rider": "3.0.18", - "com.unity.ide.visualstudio": "2.0.17", - "com.unity.ide.vscode": "1.2.5", - "com.unity.test-framework": "1.1.33", - "com.unity.textmeshpro": "3.0.6", - "com.unity.ugui": "1.0.0", - "com.unity.modules.ai": "1.0.0", - "com.unity.modules.androidjni": "1.0.0", - "com.unity.modules.animation": "1.0.0", - "com.unity.modules.assetbundle": "1.0.0", - "com.unity.modules.audio": "1.0.0", - "com.unity.modules.cloth": "1.0.0", - "com.unity.modules.director": "1.0.0", - "com.unity.modules.imageconversion": "1.0.0", - "com.unity.modules.imgui": "1.0.0", - "com.unity.modules.jsonserialize": "1.0.0", - "com.unity.modules.particlesystem": "1.0.0", - "com.unity.modules.physics": "1.0.0", - "com.unity.modules.physics2d": "1.0.0", - "com.unity.modules.screencapture": "1.0.0", - "com.unity.modules.terrain": "1.0.0", - "com.unity.modules.terrainphysics": "1.0.0", - "com.unity.modules.tilemap": "1.0.0", - "com.unity.modules.ui": "1.0.0", - "com.unity.modules.uielements": "1.0.0", - "com.unity.modules.umbra": "1.0.0", - "com.unity.modules.unityanalytics": "1.0.0", - "com.unity.modules.unitywebrequest": "1.0.0", - "com.unity.modules.unitywebrequestassetbundle": "1.0.0", - "com.unity.modules.unitywebrequestaudio": "1.0.0", - "com.unity.modules.unitywebrequesttexture": "1.0.0", - "com.unity.modules.unitywebrequestwww": "1.0.0", - "com.unity.modules.vehicles": "1.0.0", - "com.unity.modules.video": "1.0.0", - "com.unity.modules.vr": "1.0.0", - "com.unity.modules.wind": "1.0.0", - "com.unity.modules.xr": "1.0.0" - } -} diff --git a/ProjectScope.ProjectName/ProjectSettings/ProjectVersion.txt b/ProjectScope.ProjectName/ProjectSettings/ProjectVersion.txt deleted file mode 100644 index 61bfe8a..0000000 --- a/ProjectScope.ProjectName/ProjectSettings/ProjectVersion.txt +++ /dev/null @@ -1,2 +0,0 @@ -m_EditorVersion: 2021.3.18f1 -m_EditorVersionWithRevision: 2021.3.18f1 (3129e69bc0c7) diff --git a/README.md b/README.md index 81adf07..dcd5323 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,35 @@ -# upm-template +# com.rest.blockadelabs -A Unity package manager repository template for quickly creating and setting up new UPM package projects in Unity. +[![openupm](https://img.shields.io/npm/v/com.rest.blockadelabs?label=openupm®istry_uri=https://package.openupm.com)](https://openupm.com/packages/com.rest.blockadelabs/) -## Getting Started +A BlockadeLabs package for the [Unity](https://unity.com/) Game Engine. -1. Create a new repository in GitHub using this template -2. Clone to your local machine -3. Run the `InitializeTemplate.ps1` script from powershell, a command line, or terminal -4. Follow prompt instructions -5. Open in Unity to generate the missing meta files -6. Check in project to source control +## Installing + +### Via Unity Package Manager and OpenUPM + +- Open your Unity project settings +- Select the `Package Manager` +![scoped-registries](BlockadeLabs/Packages/com.rest.blockadelabs/Documentation~/images/package-manager-scopes.png) +- Add the OpenUPM package registry: + - Name: `OpenUPM` + - URL: `https://package.openupm.com` + - Scope(s): + - `com.rest` + - `com.utilities` +- Open the Unity Package Manager window +- Change the Registry from Unity to `My Registries` +- Add the `BlockadeLabs` package + +### Via Unity Package Manager and Git url + +- Open your Unity Package Manager +- Add package from git url: `https://github.com/RageAgainstThePixel/com.rest.blockadelabs.git#upm` + +## Documentation + +### Project Setup + +```csharp +// TODO +```