diff --git a/CHANGELOG.md b/CHANGELOG.md index d280945..9d4f972 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this package will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html) +## [0.12.0] - 2025-01-08 + +**New**: +- Added *InteractableTextView* script to allow linking text code execution, e.g open URLs in the broser + +**Changed**: +- Renamed *AdjustScreenSizeFitter* to *AdjustScreenSizeFitterView* to mark it as a View in the architecture conventions +- Moved *AdjustScreenSizeFitterView* and *NonDrawingView*, *SafeAreaHelperView* to the Views folder and namespace to organize the codebase accordingly + ## [0.11.0] - 2025-01-05 **New**: diff --git a/Editor/NonDrawingViewEditor.cs b/Editor/NonDrawingViewEditor.cs index f6fdc62..a5a5f35 100644 --- a/Editor/NonDrawingViewEditor.cs +++ b/Editor/NonDrawingViewEditor.cs @@ -1,4 +1,4 @@ -using GameLovers.UiService; +using GameLovers.UiService.Views; using UnityEditor; using UnityEditor.UI; using UnityEngine; diff --git a/Runtime/GameLovers.UiService.asmdef b/Runtime/GameLovers.UiService.asmdef index 4a5f966..f7d88a6 100644 --- a/Runtime/GameLovers.UiService.asmdef +++ b/Runtime/GameLovers.UiService.asmdef @@ -4,6 +4,7 @@ "references": [ "GUID:84651a3751eca9349aac36a66bba901b", "GUID:9e24947de15b9834991c9d8411ea37cf", + "GUID:6055be8ebefd69e48b49212b09b47b2f", "GUID:f51ebe6a0ceec4240a699833d6309b23" ], "includePlatforms": [], diff --git a/Runtime/Views.meta b/Runtime/Views.meta new file mode 100644 index 0000000..4e7947b --- /dev/null +++ b/Runtime/Views.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d933142aa3eaeac4496bf197d415d1e7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/AdjustScreenSizeFitter.cs b/Runtime/Views/AdjustScreenSizeFitterView.cs similarity index 97% rename from Runtime/AdjustScreenSizeFitter.cs rename to Runtime/Views/AdjustScreenSizeFitterView.cs index 749a3c1..dec3f37 100644 --- a/Runtime/AdjustScreenSizeFitter.cs +++ b/Runtime/Views/AdjustScreenSizeFitterView.cs @@ -3,7 +3,7 @@ using UnityEngine.EventSystems; using UnityEngine.UI; -namespace GameLovers.UiService +namespace GameLovers.UiService.Views { /// /// Resizes a RectTransform to fit the size of its content. @@ -15,7 +15,7 @@ namespace GameLovers.UiService [AddComponentMenu("Layout/Adjust Size Fitter", 141)] [ExecuteAlways] [RequireComponent(typeof(RectTransform), typeof(LayoutElement))] - public class AdjustScreenSizeFitter : UIBehaviour, ILayoutSelfController + public class AdjustScreenSizeFitterView : UIBehaviour, ILayoutSelfController { [SerializeField] private RectOffset _padding = new RectOffset(); [SerializeField] private RectTransform _canvasTransform; diff --git a/Runtime/AdjustScreenSizeFitter.cs.meta b/Runtime/Views/AdjustScreenSizeFitterView.cs.meta similarity index 83% rename from Runtime/AdjustScreenSizeFitter.cs.meta rename to Runtime/Views/AdjustScreenSizeFitterView.cs.meta index 328d7b1..a820d98 100644 --- a/Runtime/AdjustScreenSizeFitter.cs.meta +++ b/Runtime/Views/AdjustScreenSizeFitterView.cs.meta @@ -1,5 +1,5 @@ fileFormatVersion: 2 -guid: a1f72e47a06f9b44098f51ecddbadab2 +guid: 7e95eeedee57a194d865316493962f74 MonoImporter: externalObjects: {} serializedVersion: 2 diff --git a/Runtime/Views/InteractableTextView.cs b/Runtime/Views/InteractableTextView.cs new file mode 100644 index 0000000..e1039d9 --- /dev/null +++ b/Runtime/Views/InteractableTextView.cs @@ -0,0 +1,53 @@ +using System; +using TMPro; +using UnityEngine; +using UnityEngine.Events; +using UnityEngine.EventSystems; + +namespace GameLovers.UiService.Views +{ + /// + /// This view is responsible to handle all types of links (ex: hyperlinks) set in the + /// + [RequireComponent(typeof(TMP_Text))] + public class InteractableTextView : MonoBehaviour, IPointerClickHandler + { + public enum InteractableTextType + { + IntersectingLink, + NearestLink + } + + public UnityEvent OnLinkedInfoClicked; + public InteractableTextType InteractableType; + + [SerializeField] private TMP_Text _text; + + public TMP_Text Text => _text; + + private void OnValidate() + { + _text = _text == null ? GetComponent() : _text; + } + + public void OnPointerClick(PointerEventData eventData) + { + // Get Canvas Camera if using WorldCamera view + var linkedText = -1; + + if (InteractableType == InteractableTextType.IntersectingLink) + { + linkedText = TMP_TextUtilities.FindIntersectingLink(_text, eventData.position, null); + } + else + { + linkedText = TMP_TextUtilities.FindNearestLink(_text, eventData.position, null); + } + + if (linkedText > -1) + { + OnLinkedInfoClicked.Invoke(_text.textInfo.linkInfo[linkedText]); + } + } + } +} \ No newline at end of file diff --git a/Runtime/Views/InteractableTextView.cs.meta b/Runtime/Views/InteractableTextView.cs.meta new file mode 100644 index 0000000..4148521 --- /dev/null +++ b/Runtime/Views/InteractableTextView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c892eed10da43ed4b97acce141c343ac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Runtime/NonDrawingView.cs b/Runtime/Views/NonDrawingView.cs similarity index 95% rename from Runtime/NonDrawingView.cs rename to Runtime/Views/NonDrawingView.cs index 55ed8f9..cdd0523 100644 --- a/Runtime/NonDrawingView.cs +++ b/Runtime/Views/NonDrawingView.cs @@ -3,7 +3,7 @@ // ReSharper disable CheckNamespace -namespace GameLovers.UiService +namespace GameLovers.UiService.Views { /// /// A concrete subclass of the Unity UI `Graphic` class that just skips drawing. diff --git a/Runtime/NonDrawingView.cs.meta b/Runtime/Views/NonDrawingView.cs.meta similarity index 100% rename from Runtime/NonDrawingView.cs.meta rename to Runtime/Views/NonDrawingView.cs.meta diff --git a/Runtime/SafeAreaHelperView.cs b/Runtime/Views/SafeAreaHelperView.cs similarity index 99% rename from Runtime/SafeAreaHelperView.cs rename to Runtime/Views/SafeAreaHelperView.cs index 14f473f..b24338f 100644 --- a/Runtime/SafeAreaHelperView.cs +++ b/Runtime/Views/SafeAreaHelperView.cs @@ -4,7 +4,7 @@ // ReSharper disable CheckNamespace -namespace GameLovers.UiService +namespace GameLovers.UiService.Views { /// /// This view helper translate anchored views based on device safe area (screens witch a notch) diff --git a/Runtime/SafeAreaHelperView.cs.meta b/Runtime/Views/SafeAreaHelperView.cs.meta similarity index 100% rename from Runtime/SafeAreaHelperView.cs.meta rename to Runtime/Views/SafeAreaHelperView.cs.meta diff --git a/package.json b/package.json index a0b9e16..e8085d7 100644 --- a/package.json +++ b/package.json @@ -2,13 +2,14 @@ "name": "com.gamelovers.uiservice", "displayName": "UiService", "author": "Miguel Tomas", - "version": "0.11.0", + "version": "0.12.0", "unity": "2022.3", "license": "MIT", "description": "This package provides a service to help manage an Unity's, game UI.\nIt allows to open, close, load, unload and request any Ui Configured in the game.\nThe package provides a Ui Set that allows to group a set of Ui Presenters to help load, open and close multiple Uis at the same time.\n\nTo help configure the game's UI you need to create a UiConfigs Scriptable object by:\n- Right Click on the Project View > Create > ScriptableObjects > Configs > UiConfigs", "dependencies": { "com.unity.addressables": "1.22.0", - "com.cysharp.unitask": "2.5.10" + "com.cysharp.unitask": "2.5.10", + "com.unity.textmeshpro": "3.0.9" }, "type": "library", "hideInEditor": false