From cbf9f384d9b2b32efddd4562528d8a10715cd05d Mon Sep 17 00:00:00 2001 From: Sebastian Bularca Date: Mon, 6 Apr 2026 10:44:16 +0200 Subject: [PATCH] popup changes --- Assets/Art/UI/menu_popup_event.png.meta | 17 +- Assets/Prefabs/UI/PopupHeader.prefab | 139 +++++++ Assets/Prefabs/UI/PopupHeader.prefab.meta | 7 + Assets/Prefabs/UI/PopupIcon.prefab | 77 ++++ Assets/Prefabs/UI/PopupIcon.prefab.meta | 7 + Assets/Prefabs/UI/PopupReference.prefab | 264 ++++++++++++++ Assets/Prefabs/UI/PopupReference.prefab.meta | 7 + Assets/Prefabs/UI/PopupSeparator.prefab | 77 ++++ Assets/Prefabs/UI/PopupSeparator.prefab.meta | 7 + Assets/Prefabs/UI/PopupStat.prefab | 340 ++++++++++++++++++ Assets/Prefabs/UI/PopupStat.prefab.meta | 7 + Assets/Prefabs/UI/PopupText.prefab | 139 +++++++ Assets/Prefabs/UI/PopupText.prefab.meta | 7 + Packages/com.jovian.popup-system/Editor.meta | 8 + .../Jovian.PopupSystem.Editor.asmdef.meta | 7 + .../Editor/PopupSettingsProvider.cs.meta | 2 + Packages/com.jovian.popup-system/README.md | 20 +- .../com.jovian.popup-system/README.md.meta | 7 + Packages/com.jovian.popup-system/Runtime.meta | 8 + .../Runtime/FadePopupAnimator.cs.meta | 2 + .../Runtime/IPopupAnimator.cs.meta | 2 + .../Runtime/IPopupSystem.cs.meta | 2 + .../Runtime/Jovian.PopupSystem.asmdef.meta | 7 + .../Runtime/PopupCategory.cs.meta | 2 + .../PopupCategoryJsonConverter.cs.meta | 2 + .../Runtime/PopupContentBuilder.cs | 4 +- .../Runtime/PopupContentBuilder.cs.meta | 2 + .../Runtime/PopupEnums.cs.meta | 2 + .../Runtime/PopupSettings.cs.meta | 2 + .../Runtime/PopupSystem.cs | 6 +- .../Runtime/PopupSystem.cs.meta | 2 + .../com.jovian.popup-system/Runtime/UI.meta | 8 + .../UI/{PopupView.cs => PopupReference.cs} | 2 +- .../Runtime/UI/PopupReference.cs.meta | 2 + .../Runtime/UI/PopupTrigger.cs.meta | 2 + .../com.jovian.popup-system/package.json.meta | 7 + Packages/packages-lock.json | 10 + docs/plans/2026-04-06-popup-system-design.md | 28 +- .../2026-04-06-popup-system-implementation.md | 26 +- 39 files changed, 1222 insertions(+), 45 deletions(-) create mode 100644 Assets/Prefabs/UI/PopupHeader.prefab create mode 100644 Assets/Prefabs/UI/PopupHeader.prefab.meta create mode 100644 Assets/Prefabs/UI/PopupIcon.prefab create mode 100644 Assets/Prefabs/UI/PopupIcon.prefab.meta create mode 100644 Assets/Prefabs/UI/PopupReference.prefab create mode 100644 Assets/Prefabs/UI/PopupReference.prefab.meta create mode 100644 Assets/Prefabs/UI/PopupSeparator.prefab create mode 100644 Assets/Prefabs/UI/PopupSeparator.prefab.meta create mode 100644 Assets/Prefabs/UI/PopupStat.prefab create mode 100644 Assets/Prefabs/UI/PopupStat.prefab.meta create mode 100644 Assets/Prefabs/UI/PopupText.prefab create mode 100644 Assets/Prefabs/UI/PopupText.prefab.meta create mode 100644 Packages/com.jovian.popup-system/Editor.meta create mode 100644 Packages/com.jovian.popup-system/Editor/Jovian.PopupSystem.Editor.asmdef.meta create mode 100644 Packages/com.jovian.popup-system/Editor/PopupSettingsProvider.cs.meta create mode 100644 Packages/com.jovian.popup-system/README.md.meta create mode 100644 Packages/com.jovian.popup-system/Runtime.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/FadePopupAnimator.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/IPopupAnimator.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/IPopupSystem.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/Jovian.PopupSystem.asmdef.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/PopupCategory.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/PopupCategoryJsonConverter.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/PopupEnums.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/PopupSettings.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/PopupSystem.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/UI.meta rename Packages/com.jovian.popup-system/Runtime/UI/{PopupView.cs => PopupReference.cs} (99%) create mode 100644 Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs.meta create mode 100644 Packages/com.jovian.popup-system/Runtime/UI/PopupTrigger.cs.meta create mode 100644 Packages/com.jovian.popup-system/package.json.meta diff --git a/Assets/Art/UI/menu_popup_event.png.meta b/Assets/Art/UI/menu_popup_event.png.meta index 259738f..ad1b07f 100644 --- a/Assets/Art/UI/menu_popup_event.png.meta +++ b/Assets/Art/UI/menu_popup_event.png.meta @@ -49,7 +49,7 @@ TextureImporter: alignment: 0 spritePivot: {x: 0.5, y: 0.5} spritePixelsToUnits: 100 - spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteBorder: {x: 0, y: 1, z: 1, w: 0} spriteGenerateFallbackPhysicsShape: 1 alphaUsage: 1 alphaIsTransparency: 1 @@ -93,6 +93,19 @@ TextureImporter: ignorePlatformSupport: 0 androidETC2FallbackOverride: 0 forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 4 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 spriteSheet: serializedVersion: 2 sprites: [] @@ -101,7 +114,7 @@ TextureImporter: physicsShape: [] bones: [] spriteID: 5e97eb03825dee720800000000000000 - internalID: 0 + internalID: 1537655665 vertices: [] indices: edges: [] diff --git a/Assets/Prefabs/UI/PopupHeader.prefab b/Assets/Prefabs/UI/PopupHeader.prefab new file mode 100644 index 0000000..2435730 --- /dev/null +++ b/Assets/Prefabs/UI/PopupHeader.prefab @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &7034836061828108288 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1241885294582312999} + - component: {fileID: 1942692710355281447} + - component: {fileID: 6612787789151041457} + m_Layer: 5 + m_Name: PopupHeader + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1241885294582312999 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7034836061828108288} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -50, y: 319} + m_SizeDelta: {x: 468.9631, y: 65.1437} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1942692710355281447 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7034836061828108288} + m_CullTransparentMesh: 1 +--- !u!114 &6612787789151041457 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7034836061828108288} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + 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: New Text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_sharedMaterial: {fileID: 9074173216178389243, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 50 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 50 + m_fontStyle: 17 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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} diff --git a/Assets/Prefabs/UI/PopupHeader.prefab.meta b/Assets/Prefabs/UI/PopupHeader.prefab.meta new file mode 100644 index 0000000..d50c8c8 --- /dev/null +++ b/Assets/Prefabs/UI/PopupHeader.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: dfc1bc0bd5b4905409615c3e770a5b77 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/PopupIcon.prefab b/Assets/Prefabs/UI/PopupIcon.prefab new file mode 100644 index 0000000..03d0984 --- /dev/null +++ b/Assets/Prefabs/UI/PopupIcon.prefab @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5887814251614319338 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3721371113883694790} + - component: {fileID: 5474191059961008429} + - component: {fileID: 7093821785826926595} + m_Layer: 5 + m_Name: PopupIcon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3721371113883694790 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5887814251614319338} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5474191059961008429 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5887814251614319338} + m_CullTransparentMesh: 1 +--- !u!114 &7093821785826926595 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5887814251614319338} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + 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: 0} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 diff --git a/Assets/Prefabs/UI/PopupIcon.prefab.meta b/Assets/Prefabs/UI/PopupIcon.prefab.meta new file mode 100644 index 0000000..5498d04 --- /dev/null +++ b/Assets/Prefabs/UI/PopupIcon.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5e715f4b614d02b4fa0b4d3fcfe3c053 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/PopupReference.prefab b/Assets/Prefabs/UI/PopupReference.prefab new file mode 100644 index 0000000..903ea1c --- /dev/null +++ b/Assets/Prefabs/UI/PopupReference.prefab @@ -0,0 +1,264 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1599460330468667833 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 623181081371217224} + - component: {fileID: 5526672357430983468} + - component: {fileID: 1835601435911948781} + - component: {fileID: 695849844002832445} + m_Layer: 5 + m_Name: PopupReference + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &623181081371217224 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1599460330468667833} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 8899521584296352500} + - {fileID: 176628901263125209} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!223 &5526672357430983468 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1599460330468667833} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 2 + m_Camera: {fileID: 0} + m_PlaneDistance: 100 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 1 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 100 + m_TargetDisplay: 0 +--- !u!225 &1835601435911948781 +CanvasGroup: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1599460330468667833} + m_Enabled: 1 + m_Alpha: 1 + m_Interactable: 1 + m_BlocksRaycasts: 1 + m_IgnoreParentGroups: 0 +--- !u!114 &695849844002832445 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1599460330468667833} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: bc25da4712d7cc4419eb6f364e032431, type: 3} + m_Name: + m_EditorClassIdentifier: Jovian.PopupSystem::Jovian.PopupSystem.UI.PopupReference + content: {fileID: 176628901263125209} + canvasGroup: {fileID: 1835601435911948781} + background: {fileID: 8899521584296352500} + headerPrefab: {fileID: 6612787789151041457, guid: dfc1bc0bd5b4905409615c3e770a5b77, type: 3} + textPrefab: {fileID: 2506259255305457008, guid: bfa97c92d1878cc448ddc7dc456f4b17, type: 3} + statPrefab: {fileID: 1843470073663794312, guid: 5882db210c62d8647858933649f64c29, type: 3} + imagePrefab: {fileID: 7093821785826926595, guid: 5e715f4b614d02b4fa0b4d3fcfe3c053, type: 3} + separatorPrefab: {fileID: 5214286777979083404, guid: d5230f8d67d5a8844a7230f03937ed17, type: 3} +--- !u!1 &3774543863822571266 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 176628901263125209} + - component: {fileID: 2618782962856630769} + - component: {fileID: 6988667242421749217} + m_Layer: 5 + m_Name: Content + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &176628901263125209 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3774543863822571266} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 623181081371217224} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -52.972595, y: -49.99994} + m_SizeDelta: {x: 1078.9565, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2618782962856630769 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3774543863822571266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 59f8146938fff824cb5fd77236b75775, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.VerticalLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 2 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &6988667242421749217 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3774543863822571266} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter + m_HorizontalFit: 0 + m_VerticalFit: 2 +--- !u!1 &7921791084240859601 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8899521584296352500} + - component: {fileID: 4414385109869753182} + - component: {fileID: 532483268298381524} + - component: {fileID: 361417494609917237} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8899521584296352500 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7921791084240859601} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 623181081371217224} + 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: 1291.7905, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4414385109869753182 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7921791084240859601} + m_CullTransparentMesh: 1 +--- !u!114 &532483268298381524 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7921791084240859601} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 0.31132078, g: 0.22780241, b: 0.16006587, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 52125a3c3df558448a5af5a04dbf8d2d, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!114 &361417494609917237 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7921791084240859601} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3245ec927659c4140ac4f8d17403cc18, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.ContentSizeFitter + m_HorizontalFit: 0 + m_VerticalFit: 2 diff --git a/Assets/Prefabs/UI/PopupReference.prefab.meta b/Assets/Prefabs/UI/PopupReference.prefab.meta new file mode 100644 index 0000000..0f97358 --- /dev/null +++ b/Assets/Prefabs/UI/PopupReference.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2dfcc209b5aff734d863147e5614563c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/PopupSeparator.prefab b/Assets/Prefabs/UI/PopupSeparator.prefab new file mode 100644 index 0000000..d4ed7de --- /dev/null +++ b/Assets/Prefabs/UI/PopupSeparator.prefab @@ -0,0 +1,77 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3426404626348166472 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1299250784458062776} + - component: {fileID: 397894273528688440} + - component: {fileID: 5214286777979083404} + m_Layer: 5 + m_Name: PopupSeparator + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1299250784458062776 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3426404626348166472} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 13.6381, y: -113.30817} + m_SizeDelta: {x: 657.849, y: 4.6163} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &397894273528688440 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3426404626348166472} + m_CullTransparentMesh: 1 +--- !u!114 &5214286777979083404 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3426404626348166472} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.Image + m_Material: {fileID: 0} + m_Color: {r: 1, g: 0.61809045, b: 0.15566039, 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 diff --git a/Assets/Prefabs/UI/PopupSeparator.prefab.meta b/Assets/Prefabs/UI/PopupSeparator.prefab.meta new file mode 100644 index 0000000..e8d2ca8 --- /dev/null +++ b/Assets/Prefabs/UI/PopupSeparator.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d5230f8d67d5a8844a7230f03937ed17 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/PopupStat.prefab b/Assets/Prefabs/UI/PopupStat.prefab new file mode 100644 index 0000000..4638c34 --- /dev/null +++ b/Assets/Prefabs/UI/PopupStat.prefab @@ -0,0 +1,340 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3992841297615171806 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 292870618973774166} + - component: {fileID: 4060824052845831606} + - component: {fileID: 572642145995679888} + m_Layer: 5 + m_Name: label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &292870618973774166 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3992841297615171806} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1843470073663794312} + 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: 272.3595, y: 65.1437} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4060824052845831606 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3992841297615171806} + m_CullTransparentMesh: 1 +--- !u!114 &572642145995679888 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3992841297615171806} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + 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: New Text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_sharedMaterial: {fileID: 9074173216178389243, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 33.2 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 18 + m_fontSizeMax: 33.2 + m_fontStyle: 17 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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!1 &6246834368258800846 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1843470073663794312} + - component: {fileID: 7829576473989485776} + m_Layer: 0 + m_Name: PopupStat + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1843470073663794312 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6246834368258800846} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 292870618973774166} + - {fileID: 8849778187297648043} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -50, y: 120} + m_SizeDelta: {x: 482.4235, y: 67.3541} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7829576473989485776 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6246834368258800846} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: UnityEngine.UI::UnityEngine.UI.HorizontalLayoutGroup + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 5.4 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!1 &9078345592336978365 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8849778187297648043} + - component: {fileID: 7828883841352225497} + - component: {fileID: 6763883082192230688} + m_Layer: 5 + m_Name: value + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8849778187297648043 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9078345592336978365} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1843470073663794312} + 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: 196.91, y: 65.1437} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7828883841352225497 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9078345592336978365} + m_CullTransparentMesh: 1 +--- !u!114 &6763883082192230688 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9078345592336978365} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + 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: New Text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_sharedMaterial: {fileID: 9074173216178389243, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 31.4 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 1.5 + m_fontSizeMax: 31.4 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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} diff --git a/Assets/Prefabs/UI/PopupStat.prefab.meta b/Assets/Prefabs/UI/PopupStat.prefab.meta new file mode 100644 index 0000000..af4f09e --- /dev/null +++ b/Assets/Prefabs/UI/PopupStat.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 5882db210c62d8647858933649f64c29 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/UI/PopupText.prefab b/Assets/Prefabs/UI/PopupText.prefab new file mode 100644 index 0000000..8fd018e --- /dev/null +++ b/Assets/Prefabs/UI/PopupText.prefab @@ -0,0 +1,139 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3157287847714375358 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3436634297340404643} + - component: {fileID: 386873398398603487} + - component: {fileID: 2506259255305457008} + m_Layer: 5 + m_Name: PopupText + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3436634297340404643 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3157287847714375358} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: -50, y: 222} + m_SizeDelta: {x: 468.9631, y: 65.1437} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &386873398398603487 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3157287847714375358} + m_CullTransparentMesh: 1 +--- !u!114 &2506259255305457008 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3157287847714375358} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: Unity.TextMeshPro::TMPro.TextMeshProUGUI + 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: New Text + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_sharedMaterial: {fileID: 9074173216178389243, guid: a0ee74bf6f853704a8a568d5ef638ee9, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, 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: 34.2 + m_fontSizeBase: 36 + m_fontWeight: 400 + m_enableAutoSizing: 1 + m_fontSizeMin: 1.5 + m_fontSizeMax: 34.2 + m_fontStyle: 0 + m_HorizontalAlignment: 2 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_characterHorizontalScale: 1 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_TextWrappingMode: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 0 + m_ActiveFontFeatures: 6e72656b + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_EmojiFallbackSupport: 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} diff --git a/Assets/Prefabs/UI/PopupText.prefab.meta b/Assets/Prefabs/UI/PopupText.prefab.meta new file mode 100644 index 0000000..aed3c6a --- /dev/null +++ b/Assets/Prefabs/UI/PopupText.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bfa97c92d1878cc448ddc7dc456f4b17 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.jovian.popup-system/Editor.meta b/Packages/com.jovian.popup-system/Editor.meta new file mode 100644 index 0000000..e93f70a --- /dev/null +++ b/Packages/com.jovian.popup-system/Editor.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 608491ce009b2494c894080b243698b9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.jovian.popup-system/Editor/Jovian.PopupSystem.Editor.asmdef.meta b/Packages/com.jovian.popup-system/Editor/Jovian.PopupSystem.Editor.asmdef.meta new file mode 100644 index 0000000..7fe74c2 --- /dev/null +++ b/Packages/com.jovian.popup-system/Editor/Jovian.PopupSystem.Editor.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e663435ad13b46d40a29802dab7e52f5 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.jovian.popup-system/Editor/PopupSettingsProvider.cs.meta b/Packages/com.jovian.popup-system/Editor/PopupSettingsProvider.cs.meta new file mode 100644 index 0000000..4fe744c --- /dev/null +++ b/Packages/com.jovian.popup-system/Editor/PopupSettingsProvider.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 63a03b88ed78a934094ce61f9d127ec9 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/README.md b/Packages/com.jovian.popup-system/README.md index 27e877d..e38f6bb 100644 --- a/Packages/com.jovian.popup-system/README.md +++ b/Packages/com.jovian.popup-system/README.md @@ -17,7 +17,7 @@ Install via the Unity Package Manager by adding the package from its local path In the Unity Editor, go to **Assets > Create > Jovian > Popup System > Popup Settings**. Place the asset somewhere accessible (e.g. `Assets/Settings/PopupSettings.asset`). You can also configure settings via **Project Settings > Jovian > Popup System**. -### 2. Build a PopupView prefab +### 2. Build a PopupReference prefab See the [Prefab Setup](#prefab-setup) section below for step-by-step instructions. @@ -27,7 +27,7 @@ See the [Prefab Setup](#prefab-setup) section below for step-by-step instruction using Jovian.PopupSystem; using Jovian.PopupSystem.UI; -// Create the system. viewPrefab is a reference to your PopupView prefab. +// Create the system. viewPrefab is a reference to your PopupReference prefab. var popup = new PopupSystem(settings, viewPrefab); // Register categories you intend to use. @@ -125,7 +125,7 @@ popup.Show(PopupCategory.Skill, builder => { }, targetRect); ``` -All elements are drawn from a grow-only pool inside `PopupView`. No allocations occur once the pool is warmed. +All elements are drawn from a grow-only pool inside `PopupReference`. No allocations occur once the pool is warmed. ## PopupTrigger @@ -240,7 +240,7 @@ popupSystem.Tick(Time.deltaTime); popupSystem.Dispose(); // destroys all popup view GameObjects ``` -Each category lazily creates its own `PopupView` instance on first `Show` call. On `Dispose`, all views are destroyed. This ensures no leaked GameObjects when transitioning between game states. +Each category lazily creates its own `PopupReference` instance on first `Show` call. On `Dispose`, all views are destroyed. This ensures no leaked GameObjects when transitioning between game states. ## IPopupAnimator @@ -318,14 +318,14 @@ var popup = new PopupSystem(settings, viewPrefab, () => new ScalePopupAnimator() ## Prefab Setup -Build the `PopupView` prefab with the following hierarchy: +Build the `PopupReference` prefab with the following hierarchy: ### Step 1: Root GameObject -1. Create a new GameObject named `PopupView`. +1. Create a new GameObject named `PopupReference`. 2. Add a `Canvas` component. Set **Render Mode** to **Screen Space - Overlay**. Set **Sort Order** to match `PopupSettings.sortingOrder` (default 100). 3. Add a `CanvasGroup` component. -4. Add a `PopupView` component (from `Jovian.PopupSystem.UI`). +4. Add a `PopupReference` component (from `Jovian.PopupSystem.UI`). ### Step 2: Background @@ -354,7 +354,7 @@ Create these as child prefabs (or separate prefabs). Each must be a prefab refer ### Step 5: Wire references -On the `PopupView` component, assign: +On the `PopupReference` component, assign: - **Content** - the Content RectTransform - **Canvas Group** - the root CanvasGroup @@ -386,7 +386,7 @@ The popup system is designed for minimal runtime allocation: | Type | Namespace | Description | |---|---|---| | `IPopupSystem` | `Jovian.PopupSystem` | Main interface for showing/hiding popups. | -| `PopupSystem` | `Jovian.PopupSystem` | Concrete implementation. Constructor: `(PopupSettings, PopupView, Func)`. | +| `PopupSystem` | `Jovian.PopupSystem` | Concrete implementation. Constructor: `(PopupSettings, PopupReference, Func)`. | | `PopupSettings` | `Jovian.PopupSystem` | ScriptableObject with all configuration fields. | | `PopupCategory` | `Jovian.PopupSystem` | Readonly struct identifying a popup channel. | | `PopupContentBuilder` | `Jovian.PopupSystem` | Fluent struct for building popup content in callbacks. | @@ -395,7 +395,7 @@ The popup system is designed for minimal runtime allocation: | Type | Namespace | Description | |---|---|---| -| `PopupView` | `Jovian.PopupSystem.UI` | MonoBehaviour managing popup layout, pooling, and positioning. | +| `PopupReference` | `Jovian.PopupSystem.UI` | MonoBehaviour managing popup layout, pooling, and positioning. | | `PopupTrigger` | `Jovian.PopupSystem.UI` | MonoBehaviour for hover-based popup triggers on UI elements. | ### Animation Types diff --git a/Packages/com.jovian.popup-system/README.md.meta b/Packages/com.jovian.popup-system/README.md.meta new file mode 100644 index 0000000..35714da --- /dev/null +++ b/Packages/com.jovian.popup-system/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: d33518dac7899604c9ceeda21897315d +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.jovian.popup-system/Runtime.meta b/Packages/com.jovian.popup-system/Runtime.meta new file mode 100644 index 0000000..72bcd33 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05f691cbfb7413f4fb735b2ec732ff06 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.jovian.popup-system/Runtime/FadePopupAnimator.cs.meta b/Packages/com.jovian.popup-system/Runtime/FadePopupAnimator.cs.meta new file mode 100644 index 0000000..82e61f4 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/FadePopupAnimator.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 254bb620ce056dd41905258eb0f070d7 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/IPopupAnimator.cs.meta b/Packages/com.jovian.popup-system/Runtime/IPopupAnimator.cs.meta new file mode 100644 index 0000000..e4042d5 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/IPopupAnimator.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b146d885db3dcef4fa70abd3f43683d3 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/IPopupSystem.cs.meta b/Packages/com.jovian.popup-system/Runtime/IPopupSystem.cs.meta new file mode 100644 index 0000000..9e3e3bc --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/IPopupSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 65d563f87bb09de48b8edd12101cdd11 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/Jovian.PopupSystem.asmdef.meta b/Packages/com.jovian.popup-system/Runtime/Jovian.PopupSystem.asmdef.meta new file mode 100644 index 0000000..91cdc89 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/Jovian.PopupSystem.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 31bcaef770c58d94db7f78106f15fd4e +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.jovian.popup-system/Runtime/PopupCategory.cs.meta b/Packages/com.jovian.popup-system/Runtime/PopupCategory.cs.meta new file mode 100644 index 0000000..4a1f739 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/PopupCategory.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bcd1fb0ef93fed0489a43977bc71594b \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/PopupCategoryJsonConverter.cs.meta b/Packages/com.jovian.popup-system/Runtime/PopupCategoryJsonConverter.cs.meta new file mode 100644 index 0000000..da576f7 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/PopupCategoryJsonConverter.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 683182ef8e2aa6b4daffc547c481b768 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs b/Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs index c242a96..be08a06 100644 --- a/Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs +++ b/Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs @@ -3,9 +3,9 @@ using UnityEngine; namespace Jovian.PopupSystem { public struct PopupContentBuilder { - readonly PopupView view; + readonly PopupReference view; - public PopupContentBuilder(PopupView view) { + public PopupContentBuilder(PopupReference view) { this.view = view; } diff --git a/Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs.meta b/Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs.meta new file mode 100644 index 0000000..1f09579 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: b9f4094c471d0464e95e330331acc813 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/PopupEnums.cs.meta b/Packages/com.jovian.popup-system/Runtime/PopupEnums.cs.meta new file mode 100644 index 0000000..8b8bf19 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/PopupEnums.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 01e69680e496eca4daebbc1874e3a7d9 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/PopupSettings.cs.meta b/Packages/com.jovian.popup-system/Runtime/PopupSettings.cs.meta new file mode 100644 index 0000000..849d77c --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/PopupSettings.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: e38e313f3665d464b82b22699b2a4634 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/PopupSystem.cs b/Packages/com.jovian.popup-system/Runtime/PopupSystem.cs index ef3f1b8..21408b7 100644 --- a/Packages/com.jovian.popup-system/Runtime/PopupSystem.cs +++ b/Packages/com.jovian.popup-system/Runtime/PopupSystem.cs @@ -7,11 +7,11 @@ using Object = UnityEngine.Object; namespace Jovian.PopupSystem { public sealed class PopupSystem : IPopupSystem { readonly PopupSettings settings; - readonly PopupView viewPrefab; + readonly PopupReference viewPrefab; readonly Func animatorFactory; readonly Dictionary categories = new(); - public PopupSystem(PopupSettings settings, PopupView viewPrefab, Func animatorFactory = null) { + public PopupSystem(PopupSettings settings, PopupReference viewPrefab, Func animatorFactory = null) { this.settings = settings; this.viewPrefab = viewPrefab; this.animatorFactory = animatorFactory ?? (() => new FadePopupAnimator()); @@ -171,7 +171,7 @@ namespace Jovian.PopupSystem { } private sealed class ViewState { - public PopupView view; + public PopupReference view; public IPopupAnimator animator; public int priority; public float delay; diff --git a/Packages/com.jovian.popup-system/Runtime/PopupSystem.cs.meta b/Packages/com.jovian.popup-system/Runtime/PopupSystem.cs.meta new file mode 100644 index 0000000..b4bdf62 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/PopupSystem.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 056ed88d12add674798ad4e6300bf222 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/UI.meta b/Packages/com.jovian.popup-system/Runtime/UI.meta new file mode 100644 index 0000000..0cb98a2 --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4459a298af1a37f47af7b7b70655ee0d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/com.jovian.popup-system/Runtime/UI/PopupView.cs b/Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs similarity index 99% rename from Packages/com.jovian.popup-system/Runtime/UI/PopupView.cs rename to Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs index 2bb9f87..11b25e4 100644 --- a/Packages/com.jovian.popup-system/Runtime/UI/PopupView.cs +++ b/Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs @@ -5,7 +5,7 @@ using UnityEngine.InputSystem; using UnityEngine.UI; namespace Jovian.PopupSystem.UI { - public class PopupView : MonoBehaviour { + public class PopupReference : MonoBehaviour { [SerializeField] RectTransform content; [SerializeField] CanvasGroup canvasGroup; [SerializeField] RectTransform background; diff --git a/Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs.meta b/Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs.meta new file mode 100644 index 0000000..3df659a --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: bc25da4712d7cc4419eb6f364e032431 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/Runtime/UI/PopupTrigger.cs.meta b/Packages/com.jovian.popup-system/Runtime/UI/PopupTrigger.cs.meta new file mode 100644 index 0000000..a85049b --- /dev/null +++ b/Packages/com.jovian.popup-system/Runtime/UI/PopupTrigger.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 4ef9d21a19cd4db4f9d5491202547c05 \ No newline at end of file diff --git a/Packages/com.jovian.popup-system/package.json.meta b/Packages/com.jovian.popup-system/package.json.meta new file mode 100644 index 0000000..dac6e10 --- /dev/null +++ b/Packages/com.jovian.popup-system/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3120e52713c91c44d9790e65c94b0869 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/packages-lock.json b/Packages/packages-lock.json index 5dda8a1..f85b015 100644 --- a/Packages/packages-lock.json +++ b/Packages/packages-lock.json @@ -42,6 +42,16 @@ "com.unity.nuget.newtonsoft-json": "3.2.1" } }, + "com.jovian.popup-system": { + "version": "file:com.jovian.popup-system", + "depth": 0, + "source": "embedded", + "dependencies": { + "com.unity.textmeshpro": "3.0.6", + "com.unity.inputsystem": "1.18.0", + "com.unity.nuget.newtonsoft-json": "3.2.1" + } + }, "com.jovian.savesystem": { "version": "file:com.jovian.savesystem", "depth": 0, diff --git a/docs/plans/2026-04-06-popup-system-design.md b/docs/plans/2026-04-06-popup-system-design.md index 41d4c31..fed8a79 100644 --- a/docs/plans/2026-04-06-popup-system-design.md +++ b/docs/plans/2026-04-06-popup-system-design.md @@ -16,11 +16,11 @@ Game Code / PopupTrigger MonoBehaviour ▼ IPopupSystem (per-game-state instance, injected via constructor DI) │ RegisterCategory(PopupCategory, priority) - │ One PopupView per category (lazy-created on first Show) + │ One PopupReference per category (lazy-created on first Show) │ Priority: higher priority category dismisses lower on show │ Tick()-driven delay timers and animations (no coroutines) ▼ -PopupView (MonoBehaviour — one instance per registered category) +PopupReference (MonoBehaviour — one instance per registered category) │ Canvas + CanvasGroup for transitions │ Content parent (VerticalLayoutGroup + ContentSizeFitter) │ Grow-only element cache (reuse, never destroy) @@ -34,7 +34,7 @@ IPopupAnimator (extensible interface for show/hide transitions) PopupContentBuilder (struct, fluent API) .AddHeader(text) .AddText(text) .AddStat(label, value) .AddImage(sprite) .AddSeparator() - → activates pre-existing child elements in PopupView + → activates pre-existing child elements in PopupReference ``` ## Core Types @@ -106,24 +106,24 @@ public interface IPopupSystem { ### PopupSystem (implementation) -- `Dictionary` — O(1) lookup by category -- `PopupViewState` holds: PopupView instance (null until first show), priority, delay timer, pending show data +- `Dictionary` — O(1) lookup by category +- `PopupReferenceState` holds: PopupReference instance (null until first show), priority, delay timer, pending show data - `Tick(deltaTime)` drives delay countdown and animation lerp — no coroutines - On `Show()`: - If a higher-priority popup is already visible, queue or cancel - Start delay timer; on expiry, activate the view - - PopupView clears content (deactivates cached elements), runs builder callback, positions, animates in + - PopupReference clears content (deactivates cached elements), runs builder callback, positions, animates in - On `Hide()`: - Animate out, deactivate - On `Dispose()`: - - Destroy all PopupView GameObjects + - Destroy all PopupReference GameObjects -### PopupView (MonoBehaviour) +### PopupReference (MonoBehaviour) Single prefab, instantiated once per category: ``` -PopupView (Canvas, CanvasGroup, RectMask2D) +PopupReference (Canvas, CanvasGroup, RectMask2D) ├── Content (RectTransform, VerticalLayoutGroup, ContentSizeFitter) │ ├── [cached] HeaderElement (TMP_Text, deactivated) │ ├── [cached] TextElement x N (TMP_Text, deactivated) @@ -153,7 +153,7 @@ PopupView (Canvas, CanvasGroup, RectMask2D) ```csharp public struct PopupContentBuilder { - readonly PopupView view; + readonly PopupReference view; public PopupContentBuilder AddHeader(string text); public PopupContentBuilder AddText(string text); @@ -165,7 +165,7 @@ public struct PopupContentBuilder { } ``` -Each method activates a cached element from PopupView, sets its data, calls `SetAsLastSibling()` for ordering. Returns `this` for chaining. No allocations. +Each method activates a cached element from PopupReference, sets its data, calls `SetAsLastSibling()` for ordering. Returns `this` for chaining. No allocations. ### PopupTrigger (MonoBehaviour) @@ -244,7 +244,7 @@ Packages/com.jovian.popup-system/ │ ├── FadePopupAnimator.cs │ ├── PopupContentBuilder.cs │ └── UI/ -│ ├── PopupView.cs +│ ├── PopupReference.cs │ └── PopupTrigger.cs ├── Editor/ │ ├── Jovian.PopupSystem.Editor.asmdef @@ -264,7 +264,7 @@ Packages/com.jovian.popup-system/ ```csharp // In GameModeGameState or similar: var popupSettings = Addressables.LoadAssetAsync("PopupSettings").WaitForCompletion(); -var popupViewPrefab = Addressables.LoadAssetAsync("PopupViewPrefab").WaitForCompletion(); +var popupViewPrefab = Addressables.LoadAssetAsync("PopupReferencePrefab").WaitForCompletion(); var popupSystem = new PopupSystem(popupSettings, popupViewPrefab); popupSystem.RegisterCategory(PopupCategory.Character, priority: 10); popupSystem.RegisterCategory(PopupCategory.Item, priority: 5); @@ -291,7 +291,7 @@ popupSystem.Dispose(); ## Prefab Setup -### PopupView prefab +### PopupReference prefab 1. Root: Canvas (Screen Space Overlay, sorting order from settings), CanvasGroup (alpha=0) 2. Child "Content": RectTransform, VerticalLayoutGroup (Child Force Expand Width: true, Height: false, Spacing: 4, Padding: 8), ContentSizeFitter (Vertical Fit: Preferred Size, Horizontal Fit: Preferred Size up to maxPopupWidth) diff --git a/docs/plans/2026-04-06-popup-system-implementation.md b/docs/plans/2026-04-06-popup-system-implementation.md index 080e9d1..f218408 100644 --- a/docs/plans/2026-04-06-popup-system-implementation.md +++ b/docs/plans/2026-04-06-popup-system-implementation.md @@ -4,7 +4,7 @@ **Goal:** Build `com.jovian.popup-system`, a low-allocation popup/tooltip package with category-based isolation, fluent content builder, grow-only element cache, screen edge clamping, and extensible animations. -**Architecture:** Per-game-state `IPopupSystem` instances with registered categories. Each category lazily creates one `PopupView` MonoBehaviour that reuses cached content elements. `PopupTrigger` MonoBehaviour handles hover detection. `PopupContentBuilder` struct operates directly on cached elements. Float-based timers in `Tick()` — no coroutines. +**Architecture:** Per-game-state `IPopupSystem` instances with registered categories. Each category lazily creates one `PopupReference` MonoBehaviour that reuses cached content elements. `PopupTrigger` MonoBehaviour handles hover detection. `PopupContentBuilder` struct operates directly on cached elements. Float-based timers in `Tick()` — no coroutines. **Tech Stack:** Unity 6 / C# 9, TextMeshPro, Unity Input System, Newtonsoft.Json @@ -373,12 +373,12 @@ git commit -m "feat: add IPopupAnimator interface and FadePopupAnimator" --- -### Task 5: PopupView MonoBehaviour with element cache +### Task 5: PopupReference MonoBehaviour with element cache **Files:** -- Create: `Packages/com.jovian.popup-system/Runtime/UI/PopupView.cs` +- Create: `Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs` -**Step 1: Implement PopupView with grow-only element cache, positioning, and screen clamping** +**Step 1: Implement PopupReference with grow-only element cache, positioning, and screen clamping** ```csharp using System.Collections.Generic; @@ -388,7 +388,7 @@ using UnityEngine.InputSystem; using UnityEngine.UI; namespace Jovian.PopupSystem.UI { - public class PopupView : MonoBehaviour { + public class PopupReference : MonoBehaviour { [SerializeField] RectTransform content; [SerializeField] CanvasGroup canvasGroup; [SerializeField] RectTransform background; @@ -563,8 +563,8 @@ namespace Jovian.PopupSystem.UI { **Step 2: Commit** ```bash -git add Packages/com.jovian.popup-system/Runtime/UI/PopupView.cs -git commit -m "feat: add PopupView with grow-only element cache and positioning" +git add Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs +git commit -m "feat: add PopupReference with grow-only element cache and positioning" ``` --- @@ -582,9 +582,9 @@ using UnityEngine; namespace Jovian.PopupSystem { public struct PopupContentBuilder { - readonly PopupView view; + readonly PopupReference view; - public PopupContentBuilder(PopupView view) { + public PopupContentBuilder(PopupReference view) { this.view = view; } @@ -685,11 +685,11 @@ using Object = UnityEngine.Object; namespace Jovian.PopupSystem { public sealed class PopupSystem : IPopupSystem { readonly PopupSettings settings; - readonly PopupView viewPrefab; + readonly PopupReference viewPrefab; readonly IPopupAnimator animator; readonly Dictionary categories = new(); - public PopupSystem(PopupSettings settings, PopupView viewPrefab, IPopupAnimator animator = null) { + public PopupSystem(PopupSettings settings, PopupReference viewPrefab, IPopupAnimator animator = null) { this.settings = settings; this.viewPrefab = viewPrefab; this.animator = animator ?? new FadePopupAnimator(); @@ -847,7 +847,7 @@ namespace Jovian.PopupSystem { } private sealed class ViewState { - public PopupView view; + public PopupReference view; public int priority; public float delay; public float delayTimer; @@ -993,7 +993,7 @@ git commit -m "feat: add PopupSettingsProvider for Project Settings" | `Packages/com.jovian.popup-system/Runtime/PopupContentBuilder.cs` | Create | Fluent builder struct | | `Packages/com.jovian.popup-system/Runtime/IPopupSystem.cs` | Create | System interface | | `Packages/com.jovian.popup-system/Runtime/PopupSystem.cs` | Create | System implementation | -| `Packages/com.jovian.popup-system/Runtime/UI/PopupView.cs` | Create | MonoBehaviour with element cache | +| `Packages/com.jovian.popup-system/Runtime/UI/PopupReference.cs` | Create | MonoBehaviour with element cache | | `Packages/com.jovian.popup-system/Runtime/UI/PopupTrigger.cs` | Create | Hover trigger MonoBehaviour | | `Packages/com.jovian.popup-system/README.md` | Create | Package documentation | | `Packages/com.jovian.popup-system/Editor/PopupSettingsProvider.cs` | Create | Project Settings UI |