diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge.meta new file mode 100644 index 0000000..18da0c2 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 416d1ea6815444ffb8a3c29c80bed300 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core.meta new file mode 100644 index 0000000..18147c0 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68232a1aab52946a1a3b45fada2ec18a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts.meta new file mode 100644 index 0000000..34d7270 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 52ae8a57dbc464da080189c6e4a56222 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/Bootstrap.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/Bootstrap.cs new file mode 100644 index 0000000..b10389b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/Bootstrap.cs @@ -0,0 +1,48 @@ +using System; +using System.Threading; +using VContainer; +using VContainer.Unity; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// Bootstrap manages the application startup and shutdown. + /// It utilizes dependency injection with IObjectResolver and BootstrapController to initialize and control the application flow. + /// The Start() method launches the bootstrap process, handling exceptions and cancellation, + /// while Dispose() ensures proper cleanup by cancelling ongoing operations and releasing associated resources. + /// + public class Bootstrap : IStartable, IDisposable + { + private readonly BootstrapController _bootstrapController; + + private CancellationTokenSource _cancellationTokenSource = new(); + + public Bootstrap(BootstrapController bootstrapController) + { + _bootstrapController = bootstrapController; + } + + public void Start() + { + try + { + _bootstrapController.LaunchTree(_cancellationTokenSource.Token); + } + catch (OperationCanceledException) + { + } + catch (Exception exception) + { + UnityEngine.Debug.LogError($"Can't start bootstrap controller {exception}"); + } + } + + public void Dispose() + { + _cancellationTokenSource?.Cancel(); + _cancellationTokenSource?.Dispose(); + + _cancellationTokenSource = null; + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/Bootstrap.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/Bootstrap.cs.meta new file mode 100644 index 0000000..e22c42f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/Bootstrap.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e0161f1eadaf2403983bd19224bcb1dc +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/BootstrapController.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/BootstrapController.cs new file mode 100644 index 0000000..e29bdeb --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/BootstrapController.cs @@ -0,0 +1,32 @@ +using Cysharp.Threading.Tasks; +using Playtika.Controllers; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// BootstrapController extends RootController to manage the initialization flow of the application. + /// It asynchronously starts a game loop by repeatedly executing GameLoopController instances until cancellation is requested. + /// + public class BootstrapController : RootController + { + public BootstrapController(IControllerFactory controllerFactory) + : base(controllerFactory) + { + } + + protected override void OnStart() + { + FlowAsync().Forget(); + + base.OnStart(); + } + + private async UniTask FlowAsync() + { + while (!CancellationToken.IsCancellationRequested) + { + await ExecuteAndWaitResultAsync(CancellationToken); + } + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/BootstrapController.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/BootstrapController.cs.meta new file mode 100644 index 0000000..7e1ff61 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/BootstrapController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ccf7084eb21c4430a83aa39ce69c38d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/ControllerFactory.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/ControllerFactory.cs new file mode 100644 index 0000000..bf325c8 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/ControllerFactory.cs @@ -0,0 +1,27 @@ +using Playtika.Controllers; +using VContainer; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// The ControllerFactory class implements the IControllerFactory interface to facilitate the creation + /// of controllers using a project-specific Dependency Injection (DI) container. + /// It utilizes an IObjectResolver instance to resolve and instantiate controllers of type T + /// that implement theIController interface. + /// + public class ControllerFactory : IControllerFactory + { + private readonly IObjectResolver _container; + + public ControllerFactory(IObjectResolver container) + { + _container = container; + } + + public IController Create() where T : class, IController + { + var controller = _container.Resolve(); + return controller; + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/ControllerFactory.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/ControllerFactory.cs.meta new file mode 100644 index 0000000..4e34906 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Core/Scripts/ControllerFactory.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ebbf07b3db05345d3a728dad5def6444 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions.meta new file mode 100644 index 0000000..3196b87 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f817e6aeff9ff43bfa90b9bd9a11b9b8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/AnimationExtensions.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/AnimationExtensions.cs new file mode 100644 index 0000000..48955ef --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/AnimationExtensions.cs @@ -0,0 +1,29 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// AnimationExtensions is a static class providing extension methods for Unity's Animation class. + /// + public static class AnimationExtensions + { + public static async UniTask PlayAsync( + this Animation animationComponent, + string animationName, + CancellationToken cancellationToken) + { + animationComponent.Play(animationName); + + while (animationComponent.isPlaying) + { + await UniTask.Yield(); + if (cancellationToken.IsCancellationRequested) + { + return; + } + } + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/AnimationExtensions.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/AnimationExtensions.cs.meta new file mode 100644 index 0000000..9444ed5 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/AnimationExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad1ff2648db964e40aee4e1dbed4abd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/TransformExtensions.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/TransformExtensions.cs new file mode 100644 index 0000000..446f6ae --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/TransformExtensions.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// TransformExtensions is a static class providing extension methods for Unity's Transform class. + /// + public static class TransformExtensions + { + public static void Clear(this Transform transform) + { + foreach (Transform child in transform) + { + Object.Destroy(child.gameObject); + } + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/TransformExtensions.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/TransformExtensions.cs.meta new file mode 100644 index 0000000..4213d7f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Extensions/TransformExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1a7dcf361f0c4a2c908d7e7dd2e1975 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features.meta new file mode 100644 index 0000000..84e8770 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d628a32f8247c4f6e9b0a50a5256c858 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core.meta new file mode 100644 index 0000000..6f47296 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 206845a57cc544d47a1b1803ea790a64 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content.meta new file mode 100644 index 0000000..d3f8296 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 20c0b5dcd14754c578e341608d3f0ce7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs.meta new file mode 100644 index 0000000..787ede7 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 129873eb174c14c49b5f100725d88f02 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs/GameView.prefab b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs/GameView.prefab new file mode 100644 index 0000000..7954c95 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs/GameView.prefab @@ -0,0 +1,367 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &3416476144409564023 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2834930602603086173} + - component: {fileID: 762718665078696411} + m_Layer: 0 + m_Name: GameView + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &2834930602603086173 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3416476144409564023} + serializedVersion: 2 + 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: 5574186762765090946} + - {fileID: 3856725467951578555} + - {fileID: 3931415572381285410} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &762718665078696411 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 3416476144409564023} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aae241492282e463aa9efe7e1b975bca, type: 3} + m_Name: + m_EditorClassIdentifier: + _uiView: {fileID: 6031414337601235818} + _environmentView: {fileID: 202299718362985399} +--- !u!1 &6742139274365203074 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5574186762765090946} + - component: {fileID: 619709263342993081} + - component: {fileID: 4590504191315451929} + - component: {fileID: 5378120720439223703} + - component: {fileID: 9005925040059610026} + m_Layer: 0 + m_Name: Camera + m_TagString: MainCamera + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5574186762765090946 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6742139274365203074} + serializedVersion: 2 + 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: 2834930602603086173} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!20 &619709263342993081 +Camera: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6742139274365203074} + m_Enabled: 1 + serializedVersion: 2 + m_ClearFlags: 1 + m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} + m_projectionMatrixMode: 1 + m_GateFitMode: 2 + m_FOVAxisMode: 0 + m_Iso: 200 + m_ShutterSpeed: 0.005 + m_Aperture: 16 + m_FocusDistance: 10 + m_FocalLength: 50 + m_BladeCount: 5 + m_Curvature: {x: 2, y: 11} + m_BarrelClipping: 0.25 + m_Anamorphism: 0 + m_SensorSize: {x: 36, y: 24} + m_LensShift: {x: 0, y: 0} + m_NormalizedViewPortRect: + serializedVersion: 2 + x: 0 + y: 0 + width: 1 + height: 1 + near clip plane: 0.3 + far clip plane: 500 + field of view: 40 + orthographic: 1 + orthographic size: 10 + m_Depth: 0 + 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!81 &4590504191315451929 +AudioListener: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6742139274365203074} + m_Enabled: 1 +--- !u!114 &5378120720439223703 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6742139274365203074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a79441f348de89743a2939f4d699eac1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_RenderShadows: 1 + m_RequiresDepthTextureOption: 2 + m_RequiresOpaqueTextureOption: 2 + m_CameraType: 0 + m_Cameras: [] + m_RendererIndex: -1 + m_VolumeLayerMask: + serializedVersion: 2 + m_Bits: 1 + m_VolumeTrigger: {fileID: 0} + m_VolumeFrameworkUpdateModeOption: 2 + m_RenderPostProcessing: 0 + m_Antialiasing: 0 + m_AntialiasingQuality: 2 + m_StopNaN: 0 + m_Dithering: 0 + m_ClearDepth: 1 + m_AllowXRRendering: 1 + m_AllowHDROutput: 1 + m_UseScreenCoordOverride: 0 + m_ScreenSizeOverride: {x: 0, y: 0, z: 0, w: 0} + m_ScreenCoordScaleBias: {x: 0, y: 0, z: 0, w: 0} + m_RequiresDepthTexture: 0 + m_RequiresColorTexture: 0 + m_Version: 2 + m_TaaSettings: + quality: 3 + frameInfluence: 0.1 + jitterScale: 1 + mipBias: 0 + varianceClampScale: 0.9 + contrastAdaptiveSharpening: 0 +--- !u!114 &9005925040059610026 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6742139274365203074} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 56666c5a40171f54783dd416a44f42bf, type: 3} + m_Name: + m_EditorClassIdentifier: + m_EventMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_MaxRayIntersections: 0 +--- !u!1001 &776456903411656676 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 2834930602603086173} + m_Modifications: + - target: {fileID: 2813183336786420558, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_Name + value: UI + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 6081273471566441561, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + propertyPath: m_Camera + value: + objectReference: {fileID: 619709263342993081} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} +--- !u!4 &3856725467951578555 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 4558575284159568479, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + m_PrefabInstance: {fileID: 776456903411656676} + m_PrefabAsset: {fileID: 0} +--- !u!114 &6031414337601235818 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 6446168473523129486, guid: a0834be56fd764d10a01d4cdc187508d, type: 3} + m_PrefabInstance: {fileID: 776456903411656676} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6815a37090d984807b4af832ec46765e, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1001 &8760390860080584794 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 2834930602603086173} + m_Modifications: + - target: {fileID: 4565990845173853492, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_Name + value: Environment + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalPosition.z + value: 10 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 8889436711453551597, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: _spawnArea.x + value: -3.5 + objectReference: {fileID: 0} + - target: {fileID: 8889436711453551597, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: _spawnArea.y + value: 3.5 + objectReference: {fileID: 0} + - target: {fileID: 9106004284044335196, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + propertyPath: m_LocalPosition.y + value: 5.4 + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} +--- !u!114 &202299718362985399 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 8889436711453551597, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + m_PrefabInstance: {fileID: 8760390860080584794} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4cd7eaebb53be4192951d0258755683a, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!4 &3931415572381285410 stripped +Transform: + m_CorrespondingSourceObject: {fileID: 5700458375433102456, guid: 31b62b6da850f443a8ad687d5f88ccc5, type: 3} + m_PrefabInstance: {fileID: 8760390860080584794} + m_PrefabAsset: {fileID: 0} diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs/GameView.prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs/GameView.prefab.meta new file mode 100644 index 0000000..ee30037 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Content/Prefabs/GameView.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: c86c4274b83dd415389c40df57c6f2df +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts.meta new file mode 100644 index 0000000..e866ec0 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 997e77a7345514fe7a8883599c4db53e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameConfiguration.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameConfiguration.cs new file mode 100644 index 0000000..eb95ade --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameConfiguration.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameConfiguration is a ScriptableObject used to define game settings related to fruit collection. + /// This class allows flexible adjustment of game parameters through the Unity Editor's Inspector, + /// providing essential configuration options for gameplay mechanics related to fruit collection. + /// + [CreateAssetMenu(fileName = "GameConfiguration", menuName = "Scriptable Objects/Game Configuration")] + public class GameConfiguration : ScriptableObject + { + [Range(2, 4)] + public int FruitCopyCollectAmount = 3; + + [Range(3, 6)] + public int MaxFruitsCollectedCount = 6; + + [Range(10, 50)] + public int InitialFruitsCount = 40; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameConfiguration.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameConfiguration.cs.meta new file mode 100644 index 0000000..ac53a5c --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameConfiguration.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 55b73d944563401787d41762940cbdc1 +timeCreated: 1718548448 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameEventsModel.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameEventsModel.cs new file mode 100644 index 0000000..372f296 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameEventsModel.cs @@ -0,0 +1,31 @@ +using System; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// The GameEventsModel class implements both IGameEventsModel and IGameEventsRequestsModel interfaces. + /// This class serves as a centralized model for managing and signaling game events, + /// facilitating interaction and synchronization between different game components. + /// + public class GameEventsModel : IGameEventsModel, IGameEventsRequestsModel + { + public event Action Win; + public event Action Lose; + public event Action RestartRequested; + + public void RequestWin() + { + Win?.Invoke(); + } + + public void RequestLose() + { + Lose?.Invoke(); + } + + public void RequestRestart() + { + RestartRequested?.Invoke(); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameEventsModel.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameEventsModel.cs.meta new file mode 100644 index 0000000..639ae00 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameEventsModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 84e3603384d14b8e88525060ae95f49c +timeCreated: 1718714235 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameLoopController.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameLoopController.cs new file mode 100644 index 0000000..6ca3d0f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameLoopController.cs @@ -0,0 +1,53 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using Playtika.Controllers; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameLoopController extends ControllerWithResultBase to manage a game loop asynchronously. + /// It initializes a GameModel and handles restart requests using a UniTaskCompletionSource. + /// The controller starts and stops related controllers (GameUIController and GameEnvironmentController). + /// It awaits restart signals via _gameModel.RestartRequested and completes the loop upon confirmation, + /// ensuring orderly flow with Complete(). + /// + public class GameLoopController : ControllerWithResultBase + { + private readonly GameModel _gameModel; + private readonly IGameEventsModel _gameEventsModel; + + public GameLoopController( + IControllerFactory controllerFactory, + GameModel gameModel, + IGameEventsModel gameEventsModel) + : base(controllerFactory) + { + _gameModel = gameModel; + _gameEventsModel = gameEventsModel; + } + + protected override void OnStart() + { + _gameEventsModel.RestartRequested += OnRestartRequested; + } + + protected override void OnStop() + { + _gameEventsModel.RestartRequested -= OnRestartRequested; + } + + protected override async UniTask OnFlowAsync(CancellationToken cancellationToken) + { + await _gameModel.InitializeAsync(cancellationToken); + cancellationToken.ThrowIfCancellationRequested(); + + Execute(); + ExecuteAndWaitResultAsync(CancellationToken).Forget(); + } + + private void OnRestartRequested() + { + Complete(); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameLoopController.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameLoopController.cs.meta new file mode 100644 index 0000000..afcd4ca --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameLoopController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 571a2237c0344b1ea270033097dbb1db +timeCreated: 1718631878 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameModel.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameModel.cs new file mode 100644 index 0000000..e66b446 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameModel.cs @@ -0,0 +1,109 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using Cysharp.Threading.Tasks; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameModel manages game logic related to fruit collection and events in a game. + /// This class orchestrates the game mechanics related to fruit collection, including managing events and + /// checking game conditions based on configured rules, enhancing gameplay logic and event handling within + /// a game environment. + /// + public class GameModel + { + public event Action FruitAddedToList; + public event Action> FruitsRemovedFromList; + + public GameConfiguration GameConfiguration { get; private set; } + public int FruitsOnBoardCount { get; private set; } + + private readonly ResourcesProvider _resourcesProvider; + private readonly IGameEventsRequestsModel _eventRequestsModel; + + private FruitData[] _fruitsCollected; + + public GameModel(ResourcesProvider resourcesProvider, + IGameEventsRequestsModel eventRequestsModel) + { + _resourcesProvider = resourcesProvider; + _eventRequestsModel = eventRequestsModel; + } + + public async UniTask InitializeAsync(CancellationToken cancellationToken) + { + GameConfiguration = await _resourcesProvider.LoadAsync("GameConfiguration", cancellationToken); + cancellationToken.ThrowIfCancellationRequested(); + + _fruitsCollected = new FruitData[GameConfiguration.MaxFruitsCollectedCount]; + FruitsOnBoardCount = GameConfiguration.InitialFruitsCount - GameConfiguration.InitialFruitsCount % + GameConfiguration.FruitCopyCollectAmount; + } + + public void RequestFruitRemove(FruitData data) + { + AddToList(data); + FruitsOnBoardCount--; + + CheckForCopiesCollected(); + + if (IsFruitBoardEmpty()) + { + _eventRequestsModel.RequestWin(); + } + else if (IsFruitLineFilled()) + { + _eventRequestsModel.RequestLose(); + } + } + + public bool IsFruitBoardEmpty() + { + return FruitsOnBoardCount <= 0; + } + + public bool IsFruitLineFilled() + { + return _fruitsCollected.All(x => x != null); + } + + private void CheckForCopiesCollected() + { + var duplicates = _fruitsCollected + .Where(x => x != null) + .GroupBy(x => x) + .Where(g => g.Count() >= GameConfiguration.FruitCopyCollectAmount) + .Select(g => g.Key); + var array = duplicates as FruitData[] ?? duplicates.ToArray(); + if (array.Any()) + { + var removedIndexes = new List(GameConfiguration.FruitCopyCollectAmount); + for (var i = 0; i < GameConfiguration.FruitCopyCollectAmount; i++) + { + var index = RemoveFromList(array[0]); + removedIndexes.Add(index); + } + + FruitsRemovedFromList?.Invoke(removedIndexes); + } + } + + private void AddToList(FruitData data) + { + var firstEmptyIndex = Array.IndexOf(_fruitsCollected, null); + _fruitsCollected[firstEmptyIndex] = data; + + FruitAddedToList?.Invoke(firstEmptyIndex, data); + } + + private int RemoveFromList(FruitData data) + { + var index = Array.IndexOf(_fruitsCollected, data); + _fruitsCollected[index] = null; + + return index; + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameModel.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameModel.cs.meta new file mode 100644 index 0000000..16a74bc --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ddc446e062e548efa15f07ce8b03dca9 +timeCreated: 1713022776 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameStateModel.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameStateModel.cs new file mode 100644 index 0000000..5cff8a1 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameStateModel.cs @@ -0,0 +1,85 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + public class GameStateModel + { + public event Action FruitAddedToList; + public event Action> FruitsRemovedFromList; + + public GameConfiguration GameConfiguration { get; } + public int FruitsOnBoardCount { get; private set; } + + private FruitData[] _fruitsCollected; + + public GameStateModel() + { + GameConfiguration = Resources.Load("GameConfiguration"); + } + + public void Initialize() + { + _fruitsCollected = new FruitData[GameConfiguration.MaxFruitsCollectedCount]; + FruitsOnBoardCount = GameConfiguration.InitialFruitsCount - GameConfiguration.InitialFruitsCount % + GameConfiguration.FruitCopyCollectAmount; + } + + public void RequestFruitRemove(FruitData data) + { + AddToList(data); + FruitsOnBoardCount--; + + CheckForCopiesCollected(); + } + + public bool IsFruitBoardEmpty() + { + return FruitsOnBoardCount <= 0; + } + + public bool IsFruitLineFilled() + { + return _fruitsCollected.All(x => x != null); + } + + private void CheckForCopiesCollected() + { + var duplicates = _fruitsCollected + .Where(x => x != null) + .GroupBy(x => x) + .Where(g => g.Count() >= GameConfiguration.FruitCopyCollectAmount) + .Select(g => g.Key); + var array = duplicates as FruitData[] ?? duplicates.ToArray(); + if (array.Any()) + { + var removedIndexes = new List(GameConfiguration.FruitCopyCollectAmount); + for (var i = 0; i < GameConfiguration.FruitCopyCollectAmount; i++) + { + var index = RemoveFromList(array[0]); + removedIndexes.Add(index); + } + + FruitsRemovedFromList?.Invoke(removedIndexes); + } + } + + private void AddToList(FruitData data) + { + var firstEmptyIndex = Array.IndexOf(_fruitsCollected, null); + _fruitsCollected[firstEmptyIndex] = data; + + FruitAddedToList?.Invoke(firstEmptyIndex, data); + } + + private int RemoveFromList(FruitData data) + { + var index = Array.IndexOf(_fruitsCollected, data); + _fruitsCollected[index] = null; + + return index; + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameStateModel.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameStateModel.cs.meta new file mode 100644 index 0000000..179f71f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameStateModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 796350c8bf984b478351ebd76b6408a4 +timeCreated: 1718714306 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameVIew.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameVIew.cs new file mode 100644 index 0000000..cdd7c48 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameVIew.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameView is a MonoBehaviour representing the main game view in the Unity engine. + /// It provides access to UiView and EnvironmentView, which are serialized references to GameUIView and + /// GameEnvironmentView components, respectively. This class acts as a bridge for accessing and manipulating + /// UI and environment elements within the game scene. + /// + public class GameView : MonoBehaviour + { + public GameUIView UiView => _uiView; + public GameEnvironmentView EnvironmentView => _environmentView; + + [SerializeField] + private GameUIView _uiView; + + [SerializeField] + private GameEnvironmentView _environmentView; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameVIew.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameVIew.cs.meta new file mode 100644 index 0000000..20ecb40 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/GameVIew.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: aae241492282e463aa9efe7e1b975bca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsModel.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsModel.cs new file mode 100644 index 0000000..e0aad0b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsModel.cs @@ -0,0 +1,16 @@ +using System; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// IGameEventsModel defines events representing game events such as winning, losing, and restart requests. + /// This interface serves as a contract for components that need to subscribe to or invoke these game events, + /// providing a structured approach to handle game state transitions and actions in a game development context. + /// + public interface IGameEventsModel + { + public event Action Win; + public event Action Lose; + public event Action RestartRequested; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsModel.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsModel.cs.meta new file mode 100644 index 0000000..573edd0 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: cd702d44ade14914b146153d99fa1fbc +timeCreated: 1718716391 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsRequestsModel.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsRequestsModel.cs new file mode 100644 index 0000000..a4718e4 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsRequestsModel.cs @@ -0,0 +1,14 @@ +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// IGameEventsRequestsModel defines methods for requesting game events related to game outcomes and restart functionality. + /// This interface abstracts the interaction with game events related to game outcomes and restart operations, allowing + /// for flexible implementation in game logic components. + /// + public interface IGameEventsRequestsModel + { + void RequestWin(); + void RequestLose(); + void RequestRestart(); + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsRequestsModel.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsRequestsModel.cs.meta new file mode 100644 index 0000000..0e9538a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/IGameEventsRequestsModel.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ca30d2394c7248869b7f214d7a68ad49 +timeCreated: 1718716398 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/ResourcesProvider.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/ResourcesProvider.cs new file mode 100644 index 0000000..8d369d1 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/ResourcesProvider.cs @@ -0,0 +1,19 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// This class simplifies the process of loading resources asynchronously in Unity, enhancing flexibility + /// and performance in resource management tasks within game development. + /// + public class ResourcesProvider + { + public async UniTask LoadAsync(string resourceId, CancellationToken cancellationToken) where T : Object + { + var result = await Resources.LoadAsync(resourceId).WithCancellation(cancellationToken); + return result as T; + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/ResourcesProvider.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/ResourcesProvider.cs.meta new file mode 100644 index 0000000..d9eafd8 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/ResourcesProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: f1c76537c4874c1d9b32e2a3c769a129 +timeCreated: 1718710885 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/RootLifetimeScope.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/RootLifetimeScope.cs new file mode 100644 index 0000000..0e74e34 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/RootLifetimeScope.cs @@ -0,0 +1,43 @@ +using Playtika.Controllers; +using UnityEngine; +using VContainer; +using VContainer.Unity; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// RootLifetimeScope sets up the DI container for the game application, configuring essential components such as + /// the entry point (Bootstrap), controllers, and services. This setup ensures efficient dependency management and lifecycle handling during gameplay. + /// + public class RootLifetimeScope : LifetimeScope + { + [SerializeField] + private GameView _gameView; + + protected override void Configure(IContainerBuilder builder) + { + builder.RegisterEntryPoint(); + builder.Register(Lifetime.Scoped); + builder.Register(Lifetime.Transient); + builder.Register(Lifetime.Transient); + + builder.RegisterInstance(_gameView.EnvironmentView); + builder.RegisterInstance(_gameView.UiView); + builder.RegisterInstance(_gameView.UiView.CollectedFruitsView); + + builder.Register(Lifetime.Singleton); + builder.Register(Lifetime.Singleton); + + builder.Register(Lifetime.Transient); + builder.Register(Lifetime.Transient); + + builder.Register(Lifetime.Transient); + builder.Register(Lifetime.Transient); + builder.Register(Lifetime.Transient); + + builder.Register(Lifetime.Singleton); + builder.Register(Lifetime.Singleton); + builder.Register(Lifetime.Singleton); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/RootLifetimeScope.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/RootLifetimeScope.cs.meta new file mode 100644 index 0000000..37302d9 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Core/Scripts/RootLifetimeScope.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e7ad20ae2d7440c6b3e2e99ab49e651 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment.meta new file mode 100644 index 0000000..ee107b4 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5157d60c4a3444294998825bcde94fff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core.meta new file mode 100644 index 0000000..4a570a8 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4690ef7357487472fb9acf7bd030293a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content.meta new file mode 100644 index 0000000..fe296e3 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e53bdf7f7068141e58148b7c1cc3ef1c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials.meta new file mode 100644 index 0000000..0e6510f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d94b43b78db2a43508bbfc85f1521b30 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundGradient_Mateiral.mat b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundGradient_Mateiral.mat new file mode 100644 index 0000000..c4c7839 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundGradient_Mateiral.mat @@ -0,0 +1,56 @@ +%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: BackgroundGradient_Mateiral + m_Shader: {fileID: 4800000, guid: ca7d927c60b9d462084d2ca005255890, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + 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} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - _BlendDst: 0 + - _BlendOption: 1 + - _BlendSrc: 1 + - _EnableExternalAlpha: 0 + - _GradientWidth: 0.58 + - _TransitionPosition: 0.5 + m_Colors: + - _Color: {r: 1, g: 1, b: 1, a: 1} + - _FirstColor: {r: 0.13955146, g: 0.3301887, b: 0.09189214, a: 1} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} + - _SecondColor: {r: 0.18431373, g: 0.43529412, b: 0.12156863, a: 1} + m_BuildTextureStacks: [] diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundGradient_Mateiral.mat.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundGradient_Mateiral.mat.meta new file mode 100644 index 0000000..09532ca --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundGradient_Mateiral.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d139320e25a4b4b8f9787eb2c8613118 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundScrolling_Material.mat b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundScrolling_Material.mat new file mode 100644 index 0000000..358b59a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundScrolling_Material.mat @@ -0,0 +1,51 @@ +%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: BackgroundScrolling_Material + m_Shader: {fileID: 4800000, guid: b62bf4f62333045a38793f9915535fc6, type: 3} + m_Parent: {fileID: 0} + m_ModifiedSerializedProperties: 0 + m_ValidKeywords: [] + m_InvalidKeywords: [] + m_LightmapFlags: 4 + m_EnableInstancingVariants: 0 + m_DoubleSidedGI: 0 + m_CustomRenderQueue: -1 + stringTagMap: {} + disabledShaderPasses: [] + m_LockedProperties: + m_SavedProperties: + serializedVersion: 3 + m_TexEnvs: + - _AlphaTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _MainTex: + m_Texture: {fileID: 2800000, guid: 614c6d75c326d40769cd6a55104e5337, type: 3} + m_Scale: {x: 12, y: 12} + m_Offset: {x: 0, y: 0} + - _MaskTex: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + - _NormalMap: + m_Texture: {fileID: 0} + m_Scale: {x: 1, y: 1} + m_Offset: {x: 0, y: 0} + m_Ints: [] + m_Floats: + - PixelSnap: 0 + - _EnableExternalAlpha: 0 + m_Colors: + - _Color: {r: 0.12423483, g: 0.3018868, b: 0.081167676, a: 0.34901962} + - _Flip: {r: 1, g: 1, b: 1, a: 1} + - _RendererColor: {r: 1, g: 1, b: 1, a: 1} + - _ScrollSpeed: {r: -0.7, g: -0.7, b: 0, a: 0} + m_BuildTextureStacks: [] diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundScrolling_Material.mat.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundScrolling_Material.mat.meta new file mode 100644 index 0000000..50f3d4b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Materials/BackgroundScrolling_Material.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d54c33af42364be99d70412cb85dad8 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 2100000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs.meta new file mode 100644 index 0000000..a15f16b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ee5feabb2d51a4165825bccb493a90b0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs/Environment.prefab b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs/Environment.prefab new file mode 100644 index 0000000..1938879 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs/Environment.prefab @@ -0,0 +1,589 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &87948775376500468 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3506334176229297303} + - component: {fileID: 6893018872755218867} + m_Layer: 0 + m_Name: Background_Scroll + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3506334176229297303 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87948775376500468} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.25, z: 0} + m_LocalScale: {x: 5, y: 5, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4234202924687734341} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &6893018872755218867 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 87948775376500468} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4d54c33af42364be99d70412cb85dad8, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: -9 + m_Sprite: {fileID: 21300000, guid: 1d3a296bee6d04635be34a52a9b077c9, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 2.1333334, y: 2.1333334} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &1814270975358824151 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1117964864814981896} + - component: {fileID: 8925153896998742868} + m_Layer: 0 + m_Name: Lines + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1117964864814981896 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1814270975358824151} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: -0.09000003, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4234202924687734341} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &8925153896998742868 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1814270975358824151} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: -1 + m_Sprite: {fileID: 21300000, guid: 8ce04c396f40d41cbb898247b7c5f8a4, type: 3} + m_Color: {r: 1, g: 0.7411765, b: 0, a: 1} + m_FlipX: 1 + m_FlipY: 0 + m_DrawMode: 1 + m_Size: {x: 9.1, y: 12} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &4565990845173853492 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 5700458375433102456} + - component: {fileID: 8889436711453551597} + m_Layer: 0 + m_Name: Environment + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &5700458375433102456 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4565990845173853492} + serializedVersion: 2 + 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: 9106004284044335196} + - {fileID: 9033223585654839396} + - {fileID: 4234202924687734341} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &8889436711453551597 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 4565990845173853492} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 4cd7eaebb53be4192951d0258755683a, type: 3} + m_Name: + m_EditorClassIdentifier: + _container: {fileID: 9106004284044335196} +--- !u!1 &6244561824465933737 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9106004284044335196} + m_Layer: 0 + m_Name: Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9106004284044335196 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6244561824465933737} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -1.14, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5700458375433102456} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &6854971445741423484 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 9033223585654839396} + - component: {fileID: 7409062187526535040} + m_Layer: 0 + m_Name: Colliders + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &9033223585654839396 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6854971445741423484} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -7.14, z: 0} + m_LocalScale: {x: 2.5, y: 2.5, z: 2.5} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 5700458375433102456} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!60 &7409062187526535040 +PolygonCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6854971445741423484} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 0} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + m_SpriteTilingProperty: + border: {x: 0, y: 0, z: 0, w: 0} + pivot: {x: 0, y: 0} + oldSize: {x: 0, y: 0} + newSize: {x: 0, y: 0} + adaptiveTilingThreshold: 0 + drawMode: 0 + adaptiveTiling: 0 + m_AutoTiling: 0 + m_Points: + m_Paths: + - - {x: -2.25, y: 0} + - {x: -2.25, y: 5} + - {x: -1.75, y: 5} + - {x: -1.75, y: 0.5} + - {x: 1.75, y: 0.5} + - {x: 1.75, y: 5} + - {x: 2.25, y: 5} + - {x: 2.25, y: 0} + m_UseDelaunayMesh: 0 +--- !u!1 &7016895734831185152 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8544632373735416826} + - component: {fileID: 3850252124339651768} + - component: {fileID: 2625600387000873097} + m_Layer: 0 + m_Name: Background_Gradient + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &8544632373735416826 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7016895734831185152} + serializedVersion: 2 + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0.25, z: 0} + m_LocalScale: {x: 30, y: 30, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4234202924687734341} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &3850252124339651768 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7016895734831185152} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: d139320e25a4b4b8f9787eb2c8613118, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: -10 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!331 &2625600387000873097 +SpriteMask: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7016895734831185152} + m_Enabled: 1 + m_CastShadows: 1 + m_ReceiveShadows: 1 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 15d0c3709176029428a0da2f8cecf0b5, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 0} + m_MaskAlphaCutoff: 0.2 + m_FrontSortingLayerID: 0 + m_BackSortingLayerID: 0 + m_FrontSortingLayer: 0 + m_BackSortingLayer: 0 + m_FrontSortingOrder: 0 + m_BackSortingOrder: 0 + m_IsCustomRangeActive: 0 + m_SpriteSortPoint: 0 +--- !u!1 &7829567953633308085 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4234202924687734341} + m_Layer: 0 + m_Name: Decorations + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4234202924687734341 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7829567953633308085} + serializedVersion: 2 + 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: 1117964864814981896} + - {fileID: 4495376406130920465} + - {fileID: 3506334176229297303} + - {fileID: 8544632373735416826} + m_Father: {fileID: 5700458375433102456} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &9033946438786394551 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4495376406130920465} + - component: {fileID: 2193821982121631248} + m_Layer: 0 + m_Name: Background_Dark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4495376406130920465 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9033946438786394551} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: -0.06, z: 0} + m_LocalScale: {x: 9, y: 11.82, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 4234202924687734341} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &2193821982121631248 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 9033946438786394551} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: -2 + m_Sprite: {fileID: 7482667652216324306, guid: 311925a002f4447b3a28927169b83ea6, type: 3} + m_Color: {r: 0, g: 0, b: 0, a: 0.2} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 1, y: 1} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 1 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs/Environment.prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs/Environment.prefab.meta new file mode 100644 index 0000000..beefb87 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Prefabs/Environment.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 31b62b6da850f443a8ad687d5f88ccc5 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites.meta new file mode 100644 index 0000000..b4df541 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a5cce22890dde419c8a0ef88ccc56dba +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Lines.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Lines.png new file mode 100644 index 0000000..8d1e042 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Lines.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Lines.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Lines.png.meta new file mode 100644 index 0000000..43d2fbc --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Lines.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 8ce04c396f40d41cbb898247b7c5f8a4 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 150 + spriteBorder: {x: 60, y: 60, z: 60, w: 60} + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Pattern.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Pattern.png new file mode 100644 index 0000000..0b853d3 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Pattern.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Pattern.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Pattern.png.meta new file mode 100644 index 0000000..afc15cb --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Content/Sprites/Pattern.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 1d3a296bee6d04635be34a52a9b077c9 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: 1 + aniso: 1 + mipBias: 0 + wrapU: 0 + wrapV: 0 + wrapW: 0 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 0 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 30 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources.meta new file mode 100644 index 0000000..20a5ad6 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a17381eb12fb24c05a10da7731983613 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources/GameConfiguration.asset b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources/GameConfiguration.asset new file mode 100644 index 0000000..072803a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources/GameConfiguration.asset @@ -0,0 +1,17 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 55b73d944563401787d41762940cbdc1, type: 3} + m_Name: GameConfiguration + m_EditorClassIdentifier: + FruitCopyCollectAmount: 3 + MaxFruitsCollectedCount: 6 + InitialFruitsCount: 40 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources/GameConfiguration.asset.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources/GameConfiguration.asset.meta new file mode 100644 index 0000000..e6f0cb7 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Resources/GameConfiguration.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f0d7ecc89bc148bdb733712ef5585ca +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts.meta new file mode 100644 index 0000000..e23bd17 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: baee60f22fd24428da79c53b72c60ec1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentController.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentController.cs new file mode 100644 index 0000000..a613bbe --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentController.cs @@ -0,0 +1,66 @@ +using System.Collections.Generic; +using System.Linq; +using System.Threading; +using Cysharp.Threading.Tasks; +using Playtika.Controllers; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameEnvironmentController manages the game environment setup using GameEnvironmentView and GameModel. + /// Initialization involves populating the environment with fruits based on configuration and randomizing their order. + /// It asynchronously initializes each fruit using FruitBoardController instances. + /// + public class GameEnvironmentController : ControllerWithResultBase + { + private readonly GameModel _gameModel; + private readonly ResourcesProvider _resourcesProvider; + private readonly GameEnvironmentView _environmentView; + + public GameEnvironmentController( + IControllerFactory controllerFactory, + GameModel gameModel, + ResourcesProvider resourcesProvider, + GameEnvironmentView environmentView) + : base(controllerFactory) + { + _gameModel = gameModel; + _resourcesProvider = resourcesProvider; + _environmentView = environmentView; + } + + protected override UniTask OnFlowAsync(CancellationToken cancellationToken) + { + return InitializeBoard(cancellationToken); + } + + private async UniTask InitializeBoard(CancellationToken cancellationToken) + { + _environmentView.Container.Clear(); + + var fruitCollection = await _resourcesProvider.LoadAsync("FruitsCollection", cancellationToken); + cancellationToken.ThrowIfCancellationRequested(); + + var fruitsList = new List(_gameModel.FruitsOnBoardCount); + for (var i = 0; i < _gameModel.FruitsOnBoardCount; i++) + { + var index = (int)Mathf.Repeat(i / _gameModel.GameConfiguration.FruitCopyCollectAmount, + fruitCollection.List.Count); + fruitsList.Add(fruitCollection.List[index]); + } + + var random = new System.Random(); + fruitsList = fruitsList.OrderBy(x => random.Next()).ToList(); + + foreach (var fruitData in fruitsList) + { + var args = new FruitBoardControllerArgs(fruitData); + ExecuteAndWaitResultAsync(args, CancellationToken) + .Forget(); + + await UniTask.WaitForSeconds(0.1f, cancellationToken: cancellationToken); + } + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentController.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentController.cs.meta new file mode 100644 index 0000000..c7080b2 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5361c872a2794f39ae1769f5953f4877 +timeCreated: 1713026863 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentView.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentView.cs new file mode 100644 index 0000000..fb1adab --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentView.cs @@ -0,0 +1,19 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameEnvironmentView, a MonoBehaviour, represents the view component managing the game environment within the Unity scene. + /// + public class GameEnvironmentView : MonoBehaviour + { + public Transform Container => _container; + public Vector2 SpawnArea => _spawnArea; + + [SerializeField] + private Transform _container; + + [SerializeField] + private Vector2 _spawnArea; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentView.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentView.cs.meta new file mode 100644 index 0000000..054b891 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Core/Scripts/GameEnvironmentView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4cd7eaebb53be4192951d0258755683a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits.meta new file mode 100644 index 0000000..86cde89 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3b69afb8842a44516a9fb50bfa4e62c3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content.meta new file mode 100644 index 0000000..66c9556 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fbdc2ab062cb444c8bdd2f6359abfb8f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations.meta new file mode 100644 index 0000000..80f800b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4eb69e4389f814e8985736645d8de3e3 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Hide.anim b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Hide.anim new file mode 100644 index 0000000..ed29d63 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Hide.anim @@ -0,0 +1,168 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FruitBoard_Hide + serializedVersion: 7 + m_Legacy: 1 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.25 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.25 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Hide.anim.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Hide.anim.meta new file mode 100644 index 0000000..621c34a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Hide.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 5e720510a75ca4365a08ad7e0c507946 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Show.anim b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Show.anim new file mode 100644 index 0000000..da5877b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Show.anim @@ -0,0 +1,276 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: FruitBoard_Show + serializedVersion: 7 + m_Legacy: 1 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.18333334 + value: {x: 1.1, y: 1.1, z: 1.1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.31666666 + value: {x: 0.95, y: 0.95, z: 0.95} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.4 + value: {x: 1.05, y: 1.05, z: 1.05} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.45 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.45 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18333334 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.45 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18333334 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.45 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18333334 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.45 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Show.anim.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Show.anim.meta new file mode 100644 index 0000000..e3d982a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Animations/FruitBoard_Show.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 78fb0465afdb24e44bf3369835235e09 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets.meta new file mode 100644 index 0000000..0ff3b81 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 85c6d5a005753404ab9e0e34e684b457 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources.meta new file mode 100644 index 0000000..e38ec4e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ad6066587c8b6469fbe8a43231e0e4f8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_0_Sprite.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_0_Sprite.png new file mode 100644 index 0000000..6455ef1 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_0_Sprite.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_0_Sprite.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_0_Sprite.png.meta new file mode 100644 index 0000000..f12f42d --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_0_Sprite.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: b57a0883b7b5a43608eeccc0fe7ba449 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 9 + spritePivot: {x: 0.49428734, y: 0.40716934} + spritePixelsToUnits: 240 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_1_Sprite.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_1_Sprite.png new file mode 100644 index 0000000..37accaa Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_1_Sprite.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_1_Sprite.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_1_Sprite.png.meta new file mode 100644 index 0000000..e76f588 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_1_Sprite.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 1f4f898e9c34c41a9ae39135ffcb90b0 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 9 + spritePivot: {x: 0.5042845, y: 0.45001426} + spritePixelsToUnits: 230 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_2_Sprite.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_2_Sprite.png new file mode 100644 index 0000000..40f0532 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_2_Sprite.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_2_Sprite.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_2_Sprite.png.meta new file mode 100644 index 0000000..9a9cb29 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_2_Sprite.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 9087f77a354244b1a8884a80d35e8b57 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 9 + spritePivot: {x: 0.5057126, y: 0.421451} + spritePixelsToUnits: 230 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_3_Sprite.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_3_Sprite.png new file mode 100644 index 0000000..56b50bb Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_3_Sprite.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_3_Sprite.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_3_Sprite.png.meta new file mode 100644 index 0000000..d2bec0b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_3_Sprite.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 89ce91911db834de6b3529141359b0f1 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 9 + spritePivot: {x: 0.49000284, y: 0.4714367} + spritePixelsToUnits: 230 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_4_Sprite.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_4_Sprite.png new file mode 100644 index 0000000..f7f8c42 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_4_Sprite.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_4_Sprite.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_4_Sprite.png.meta new file mode 100644 index 0000000..f138964 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Assets/Resources/Fruit_4_Sprite.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: da878ac1d5ea84bceb225e79237daad7 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 250 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data.meta new file mode 100644 index 0000000..c15bd50 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a3879b07fed21442eaa36e2984c62550 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_0.asset b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_0.asset new file mode 100644 index 0000000..c1af5e0 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_0.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f12d580cd03b143128de8fb8a91358d3, type: 3} + m_Name: Fruit_0 + m_EditorClassIdentifier: + _resourceId: Fruit_0 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_0.asset.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_0.asset.meta new file mode 100644 index 0000000..7aa9e1e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_0.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3df914c3b99d3416a9a285e42fe6bda9 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_1.asset b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_1.asset new file mode 100644 index 0000000..f1fb815 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_1.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f12d580cd03b143128de8fb8a91358d3, type: 3} + m_Name: Fruit_1 + m_EditorClassIdentifier: + _resourceId: Fruit_1 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_1.asset.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_1.asset.meta new file mode 100644 index 0000000..7628642 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_1.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 061980bfd50da44289b6977f604bf53b +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_2.asset b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_2.asset new file mode 100644 index 0000000..133919f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_2.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f12d580cd03b143128de8fb8a91358d3, type: 3} + m_Name: Fruit_2 + m_EditorClassIdentifier: + _resourceId: Fruit_2 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_2.asset.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_2.asset.meta new file mode 100644 index 0000000..ab520b8 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_2.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d16e6cfb94d6b4e9ab6acd4178618f16 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_3.asset b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_3.asset new file mode 100644 index 0000000..8abf0ef --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_3.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f12d580cd03b143128de8fb8a91358d3, type: 3} + m_Name: Fruit_3 + m_EditorClassIdentifier: + _resourceId: Fruit_3 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_3.asset.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_3.asset.meta new file mode 100644 index 0000000..60a417a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_3.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6e2e30d2b06794838a36963ec65ae6c6 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_4.asset b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_4.asset new file mode 100644 index 0000000..e106534 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_4.asset @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f12d580cd03b143128de8fb8a91358d3, type: 3} + m_Name: Fruit_4 + m_EditorClassIdentifier: + _resourceId: Fruit_4 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_4.asset.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_4.asset.meta new file mode 100644 index 0000000..202718f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Data/Fruit_4.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b3bc594ffd2c04455a40be83defccd85 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial.meta new file mode 100644 index 0000000..6c30f46 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1fff28f425ae24e63996c3e4951213eb +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial/Fruit_PhysicsMaterial.physicsMaterial2D b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial/Fruit_PhysicsMaterial.physicsMaterial2D new file mode 100644 index 0000000..52934f6 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial/Fruit_PhysicsMaterial.physicsMaterial2D @@ -0,0 +1,11 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!62 &6200000 +PhysicsMaterial2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: Fruit_PhysicsMaterial + friction: 0.1 + bounciness: 0.2 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial/Fruit_PhysicsMaterial.physicsMaterial2D.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial/Fruit_PhysicsMaterial.physicsMaterial2D.meta new file mode 100644 index 0000000..f8a965e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/PhysicsMaterial/Fruit_PhysicsMaterial.physicsMaterial2D.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6ff45f3855876430bace6ab104e4f2dd +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 6200000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources.meta new file mode 100644 index 0000000..d2ce1b7 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: afca28b3216fb400e9fe674fc65b036b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitBoard.prefab b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitBoard.prefab new file mode 100644 index 0000000..f59abb5 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitBoard.prefab @@ -0,0 +1,215 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &5095062733169645201 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3267695331231205403} + - component: {fileID: 5800893775626658424} + m_Layer: 0 + m_Name: Sprite + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3267695331231205403 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5095062733169645201} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1.2, y: 1.2, z: 1.2} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 3158312996380650695} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!212 &5800893775626658424 +SpriteRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 5095062733169645201} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_StaticShadowCaster: 0 + m_MotionVectors: 1 + m_LightProbeUsage: 1 + m_ReflectionProbeUsage: 1 + m_RayTracingMode: 0 + m_RayTraceProcedural: 0 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 10754, guid: 0000000000000000f000000000000000, type: 0} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 0 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 + m_Sprite: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_FlipX: 0 + m_FlipY: 0 + m_DrawMode: 0 + m_Size: {x: 2.56, y: 2.56} + m_AdaptiveModeThreshold: 0.5 + m_SpriteTileMode: 0 + m_WasSpriteAssigned: 0 + m_MaskInteraction: 0 + m_SpriteSortPoint: 0 +--- !u!1 &6577089093788119021 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3158312996380650695} + - component: {fileID: 2409449214724243407} + - component: {fileID: 902954903642494832} + - component: {fileID: 6217556875563536229} + - component: {fileID: 6967941478843309611} + m_Layer: 0 + m_Name: FruitBoard + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &3158312996380650695 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6577089093788119021} + serializedVersion: 2 + 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: 3267695331231205403} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2409449214724243407 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6577089093788119021} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 290c78d8be7bb40f3b75b1fb3554fff6, type: 3} + m_Name: + m_EditorClassIdentifier: + _renderer: {fileID: 5800893775626658424} + _animationComponent: {fileID: 6967941478843309611} +--- !u!58 &902954903642494832 +CircleCollider2D: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6577089093788119021} + m_Enabled: 1 + m_Density: 1 + m_Material: {fileID: 6200000, guid: 6ff45f3855876430bace6ab104e4f2dd, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_LayerOverridePriority: 0 + m_ForceSendLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ForceReceiveLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_ContactCaptureLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_CallbackLayers: + serializedVersion: 2 + m_Bits: 4294967295 + m_IsTrigger: 0 + m_UsedByEffector: 0 + m_UsedByComposite: 0 + m_Offset: {x: 0, y: 0} + serializedVersion: 2 + m_Radius: 0.6 +--- !u!50 &6217556875563536229 +Rigidbody2D: + serializedVersion: 4 + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6577089093788119021} + m_BodyType: 0 + m_Simulated: 1 + m_UseFullKinematicContacts: 0 + m_UseAutoMass: 0 + m_Mass: 1 + m_LinearDrag: 0 + m_AngularDrag: 0.05 + m_GravityScale: 2 + m_Material: {fileID: 6200000, guid: 6ff45f3855876430bace6ab104e4f2dd, type: 2} + m_IncludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_ExcludeLayers: + serializedVersion: 2 + m_Bits: 0 + m_Interpolate: 0 + m_SleepingMode: 1 + m_CollisionDetection: 1 + m_Constraints: 0 +--- !u!111 &6967941478843309611 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6577089093788119021} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 0} + m_Animations: + - {fileID: 7400000, guid: 78fb0465afdb24e44bf3369835235e09, type: 2} + - {fileID: 7400000, guid: 5e720510a75ca4365a08ad7e0c507946, type: 2} + m_WrapMode: 0 + m_PlayAutomatically: 0 + m_AnimatePhysics: 0 + m_CullingType: 0 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitBoard.prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitBoard.prefab.meta new file mode 100644 index 0000000..124be06 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitBoard.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 85f2fdd7b40e247be80b0d18903c4368 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitsCollection.asset b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitsCollection.asset new file mode 100644 index 0000000..bcebd3f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitsCollection.asset @@ -0,0 +1,20 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0d915615c2da44f32a18c01640fcca13, type: 3} + m_Name: FruitsCollection + m_EditorClassIdentifier: + _list: + - {fileID: 11400000, guid: 3df914c3b99d3416a9a285e42fe6bda9, type: 2} + - {fileID: 11400000, guid: 061980bfd50da44289b6977f604bf53b, type: 2} + - {fileID: 11400000, guid: d16e6cfb94d6b4e9ab6acd4178618f16, type: 2} + - {fileID: 11400000, guid: 6e2e30d2b06794838a36963ec65ae6c6, type: 2} + - {fileID: 11400000, guid: b3bc594ffd2c04455a40be83defccd85, type: 2} diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitsCollection.asset.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitsCollection.asset.meta new file mode 100644 index 0000000..67c88a5 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Content/Resources/FruitsCollection.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2542252e25c414bc69919aa08225fa7f +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts.meta new file mode 100644 index 0000000..39fad25 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a663e6c0c9d0047b1bf069d6753c81dd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardController.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardController.cs new file mode 100644 index 0000000..76febfe --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardController.cs @@ -0,0 +1,72 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using Playtika.Controllers; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// FruitBoardController manages interactions for individual fruit in the game. + /// It initializes with a FruitData instance and utilizes a FruitBoardFactory to create and display corresponding views. + /// Upon user interaction, it triggers removal requests through GameModel.RequestFruitRemove() and completes + /// operations with EmptyControllerResult. The controller handles lifecycle events, ensuring proper initialization, + /// interaction handling, and cleanup of associated views. + /// + public class FruitBoardController : ControllerWithResultBase + { + private readonly GameModel _gameModel; + private readonly FruitBoardFactory _factory; + + private FruitBoardView _view; + private UniTaskCompletionSource _clickCs = new(); + private FruitData _data => Args.Data; + + public FruitBoardController( + IControllerFactory controllerFactory, + GameModel gameModel, + FruitBoardFactory factory) + : base(controllerFactory) + { + _gameModel = gameModel; + _factory = factory; + } + + protected override async UniTask OnFlowAsync(CancellationToken cancellationToken) + { + _view = await _factory.CreateAsync(_data.ResourceId, cancellationToken); + cancellationToken.ThrowIfCancellationRequested(); + + _view.Show(); + _view.Clicked += OnClicked; + + await _clickCs.Task; + cancellationToken.ThrowIfCancellationRequested(); + + _gameModel.RequestFruitRemove(_data); + + await _view.HideAsync(cancellationToken); + cancellationToken.ThrowIfCancellationRequested(); + + Complete(new EmptyControllerResult()); + } + + protected override void OnStop() + { + if (_view != null) + { + _view.Clicked -= OnClicked; + Object.Destroy(_view.gameObject); + } + } + + private void OnClicked() + { + if (_gameModel.IsFruitLineFilled()) + { + return; + } + + _clickCs.TrySetResult(); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardController.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardController.cs.meta new file mode 100644 index 0000000..aba5e8b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4bd6d554f042407bb8e262b7fa1be238 +timeCreated: 1718544312 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardControllerArgs.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardControllerArgs.cs new file mode 100644 index 0000000..b696743 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardControllerArgs.cs @@ -0,0 +1,17 @@ +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// FruitBoardControllerArgs is a readonly struct used to pass data to FruitBoardController instances during + /// initialization. It encapsulates a FruitData instance, ensuring that the data is immutable and efficiently passed + /// between components in the game's architecture. + /// + public readonly struct FruitBoardControllerArgs + { + public readonly FruitData Data; + + public FruitBoardControllerArgs(FruitData data) + { + Data = data; + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardControllerArgs.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardControllerArgs.cs.meta new file mode 100644 index 0000000..765a04e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardControllerArgs.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fa2aef251c35411da47c7483c0b6c475 +timeCreated: 1718546498 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardFactory.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardFactory.cs new file mode 100644 index 0000000..7fc1cc6 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardFactory.cs @@ -0,0 +1,40 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// FruitBoardFactory creates FruitBoardView instances within the game environment. + /// It utilizes a FruitVisualisationProvider for visual assets and a GameEnvironmentView for placement. + /// Upon creation, each board is positioned randomly within a specified range and visually represented using asset + /// data obtained from FruitVisualisationProvider. + /// + public class FruitBoardFactory + { + private readonly FruitVisualisationProvider _visualisationProvider; + private readonly GameEnvironmentView _environmentView; + + public FruitBoardFactory( + FruitVisualisationProvider visualisationProvider, + GameEnvironmentView environmentView) + { + _visualisationProvider = visualisationProvider; + _environmentView = environmentView; + } + + public async UniTask CreateAsync(string resourceId, CancellationToken cancellationToken) + { + var result = await UniTask.WhenAll(_visualisationProvider.GetFruitBoardPrefabAsync(cancellationToken), + _visualisationProvider.GetSpriteAsync(resourceId, cancellationToken)); + cancellationToken.ThrowIfCancellationRequested(); + + var instance = Object.Instantiate(result.Item1, _environmentView.Container); + + instance.transform.localPosition = Vector3.right * Random.Range(_environmentView.SpawnArea.x, _environmentView.SpawnArea.y); + instance.SetVisualisation(result.Item2); + + return instance; + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardFactory.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardFactory.cs.meta new file mode 100644 index 0000000..88aba99 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardFactory.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d95a1b754c5c4def897cc9e3afcdac55 +timeCreated: 1718544348 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardView.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardView.cs new file mode 100644 index 0000000..3c58cec --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardView.cs @@ -0,0 +1,46 @@ +using System; +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// FruitBoardView, a MonoBehaviour, represents a visual component in the game for displaying fruits. + /// This class facilitates the visual representation and interaction handling of individual fruits within the game's environment. + /// + public class FruitBoardView : MonoBehaviour, IPointerClickHandler + { + private const string ShowAnimationName = "FruitBoard_Show"; + private const string HideAnimationName = "FruitBoard_Hide"; + + public event Action Clicked; + + [SerializeField] + private SpriteRenderer _renderer; + + [SerializeField] + private Animation _animationComponent; + + public void SetVisualisation(Sprite sprite) + { + _renderer.sprite = sprite; + } + + public void Show() + { + _animationComponent.Play(ShowAnimationName); + } + + public UniTask HideAsync(CancellationToken cancellationToken) + { + return _animationComponent.PlayAsync(HideAnimationName, cancellationToken); + } + + public void OnPointerClick(PointerEventData eventData) + { + Clicked?.Invoke(); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardView.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardView.cs.meta new file mode 100644 index 0000000..7a02d43 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitBoardView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 290c78d8be7bb40f3b75b1fb3554fff6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitData.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitData.cs new file mode 100644 index 0000000..736df5f --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitData.cs @@ -0,0 +1,18 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// FruitData is a ScriptableObject representing a type of fruit in the game. + /// It contains a ResourceId property that uniquely identifies the resource associated with the fruit, + /// facilitating resource management and retrieval within the game. + /// + [CreateAssetMenu(fileName = "FruitData", menuName = "Scriptable Objects/Fruit Data")] + public class FruitData : ScriptableObject + { + public string ResourceId => _resourceId; + + [SerializeField] + private string _resourceId; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitData.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitData.cs.meta new file mode 100644 index 0000000..34c9ff7 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f12d580cd03b143128de8fb8a91358d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitDataCollectionDefinition.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitDataCollectionDefinition.cs new file mode 100644 index 0000000..cab9585 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitDataCollectionDefinition.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// FruitDataCollectionDefinition is a ScriptableObject that holds a collection of FruitData instances. + /// It provides a structured way to store and manage multiple types of fruit data within game resources. + /// + [CreateAssetMenu(fileName = "FruitsCollection", menuName = "Scriptable Objects/Fruits Collection")] + public class FruitDataCollectionDefinition : ScriptableObject + { + public IReadOnlyList List => _list; + + [SerializeField] + private List _list; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitDataCollectionDefinition.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitDataCollectionDefinition.cs.meta new file mode 100644 index 0000000..0ad0a4d --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitDataCollectionDefinition.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d915615c2da44f32a18c01640fcca13 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitVisualisationProvider.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitVisualisationProvider.cs new file mode 100644 index 0000000..ec88f3d --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitVisualisationProvider.cs @@ -0,0 +1,31 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// FruitVisualisationProvider facilitates the retrieval of visual assets for fruits in the game. + /// It offers methods to obtain the prefab for FruitBoardView and sprites associated with specific resourceId values. + /// This allows dynamic loading and display of visual elements based on the game's resource configuration. + /// + public class FruitVisualisationProvider + { + private readonly ResourcesProvider _resourcesProvider; + + public FruitVisualisationProvider(ResourcesProvider resourcesProvider) + { + _resourcesProvider = resourcesProvider; + } + + public UniTask GetFruitBoardPrefabAsync(CancellationToken cancellationToken) + { + return _resourcesProvider.LoadAsync("FruitBoard", cancellationToken); + } + + public UniTask GetSpriteAsync(string resourceId, CancellationToken cancellationToken) + { + return _resourcesProvider.LoadAsync($"{resourceId}_Sprite", cancellationToken); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitVisualisationProvider.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitVisualisationProvider.cs.meta new file mode 100644 index 0000000..8d28904 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/Environment/Fruits/Scripts/FruitVisualisationProvider.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5966a0ab8c274f4b8e91b0481dc4858e +timeCreated: 1718543801 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI.meta new file mode 100644 index 0000000..b4fa3a2 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 3a171c1ecaf614efa864251223d83077 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen.meta new file mode 100644 index 0000000..567de39 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 15562464b5a724366930287a7d779faf +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content.meta new file mode 100644 index 0000000..594569a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f7649183e85034bb6805ef848000e5e5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations.meta new file mode 100644 index 0000000..76a6e58 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: cccf5e00d214346d99adf7b3165d29ed +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations/AfterLevelScreen_Show.anim b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations/AfterLevelScreen_Show.anim new file mode 100644 index 0000000..41ad905 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations/AfterLevelScreen_Show.anim @@ -0,0 +1,438 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: AfterLevelScreen_Show + serializedVersion: 7 + m_Legacy: 1 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.25 + value: {x: 1.1, y: 1.1, z: 1.1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.33333334 + value: {x: 0.95, y: 0.95, z: 0.95} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.38333333 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: Restart_Button + m_FloatCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.33333334 + value: 0.69803923 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: Background + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 100 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 200 + inSlope: 156.52174 + outSlope: 156.52174 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.38333333 + value: 215 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_AnchoredPosition.y + path: Header + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: Header + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + flags: 0 + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.38333333 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.33333334 + value: 0.69803923 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: Background + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.33333334 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.38333333 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: Restart_Button + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.33333334 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.38333333 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: Restart_Button + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.33333334 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.38333333 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: Restart_Button + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 100 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 200 + inSlope: 156.52174 + outSlope: 156.52174 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.38333333 + value: 215 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_AnchoredPosition.y + path: Header + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.25 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: Header + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations/AfterLevelScreen_Show.anim.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations/AfterLevelScreen_Show.anim.meta new file mode 100644 index 0000000..59577f2 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Animations/AfterLevelScreen_Show.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 54176e08ff17f4efba46a04d9c9f5f07 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources.meta new file mode 100644 index 0000000..18de66c --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0570ca3d2b8be4b20a822512a8298959 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources/AfterLevelScreen.prefab b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources/AfterLevelScreen.prefab new file mode 100644 index 0000000..6dc97b9 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources/AfterLevelScreen.prefab @@ -0,0 +1,494 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &2526561122196032719 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4870559766374459906} + - component: {fileID: 9120523662368299035} + - component: {fileID: 4272272459533671291} + m_Layer: 0 + m_Name: InnerCircle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4870559766374459906 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526561122196032719} + 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: 7837974251700653777} + 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!222 &9120523662368299035 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526561122196032719} + m_CullTransparentMesh: 1 +--- !u!114 &4272272459533671291 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2526561122196032719} + 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.19958171, g: 0.6509434, b: 0.38791147, 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: 29d3ed44a0e674c79a85a1e0c8a4c711, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6767828511135579132 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 528827791184905148} + - component: {fileID: 1586734695760498009} + - component: {fileID: 2178112397209904133} + m_Layer: 0 + m_Name: AfterLevelScreen + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &528827791184905148 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6767828511135579132} + 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: 2714522394596541298} + - {fileID: 7837974251700653777} + - {fileID: 3862883944146069140} + m_Father: {fileID: 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 &1586734695760498009 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6767828511135579132} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 1e66cb4c75da4713b97ddea1d5629c60, type: 3} + m_Name: + m_EditorClassIdentifier: + _restartButton: {fileID: 3820932631433536641} + _animationComponent: {fileID: 2178112397209904133} +--- !u!111 &2178112397209904133 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6767828511135579132} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 0} + m_Animations: + - {fileID: 7400000, guid: 54176e08ff17f4efba46a04d9c9f5f07, type: 2} + m_WrapMode: 0 + m_PlayAutomatically: 0 + m_AnimatePhysics: 0 + m_CullingType: 0 +--- !u!1 &7037904086326401158 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7837974251700653777} + - component: {fileID: 7055047362974753683} + - component: {fileID: 8208436072824198022} + - component: {fileID: 3820932631433536641} + m_Layer: 0 + m_Name: Restart_Button + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7837974251700653777 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7037904086326401158} + 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: 4870559766374459906} + - {fileID: 6193764975065161259} + m_Father: {fileID: 528827791184905148} + 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: -17} + m_SizeDelta: {x: 300, y: 300} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &7055047362974753683 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7037904086326401158} + m_CullTransparentMesh: 1 +--- !u!114 &8208436072824198022 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7037904086326401158} + 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.08627451, g: 0.26666668, b: 0.17254902, 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: 29d3ed44a0e674c79a85a1e0c8a4c711, 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: 0.5 +--- !u!114 &3820932631433536641 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7037904086326401158} + 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: 8208436072824198022} + m_OnClick: + m_PersistentCalls: + m_Calls: [] +--- !u!1 &8206786695959001430 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2714522394596541298} + - component: {fileID: 2441207298673566987} + - component: {fileID: 8390518528372247864} + m_Layer: 0 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2714522394596541298 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8206786695959001430} + 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: 528827791184905148} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &2441207298673566987 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8206786695959001430} + m_CullTransparentMesh: 1 +--- !u!114 &8390518528372247864 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8206786695959001430} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.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: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8236766127313766587 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3862883944146069140} + - component: {fileID: 1680322291106804345} + - component: {fileID: 9054303230421718966} + m_Layer: 0 + m_Name: Header + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3862883944146069140 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8236766127313766587} + 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: 528827791184905148} + 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: 215} + m_SizeDelta: {x: 490, y: 110} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &1680322291106804345 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8236766127313766587} + m_CullTransparentMesh: 1 +--- !u!114 &9054303230421718966 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8236766127313766587} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 6346212bea7464a5cae2a38f5f7e1c77, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &8365170519143469533 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6193764975065161259} + - component: {fileID: 372264268867319328} + - component: {fileID: 2634446374093594424} + m_Layer: 0 + m_Name: Icon + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6193764975065161259 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365170519143469533} + 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: 7837974251700653777} + 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 &372264268867319328 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365170519143469533} + m_CullTransparentMesh: 1 +--- !u!114 &2634446374093594424 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 8365170519143469533} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 86329eb0d6a3d45678f314d516488440, 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 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources/AfterLevelScreen.prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources/AfterLevelScreen.prefab.meta new file mode 100644 index 0000000..ee4602c --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Content/Resources/AfterLevelScreen.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 7905deee7b72c4a4b86f6c262825d9de +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts.meta new file mode 100644 index 0000000..9538cb6 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e9818f6b61a844ec3889e8a5f08ec92d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenController.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenController.cs new file mode 100644 index 0000000..717e973 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenController.cs @@ -0,0 +1,58 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using Playtika.Controllers; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// AfterLevelScreenController manages the post-level screen UI, instantiated from AfterLevelScreenView. + /// It handles UI setup and cleanup during its lifecycle. + /// Initialization includes displaying the screen and binding a restart button click event to RestartButtonClicked(). + /// On stopping, it removes event listeners and destroys the UI instance. RestartButtonClicked() triggers a restart + /// request through GameModel.RequestRestart(). + /// + public class AfterLevelScreenController : ControllerWithResultBase + { + private readonly IGameEventsRequestsModel _gameRequestsModel; + private readonly ResourcesProvider _resourcesProvider; + private readonly Transform _container; + + private AfterLevelScreenView _view; + + public AfterLevelScreenController( + IControllerFactory controllerFactory, + GameUIView uiView, + IGameEventsRequestsModel gameRequestsModel, + ResourcesProvider resourcesProvider) + : base(controllerFactory) + { + _container = uiView.PopupsContainer; + _gameRequestsModel = gameRequestsModel; + _resourcesProvider = resourcesProvider; + } + + protected override async UniTask OnFlowAsync(CancellationToken cancellationToken) + { + var prefab = await _resourcesProvider.LoadAsync("AfterLevelScreen", cancellationToken); + cancellationToken.ThrowIfCancellationRequested(); + + _view = Object.Instantiate(prefab, _container); + _view.Show(); + + _view.RestartButton.onClick.AddListener(RestartButtonClicked); + } + + protected override void OnStop() + { + _view.RestartButton.onClick.RemoveAllListeners(); + + Object.Destroy(_view.gameObject); + } + + private void RestartButtonClicked() + { + _gameRequestsModel.RequestRestart(); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenController.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenController.cs.meta new file mode 100644 index 0000000..5e09c05 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 396c32f111ce4092944ab8fbb66745a4 +timeCreated: 1718630338 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenView.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenView.cs new file mode 100644 index 0000000..84781d5 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenView.cs @@ -0,0 +1,26 @@ +using UnityEngine; +using UnityEngine.UI; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// AfterLevelScreenView is a MonoBehaviour, manages the view component displayed after completing a game level. + /// + public class AfterLevelScreenView : MonoBehaviour + { + private const string ShowAnimationName = "AfterLevelScreen_Show"; + + public Button RestartButton => _restartButton; + + [SerializeField] + private Button _restartButton; + + [SerializeField] + private Animation _animationComponent; + + public void Show() + { + _animationComponent.Play(ShowAnimationName); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenView.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenView.cs.meta new file mode 100644 index 0000000..7b12411 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/AfterLevelScreen/Scripts/AfterLevelScreenView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 1e66cb4c75da4713b97ddea1d5629c60 +timeCreated: 1718630395 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits.meta new file mode 100644 index 0000000..caca9c7 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b86da0894c25e44b98da21816147846f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content.meta new file mode 100644 index 0000000..c88eb44 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 07ca34ed9c5f5485aab0a806d013702f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations.meta new file mode 100644 index 0000000..a048f5a --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 23b671af1039a454a881027fb871c104 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Hide.anim b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Hide.anim new file mode 100644 index 0000000..ee69904 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Hide.anim @@ -0,0 +1,288 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CollectedFruitItem_Hide + serializedVersion: 7 + m_Legacy: 1 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.31666666 + value: {x: 1.2, y: 1.2, z: 1.2} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 50 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_AnchoredPosition.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: Image + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + flags: 0 + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.31666666 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 50 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_AnchoredPosition.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_Color.a + path: Image + classID: 114 + script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.31666666 + value: 1.2 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Hide.anim.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Hide.anim.meta new file mode 100644 index 0000000..2dc710b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Hide.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c0cba101a0cec4e048b8dfdd50d5b5bb +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Show.anim b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Show.anim new file mode 100644 index 0000000..0813aa7 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Show.anim @@ -0,0 +1,276 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!74 &7400000 +AnimationClip: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: CollectedFruitItem_Show + serializedVersion: 7 + m_Legacy: 1 + m_Compressed: 0 + m_UseHighQualityCurve: 1 + m_RotationCurves: [] + m_CompressedRotationCurves: [] + m_EulerCurves: [] + m_PositionCurves: [] + m_ScaleCurves: + - curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: {x: 0, y: 0, z: 0} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.18333334 + value: {x: 1.1, y: 1.1, z: 1.1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.28333333 + value: {x: 0.95, y: 0.95, z: 0.95} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.35 + value: {x: 1.05, y: 1.05, z: 1.05} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + - serializedVersion: 3 + time: 0.4 + value: {x: 1, y: 1, z: 1} + inSlope: {x: 0, y: 0, z: 0} + outSlope: {x: 0, y: 0, z: 0} + tangentMode: 0 + weightedMode: 0 + inWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + outWeight: {x: 0.33333334, y: 0.33333334, z: 0.33333334} + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + path: + m_FloatCurves: [] + m_PPtrCurves: [] + m_SampleRate: 60 + m_WrapMode: 0 + m_Bounds: + m_Center: {x: 0, y: 0, z: 0} + m_Extent: {x: 0, y: 0, z: 0} + m_ClipBindingConstant: + genericBindings: [] + pptrCurveMapping: [] + m_AnimationClipSettings: + serializedVersion: 2 + m_AdditiveReferencePoseClip: {fileID: 0} + m_AdditiveReferencePoseTime: 0 + m_StartTime: 0 + m_StopTime: 0.4 + m_OrientationOffsetY: 0 + m_Level: 0 + m_CycleOffset: 0 + m_HasAdditiveReferencePose: 0 + m_LoopTime: 0 + m_LoopBlend: 0 + m_LoopBlendOrientation: 0 + m_LoopBlendPositionY: 0 + m_LoopBlendPositionXZ: 0 + m_KeepOriginalOrientation: 0 + m_KeepOriginalPositionY: 1 + m_KeepOriginalPositionXZ: 0 + m_HeightFromFeet: 0 + m_Mirror: 0 + m_EditorCurves: + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18333334 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.28333333 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.35 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.x + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18333334 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.28333333 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.35 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.y + path: + classID: 224 + script: {fileID: 0} + flags: 0 + - serializedVersion: 2 + curve: + serializedVersion: 2 + m_Curve: + - serializedVersion: 3 + time: 0 + value: 0 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.18333334 + value: 1.1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.28333333 + value: 0.95 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.35 + value: 1.05 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + - serializedVersion: 3 + time: 0.4 + value: 1 + inSlope: 0 + outSlope: 0 + tangentMode: 136 + weightedMode: 0 + inWeight: 0.33333334 + outWeight: 0.33333334 + m_PreInfinity: 2 + m_PostInfinity: 2 + m_RotationOrder: 4 + attribute: m_LocalScale.z + path: + classID: 224 + script: {fileID: 0} + flags: 0 + m_EulerEditorCurves: [] + m_HasGenericRootTransform: 0 + m_HasMotionFloatCurves: 0 + m_Events: [] diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Show.anim.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Show.anim.meta new file mode 100644 index 0000000..12fcb40 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Animations/CollectedFruitItem_Show.anim.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2039b00fd20f24e68afa674e71c0bb5a +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 7400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs.meta new file mode 100644 index 0000000..52ec813 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1a6c81363aae45c29892af66e2a6081 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitPreview.prefab b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitPreview.prefab new file mode 100644 index 0000000..92ee1bb --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitPreview.prefab @@ -0,0 +1,146 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1850136844171517301 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3260882128620691191} + - component: {fileID: 1372158923887844196} + - component: {fileID: 983164680730148715} + m_Layer: 0 + m_Name: FruitPreview + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3260882128620691191 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850136844171517301} + 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: 2722285307728118647} + 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!114 &1372158923887844196 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850136844171517301} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fffe88dcb0ce4c51b00e75828638bb1d, type: 3} + m_Name: + m_EditorClassIdentifier: + _image: {fileID: 9199024696812505408} + _animationComponent: {fileID: 983164680730148715} +--- !u!111 &983164680730148715 +Animation: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1850136844171517301} + m_Enabled: 1 + serializedVersion: 3 + m_Animation: {fileID: 7400000, guid: 2039b00fd20f24e68afa674e71c0bb5a, type: 2} + m_Animations: + - {fileID: 7400000, guid: 2039b00fd20f24e68afa674e71c0bb5a, type: 2} + - {fileID: 7400000, guid: c0cba101a0cec4e048b8dfdd50d5b5bb, type: 2} + m_WrapMode: 0 + m_PlayAutomatically: 1 + m_AnimatePhysics: 0 + m_CullingType: 0 +--- !u!1 &6558884335042385852 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2722285307728118647} + - component: {fileID: 2135340954695457783} + - component: {fileID: 9199024696812505408} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2722285307728118647 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6558884335042385852} + 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: 3260882128620691191} + 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 &2135340954695457783 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6558884335042385852} + m_CullTransparentMesh: 1 +--- !u!114 &9199024696812505408 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6558884335042385852} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: b57a0883b7b5a43608eeccc0fe7ba449, 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 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitPreview.prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitPreview.prefab.meta new file mode 100644 index 0000000..3b81756 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitPreview.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 0d00c72e4f0d745ebb40e19d3aac038c +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitSlot.prefab b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitSlot.prefab new file mode 100644 index 0000000..163f2e3 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitSlot.prefab @@ -0,0 +1,163 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &1151905939476842381 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6994769223713818873} + - component: {fileID: 7366130751407268700} + m_Layer: 0 + m_Name: FruitSlot + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6994769223713818873 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1151905939476842381} + 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: 6249959047361075924} + - {fileID: 8484078520297554197} + m_Father: {fileID: 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: 120, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &7366130751407268700 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1151905939476842381} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: a8878fb764c742daad68d2e92a698234, type: 3} + m_Name: + m_EditorClassIdentifier: + _container: {fileID: 8484078520297554197} +--- !u!1 &2438758660865418212 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6249959047361075924} + - component: {fileID: 4177919984734175448} + - component: {fileID: 962500823197341684} + m_Layer: 0 + m_Name: Image + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6249959047361075924 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2438758660865418212} + 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: 6994769223713818873} + 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: -56.9} + m_SizeDelta: {x: 100, y: 20} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &4177919984734175448 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2438758660865418212} + m_CullTransparentMesh: 1 +--- !u!114 &962500823197341684 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2438758660865418212} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0, g: 0, b: 0, a: 0.39215687} + 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: 29d3ed44a0e674c79a85a1e0c8a4c711, type: 3} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &6324969151804432985 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 8484078520297554197} + m_Layer: 0 + m_Name: Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &8484078520297554197 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6324969151804432985} + 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: 6994769223713818873} + 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: -12.1} + m_SizeDelta: {x: 100, y: 100} + m_Pivot: {x: 0.5, y: 0.5} diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitSlot.prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitSlot.prefab.meta new file mode 100644 index 0000000..e13ba74 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Content/Prefabs/FruitSlot.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: ac46d014486c242e48a5fecd74bfbdb8 +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts.meta new file mode 100644 index 0000000..7bc6f57 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f6dcefea263eb40b88f75a3606cf98d8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitItemView.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitItemView.cs new file mode 100644 index 0000000..e3e2bda --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitItemView.cs @@ -0,0 +1,38 @@ +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; +using UnityEngine.UI; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameUICollectedFruitItemView, a MonoBehaviour, manages individual visual representations of collected fruits in the game's UI. + /// This class facilitates dynamic display and animation management of collected fruit items within the game's UI system. + /// + public class GameUICollectedFruitItemView : MonoBehaviour + { + private const string ShowAnimationName = "CollectedFruitItem_Show"; + private const string HideAnimationName = "CollectedFruitItem_Hide"; + + [SerializeField] + private Image _image; + + [SerializeField] + private Animation _animationComponent; + + public void SetVisualisation(Sprite sprite) + { + _image.sprite = sprite; + } + + public void Show() + { + _animationComponent.Play(ShowAnimationName); + } + + public UniTask HideAsync(CancellationToken cancellationToken) + { + return _animationComponent.PlayAsync(HideAnimationName, cancellationToken); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitItemView.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitItemView.cs.meta new file mode 100644 index 0000000..c05c553 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitItemView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: fffe88dcb0ce4c51b00e75828638bb1d +timeCreated: 1718549026 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitSlotView.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitSlotView.cs new file mode 100644 index 0000000..f834149 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitSlotView.cs @@ -0,0 +1,15 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameUICollectedFruitSlotView, a MonoBehaviour, represents a slot in the UI for displaying collected fruit items. + /// + public class GameUICollectedFruitSlotView : MonoBehaviour + { + public Transform Container => _container; + + [SerializeField] + private Transform _container; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitSlotView.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitSlotView.cs.meta new file mode 100644 index 0000000..fca7309 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitSlotView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: a8878fb764c742daad68d2e92a698234 +timeCreated: 1718549013 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsController.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsController.cs new file mode 100644 index 0000000..ff1cbbb --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsController.cs @@ -0,0 +1,98 @@ +using System.Collections.Generic; +using Cysharp.Threading.Tasks; +using Playtika.Controllers; +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameUICollectedFruitsController handles the UI display of collected fruits in the game. + /// It dynamically manages visual slots based on changes in the GameModel. + /// Initialization clears and sets up the UI slots. Event handlers update the UI when fruits are added or removed, + /// providing visual feedback asynchronously for removal animations. + /// + public class GameUICollectedFruitsController : ControllerBase + { + private readonly GameModel _gameModel; + private readonly FruitVisualisationProvider _visualisationProvider; + private readonly GameUICollectedFruitsView _view; + + private List _slotViews; + + public GameUICollectedFruitsController( + IControllerFactory controllerFactory, + GameModel gameModel, + FruitVisualisationProvider visualisationProvider, + GameUICollectedFruitsView view) + : base(controllerFactory) + { + _gameModel = gameModel; + _visualisationProvider = visualisationProvider; + _view = view; + + _slotViews = new List(_gameModel.GameConfiguration.MaxFruitsCollectedCount); + } + + protected override void OnStart() + { + _view.Container.Clear(); + + for (var i = 0; i < _slotViews.Capacity; i++) + { + var slotInstance = Object.Instantiate(_view.SlotPrefab, _view.Container); + _slotViews.Add(slotInstance); + } + + _gameModel.FruitAddedToList += OnFruitAddedToList; + _gameModel.FruitsRemovedFromList += OnFruitsRemovedFromList; + } + + protected override void OnStop() + { + _gameModel.FruitAddedToList -= OnFruitAddedToList; + _gameModel.FruitsRemovedFromList -= OnFruitsRemovedFromList; + } + + private void OnFruitAddedToList(int index, FruitData data) + { + OnFruitAddedToListAsync(index, data).Forget(); + } + + private async UniTask OnFruitAddedToListAsync(int index, FruitData data) + { + var slotView = _slotViews[index]; + + var fruitInstance = Object.Instantiate(_view.ItemPrefab, slotView.Container); + var sprite = await _visualisationProvider.GetSpriteAsync(data.ResourceId, CancellationToken); + + fruitInstance.SetVisualisation(sprite); + fruitInstance.Show(); + } + + private void OnFruitsRemovedFromList(List indexesList) + { + OnFruitsRemovedFromListAsync(indexesList).Forget(); + } + + private async UniTask OnFruitsRemovedFromListAsync(List indexesList) + { + await UniTask.WaitForSeconds(0.2f, cancellationToken: CancellationToken); + + foreach (var index in indexesList) + { + var slotView = _slotViews[index]; + ClearSlot(slotView).Forget(); + + await UniTask.WaitForSeconds(0.1f, cancellationToken: CancellationToken); + } + } + + private async UniTaskVoid ClearSlot(GameUICollectedFruitSlotView slotView) + { + var fruitInstance = slotView.Container.GetComponentInChildren(); + await fruitInstance.HideAsync(CancellationToken); + + Object.Destroy(fruitInstance.gameObject); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsController.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsController.cs.meta new file mode 100644 index 0000000..6a9f257 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsController.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: b093027700fe49a2bb3964f41f194da6 +timeCreated: 1718549529 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsView.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsView.cs new file mode 100644 index 0000000..3568cfc --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsView.cs @@ -0,0 +1,24 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameUICollectedFruitsView, a MonoBehaviour, manages UI components for displaying collected fruits in the game. + /// These elements facilitate the organization and presentation of collected fruits within the game's UI system. + /// + public class GameUICollectedFruitsView : MonoBehaviour + { + public Transform Container => _container; + public GameUICollectedFruitSlotView SlotPrefab => _slotPrefab; + public GameUICollectedFruitItemView ItemPrefab => _itemPrefab; + + [SerializeField] + private Transform _container; + + [SerializeField] + private GameUICollectedFruitSlotView _slotPrefab; + + [SerializeField] + private GameUICollectedFruitItemView _itemPrefab; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsView.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsView.cs.meta new file mode 100644 index 0000000..b057ad4 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/CollectedFruits/Scripts/GameUICollectedFruitsView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 66fc8cb6b4154d2b89bac2ec45e3b8c2 +timeCreated: 1718548990 \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core.meta new file mode 100644 index 0000000..f0550df --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 51050f809993545798dca46b57da6eee +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content.meta new file mode 100644 index 0000000..662fc88 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0c03607d717134b0f9609979b719c09e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab.meta new file mode 100644 index 0000000..cb88b96 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f9b0d4bdae64344de9f26559435e5b3d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab/UI.prefab b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab/UI.prefab new file mode 100644 index 0000000..022e956 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab/UI.prefab @@ -0,0 +1,482 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!1 &85316130108556961 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7477592136115080557} + m_Layer: 0 + m_Name: Container + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7477592136115080557 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 85316130108556961} + 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: 7955743631434330736} + - {fileID: 3632451623478443297} + - {fileID: 6603288801512602969} + m_Father: {fileID: 3236629527562902630} + 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!1 &824219678940355041 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 7955743631434330736} + m_Layer: 0 + m_Name: Bottom + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &7955743631434330736 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 824219678940355041} + 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: 4569798590878230768} + m_Father: {fileID: 7477592136115080557} + 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: 150} + m_SizeDelta: {x: 0, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1597224226876947175 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3632451623478443297} + - component: {fileID: 5476776564589974241} + - component: {fileID: 6088538719968442926} + m_Layer: 0 + m_Name: Logo + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3632451623478443297 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597224226876947175} + 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: 7477592136115080557} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 1} + m_AnchorMax: {x: 0.5, y: 1} + m_AnchoredPosition: {x: 0, y: -147} + m_SizeDelta: {x: 303, y: 161} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!222 &5476776564589974241 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597224226876947175} + m_CullTransparentMesh: 1 +--- !u!114 &6088538719968442926 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1597224226876947175} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 21300000, guid: 3dbffecfdfe164eada18b648d2703621, type: 3} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!1 &2073810355654277025 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 6603288801512602969} + m_Layer: 0 + m_Name: PopupsContainer + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &6603288801512602969 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2073810355654277025} + 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: 7477592136115080557} + 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!1 &2813183336786420558 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4558575284159568479} + - component: {fileID: 6446168473523129486} + m_Layer: 0 + m_Name: UI + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4558575284159568479 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2813183336786420558} + serializedVersion: 2 + 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: 3236629527562902630} + - {fileID: 4829668081568553210} + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &6446168473523129486 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2813183336786420558} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 6815a37090d984807b4af832ec46765e, type: 3} + m_Name: + m_EditorClassIdentifier: + _popupsContainer: {fileID: 6603288801512602969} + _collectedFruitsView: {fileID: 4306734778237751510} +--- !u!1 &6064220107897425181 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4829668081568553210} + - component: {fileID: 2636077902862789415} + - component: {fileID: 809521506585560895} + m_Layer: 0 + m_Name: EventSystem + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &4829668081568553210 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6064220107897425181} + serializedVersion: 2 + 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: 4558575284159568479} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!114 &2636077902862789415 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6064220107897425181} + 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!114 &809521506585560895 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 6064220107897425181} + 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!1 &7433040372188402657 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 3236629527562902630} + - component: {fileID: 6081273471566441561} + - component: {fileID: 5181258863223321829} + - component: {fileID: 5776269012292518535} + m_Layer: 0 + m_Name: Canvas + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &3236629527562902630 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7433040372188402657} + 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: 0 + m_Children: + - {fileID: 7477592136115080557} + m_Father: {fileID: 4558575284159568479} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0, y: 0} +--- !u!223 &6081273471566441561 +Canvas: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7433040372188402657} + m_Enabled: 1 + serializedVersion: 3 + m_RenderMode: 1 + m_Camera: {fileID: 0} + m_PlaneDistance: 10 + m_PixelPerfect: 0 + m_ReceivesEvents: 1 + m_OverrideSorting: 0 + m_OverridePixelPerfect: 0 + m_SortingBucketNormalizedSize: 0 + m_VertexColorAlwaysGammaSpace: 0 + m_AdditionalShaderChannelsFlag: 25 + m_UpdateRectTransformForStandalone: 0 + m_SortingLayerID: 0 + m_SortingOrder: 10 + m_TargetDisplay: 0 +--- !u!114 &5181258863223321829 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7433040372188402657} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} + m_Name: + m_EditorClassIdentifier: + m_UiScaleMode: 1 + m_ReferencePixelsPerUnit: 100 + m_ScaleFactor: 1 + m_ReferenceResolution: {x: 720, y: 1280} + m_ScreenMatchMode: 0 + m_MatchWidthOrHeight: 0 + m_PhysicalUnit: 3 + m_FallbackScreenDPI: 96 + m_DefaultSpriteDPI: 96 + m_DynamicPixelsPerUnit: 1 + m_PresetInfoIsWorld: 0 +--- !u!114 &5776269012292518535 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7433040372188402657} + 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!1 &7647860120084800745 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 4569798590878230768} + - component: {fileID: 3999048062377227180} + - component: {fileID: 4306734778237751510} + m_Layer: 0 + m_Name: Slots + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &4569798590878230768 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7647860120084800745} + 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: 7955743631434330736} + 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: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &3999048062377227180 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7647860120084800745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 4 + m_Spacing: 0 + m_ChildForceExpandWidth: 0 + m_ChildForceExpandHeight: 0 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 + m_ReverseArrangement: 0 +--- !u!114 &4306734778237751510 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 7647860120084800745} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 66fc8cb6b4154d2b89bac2ec45e3b8c2, type: 3} + m_Name: + m_EditorClassIdentifier: + _container: {fileID: 4569798590878230768} + _slotPrefab: {fileID: 7366130751407268700, guid: ac46d014486c242e48a5fecd74bfbdb8, type: 3} + _itemPrefab: {fileID: 1372158923887844196, guid: 0d00c72e4f0d745ebb40e19d3aac038c, type: 3} diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab/UI.prefab.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab/UI.prefab.meta new file mode 100644 index 0000000..d75bff9 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Prefab/UI.prefab.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a0834be56fd764d10a01d4cdc187508d +PrefabImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites.meta new file mode 100644 index 0000000..a6b5f5c --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0a50a69a48932459cbd5b0f9aab4831c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/AfterLevelHeader.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/AfterLevelHeader.png new file mode 100644 index 0000000..aede416 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/AfterLevelHeader.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/AfterLevelHeader.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/AfterLevelHeader.png.meta new file mode 100644 index 0000000..da678a4 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/AfterLevelHeader.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 6346212bea7464a5cae2a38f5f7e1c77 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Circle.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Circle.png new file mode 100644 index 0000000..d5c1851 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Circle.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Circle.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Circle.png.meta new file mode 100644 index 0000000..0402c45 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Circle.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 29d3ed44a0e674c79a85a1e0c8a4c711 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + 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: 128, y: 0, z: 128, 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Generic_Atlas.spriteatlasv2 b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Generic_Atlas.spriteatlasv2 new file mode 100644 index 0000000..5c9475e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Generic_Atlas.spriteatlasv2 @@ -0,0 +1,15 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!612988286 &1 +SpriteAtlasAsset: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_Name: + serializedVersion: 2 + m_MasterAtlas: {fileID: 0} + m_ImporterData: + packables: + - {fileID: 102900000, guid: 0a50a69a48932459cbd5b0f9aab4831c, type: 3} + m_IsVariant: 0 diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Generic_Atlas.spriteatlasv2.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Generic_Atlas.spriteatlasv2.meta new file mode 100644 index 0000000..0b99d03 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Generic_Atlas.spriteatlasv2.meta @@ -0,0 +1,30 @@ +fileFormatVersion: 2 +guid: b1fba6d1620124253a8676890874b859 +SpriteAtlasImporter: + externalObjects: {} + textureSettings: + serializedVersion: 2 + anisoLevel: 1 + compressionQuality: 50 + maxTextureSize: 2048 + textureCompression: 0 + filterMode: 1 + generateMipMaps: 0 + readable: 0 + crunchedCompression: 0 + sRGB: 1 + platformSettings: [] + packingSettings: + serializedVersion: 2 + padding: 4 + blockOffset: 1 + allowAlphaSplitting: 0 + enableRotation: 0 + enableTightPacking: 0 + enableAlphaDilation: 0 + secondaryTextureSettings: {} + variantMultiplier: 1 + bindAsDefault: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Logo.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Logo.png new file mode 100644 index 0000000..48a2841 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Logo.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Logo.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Logo.png.meta new file mode 100644 index 0000000..1ec8f69 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Logo.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 3dbffecfdfe164eada18b648d2703621 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Outline.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Outline.png new file mode 100644 index 0000000..c122a68 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Outline.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Outline.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Outline.png.meta new file mode 100644 index 0000000..d912344 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/Outline.png.meta @@ -0,0 +1,153 @@ +fileFormatVersion: 2 +guid: 0923c2b2eb3804a049980390c7420125 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + 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: 64, y: 0, z: 64, 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + - serializedVersion: 3 + buildTarget: iPhone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 1537655665 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/refresh.png b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/refresh.png new file mode 100644 index 0000000..7f9ba24 Binary files /dev/null and b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/refresh.png differ diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/refresh.png.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/refresh.png.meta new file mode 100644 index 0000000..f2e5085 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Content/Sprites/refresh.png.meta @@ -0,0 +1,127 @@ +fileFormatVersion: 2 +guid: 86329eb0d6a3d45678f314d516488440 +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 + flipGreenChannel: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + vTOnly: 0 + ignoreMipmapLimit: 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: 1 + 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 + swizzle: 50462976 + cookieLightType: 0 + platformSettings: + - serializedVersion: 3 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + ignorePlatformSupport: 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 + ignorePlatformSupport: 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 + ignorePlatformSupport: 0 + androidETC2FallbackOverride: 0 + forceMaximumCompressionQuality_BC6H_BC7: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 5e97eb03825dee720800000000000000 + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + nameFileIdTable: {} + mipmapLimitGroupName: + pSDRemoveMatte: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts.meta new file mode 100644 index 0000000..724192e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0cd6e0473de924504b3ed88326cf4670 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIController.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIController.cs new file mode 100644 index 0000000..49e4e5c --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIController.cs @@ -0,0 +1,43 @@ +using Cysharp.Threading.Tasks; +using Playtika.Controllers; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameUIController extends ControllerBase to manage the game's UI interactions. + /// It listens for events from GameModel (Win and Lose) to trigger UI updates through OnLevelEnd(). + /// Initialization includes starting a GameUICollectedFruitsController to handle fruit collection UI. + /// Cleanup involves removing event listeners to ensure proper lifecycle management. + /// + public class GameUIController : ControllerBase + { + private readonly IGameEventsModel _gameEventsModel; + + public GameUIController( + IControllerFactory controllerFactory, + IGameEventsModel gameEventsModel) + : base(controllerFactory) + { + _gameEventsModel = gameEventsModel; + } + + protected override void OnStart() + { + _gameEventsModel.Win += OnLevelEnd; + _gameEventsModel.Lose += OnLevelEnd; + + Execute(); + } + + protected override void OnStop() + { + _gameEventsModel.Win -= OnLevelEnd; + _gameEventsModel.Lose -= OnLevelEnd; + } + + private void OnLevelEnd() + { + ExecuteAndWaitResultAsync(CancellationToken).Forget(); + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIController.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIController.cs.meta new file mode 100644 index 0000000..b594638 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc0dbff93867d45ed9769312e18dff45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIView.cs b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIView.cs new file mode 100644 index 0000000..46ea700 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIView.cs @@ -0,0 +1,22 @@ +using UnityEngine; + +namespace ControllersTree.Samples.FruitsMerge +{ + /// + /// GameUIView is a MonoBehaviour representing the UI view components in the game. + /// It provides access to PopupsContainer, a serialized reference to manage pop-up UI elements, + /// and CollectedFruitsView, which connects to GameUICollectedFruitsView for displaying collected fruits UI. + /// This class facilitates interaction with and management of UI elements within the game scene. + /// + public class GameUIView : MonoBehaviour + { + public Transform PopupsContainer => _popupsContainer; + public GameUICollectedFruitsView CollectedFruitsView => _collectedFruitsView; + + [SerializeField] + private Transform _popupsContainer; + + [SerializeField] + private GameUICollectedFruitsView _collectedFruitsView; + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIView.cs.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIView.cs.meta new file mode 100644 index 0000000..f1c1420 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Features/UI/Core/Scripts/GameUIView.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6815a37090d984807b4af832ec46765e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes.meta new file mode 100644 index 0000000..7c1c919 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e6d51a30a6e6e476ab2343a453cc28d4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes/DemoScene.unity b/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes/DemoScene.unity new file mode 100644 index 0000000..b36078e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes/DemoScene.unity @@ -0,0 +1,248 @@ +%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: 3 + m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} + m_SkyboxMaterial: {fileID: 0} + 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: 0 + 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: 3 + 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 + buildHeightMesh: 0 + maxJobWorkers: 0 + preserveTilesOutsideBounds: 0 + debug: + m_Flags: 0 + m_NavMeshData: {fileID: 0} +--- !u!1 &1763343937 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1763343939} + - component: {fileID: 1763343938} + m_Layer: 0 + m_Name: RootScope + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1763343938 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1763343937} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9e7ad20ae2d7440c6b3e2e99ab49e651, type: 3} + m_Name: + m_EditorClassIdentifier: + parentReference: + TypeName: + autoRun: 1 + autoInjectGameObjects: [] + _gameView: {fileID: 1847860521} +--- !u!4 &1763343939 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1763343937} + serializedVersion: 2 + 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} +--- !u!1001 &1847860520 +PrefabInstance: + m_ObjectHideFlags: 0 + serializedVersion: 2 + m_Modification: + serializedVersion: 3 + m_TransformParent: {fileID: 0} + m_Modifications: + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalPosition.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalPosition.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalPosition.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalRotation.w + value: 1 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalRotation.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalRotation.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalRotation.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalEulerAnglesHint.x + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalEulerAnglesHint.y + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 2834930602603086173, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_LocalEulerAnglesHint.z + value: 0 + objectReference: {fileID: 0} + - target: {fileID: 3416476144409564023, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + propertyPath: m_Name + value: GameView + objectReference: {fileID: 0} + m_RemovedComponents: [] + m_RemovedGameObjects: [] + m_AddedGameObjects: [] + m_AddedComponents: [] + m_SourcePrefab: {fileID: 100100000, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} +--- !u!114 &1847860521 stripped +MonoBehaviour: + m_CorrespondingSourceObject: {fileID: 762718665078696411, guid: c86c4274b83dd415389c40df57c6f2df, type: 3} + m_PrefabInstance: {fileID: 1847860520} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: aae241492282e463aa9efe7e1b975bca, type: 3} + m_Name: + m_EditorClassIdentifier: +--- !u!1660057539 &9223372036854775807 +SceneRoots: + m_ObjectHideFlags: 0 + m_Roots: + - {fileID: 1763343939} + - {fileID: 1847860520} diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes/DemoScene.unity.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes/DemoScene.unity.meta new file mode 100644 index 0000000..963ff8e --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Scenes/DemoScene.unity.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8c9cfa26abfee488c85f1582747f6a02 +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders.meta new file mode 100644 index 0000000..9a6cd79 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8532401cde4d8417e922714c66d06b20 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/GradientShader.shader b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/GradientShader.shader new file mode 100644 index 0000000..71f9a1b --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/GradientShader.shader @@ -0,0 +1,70 @@ +Shader "Sprites/GradientShader" +{ + Properties + { + [PerRendererData] + _MainTex ("Texture", 2D) = "white" {} + _FirstColor ("First Color", Color) = (0.0,0.0,0.0,1.0) + _SecondColor ("Second Color", Color) = (0.0,0.0,0.0,1.0) + _TransitionPosition ("Transition Position", Range(0.0, 1.0)) = 0.5 + _GradientWidth ("Gradient Width", Range(0.0, 1.0)) = 0.3 + [Enum(UnityEngine.Rendering.BlendOp)] _BlendOption ("Blend Option", Float) = 1 + [Enum(UnityEngine.Rendering.BlendMode)] _BlendSrc ("Blend mode Source", Int) = 1 + [Enum(UnityEngine.Rendering.BlendMode)] _BlendDst ("Blend mode Destination", Int) = 0 + } + SubShader + { + Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent"} + LOD 100 + + ZWrite Off + BlendOp [_BlendOption] + Blend [_BlendSrc] [_BlendDst] + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct appdata + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; + }; + + struct v2f + { + float2 uv : TEXCOORD0; + float4 vertex : SV_POSITION; + }; + + sampler2D _MainTex; + float4 _FirstColor; + float4 _SecondColor; + float _TransitionPosition; + float _GradientWidth; + float4 _MainTex_ST; + + v2f vert (appdata v) + { + v2f o; + o.vertex = UnityObjectToClipPos(v.vertex); + o.uv = TRANSFORM_TEX(v.uv, _MainTex); + + return o; + } + + fixed4 frag (v2f i) : SV_Target + { + float halfGradientWidth = _GradientWidth/2; + float4 col = lerp(_FirstColor, _SecondColor, smoothstep(_TransitionPosition - halfGradientWidth, _TransitionPosition + halfGradientWidth, i.uv.y)); + + return col; + } + ENDCG + } + } +} diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/GradientShader.shader.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/GradientShader.shader.meta new file mode 100644 index 0000000..eed7828 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/GradientShader.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: ca7d927c60b9d462084d2ca005255890 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/ScrollingSprite.shader b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/ScrollingSprite.shader new file mode 100644 index 0000000..f7adce1 --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/ScrollingSprite.shader @@ -0,0 +1,92 @@ +Shader "Sprites/ScrollingSprite" +{ + Properties + { + [PerRendererData] + _MainTex ("Sprite Texture", 2D) = "white" {} + _Color ("Tint", Color) = (1,1,1,1) + _ScrollSpeed ("Scroll Speed", Vector) = (0,0,0,0) + [MaterialToggle] PixelSnap ("Pixel snap", Float) = 0 + } + + SubShader + { + Tags + { + "Queue"="Transparent" + "IgnoreProjector"="True" + "RenderType"="Transparent" + "PreviewType"="Plane" + "CanUseSpriteAtlas"="True" + } + + Cull Off + Lighting Off + ZWrite Off + Blend One OneMinusSrcAlpha + + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + #pragma multi_compile _ PIXELSNAP_ON + #include "UnityCG.cginc" + + struct appdata_t + { + float4 vertex : POSITION; + float4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + struct v2f + { + float4 vertex : SV_POSITION; + fixed4 color : COLOR; + float2 texcoord : TEXCOORD0; + }; + + fixed4 _Color; + + v2f vert(appdata_t IN) + { + v2f OUT; + OUT.vertex = UnityObjectToClipPos(IN.vertex); + OUT.texcoord = IN.texcoord; + OUT.color = IN.color * _Color; + #ifdef PIXELSNAP_ON + OUT.vertex = UnityPixelSnap (OUT.vertex); + #endif + + return OUT; + } + + sampler2D _MainTex; + float4 _MainTex_ST; + sampler2D _AlphaTex; + fixed4 _ScrollSpeed; + float _AlphaSplitEnabled; + + fixed4 SampleSpriteTexture (float2 uv) + { + fixed4 color = tex2D (_MainTex, uv*_MainTex_ST + _ScrollSpeed * _Time.x); + +#if UNITY_TEXTURE_ALPHASPLIT_ALLOWED + if (_AlphaSplitEnabled) + color.a = tex2D (_AlphaTex, uv).r; +#endif //UNITY_TEXTURE_ALPHASPLIT_ALLOWED + + return color; + } + + fixed4 frag(v2f IN) : SV_Target + { + fixed4 c = SampleSpriteTexture (IN.texcoord) * IN.color; + c.rgb *= c.a; + return c; + } + ENDCG + } + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/ScrollingSprite.shader.meta b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/ScrollingSprite.shader.meta new file mode 100644 index 0000000..f49daed --- /dev/null +++ b/src/ControllersTreeSamples/Samples~/FruitsMerge/Shaders/ScrollingSprite.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b62bf4f62333045a38793f9915535fc6 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ControllersTreeSamples/package.json b/src/ControllersTreeSamples/package.json new file mode 100644 index 0000000..ab1f666 --- /dev/null +++ b/src/ControllersTreeSamples/package.json @@ -0,0 +1,27 @@ +{ + "name": "com.playtika.controllers-tree-samples", + "displayName": "ControllersTreeSamples", + "version": "1.0.0", + "unity": "2018.3", + "description": "Samples for controllers tree package", + "keywords": [ + "Unity", + "HMVC", + "controllers-tree", + "Hierarchy of controllers", + "Unity controllers" + ], + "documentationUrl": "https://github.com/Playtika/unity-controllers-tree/blob/develop/README.md", + "samples": [ + { + "displayName": "Fruits Merge Sample", + "description": "Contains sample for small merge game to show how to use controllers tree", + "path": "Samples~/FruitsMerge" + } + ], + "dependencies": { + "com.cysharp.unitask": "1.0.0", + "jp.hadashikick.vcontainer": "1.0.0", + "com.playtika.controllers-tree": "1.0.0" + } +} \ No newline at end of file diff --git a/src/ControllersTreeSamples/package.json.meta b/src/ControllersTreeSamples/package.json.meta new file mode 100644 index 0000000..1058431 --- /dev/null +++ b/src/ControllersTreeSamples/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: f036fba1389454ab88bb59ea040bf0b8 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: