diff --git a/Assets/Darkmatter/Code/App/LifetimeScopes/ColorBookLifetimeScope.cs b/Assets/Darkmatter/Code/App/LifetimeScopes/ColorBookLifetimeScope.cs new file mode 100644 index 0000000..be1ce40 --- /dev/null +++ b/Assets/Darkmatter/Code/App/LifetimeScopes/ColorBookLifetimeScope.cs @@ -0,0 +1,5 @@ +using Darkmatter.App.LifetimeScopes; + +public class ColorBookLifetimeScope : BaseLifetimeScope +{ +} diff --git a/Assets/Darkmatter/Code/App/LifetimeScopes/ColorBookLifetimeScope.cs.meta b/Assets/Darkmatter/Code/App/LifetimeScopes/ColorBookLifetimeScope.cs.meta new file mode 100644 index 0000000..f0af676 --- /dev/null +++ b/Assets/Darkmatter/Code/App/LifetimeScopes/ColorBookLifetimeScope.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: 8bbdb0f5cdf25c34086f816c59836c9d \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs index 11111e5..7c44924 100644 --- a/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs +++ b/Assets/Darkmatter/Code/Core/Contracts/Features/DrawingCatalog/IDrawingCatalogController.cs @@ -11,4 +11,6 @@ public interface IDrawingCatalogController event Action ListChanged; UniTask InitializeAsync(CancellationToken ct); void OnTemplateSelected(string id); + void PublishBackBtnClickedSignal(); + void PublishOpenArtBookSignal(); } \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/BackBtnClickedSignal.cs b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/BackBtnClickedSignal.cs new file mode 100644 index 0000000..b2f4d02 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/BackBtnClickedSignal.cs @@ -0,0 +1,7 @@ +using UnityEngine; + +namespace Darkmatter.Core +{ + public record struct BackBtnClickedSignal; + +} diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/BackBtnClickedSignal.cs.meta b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/BackBtnClickedSignal.cs.meta new file mode 100644 index 0000000..02de706 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/BackBtnClickedSignal.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: fdd1f5bd7186d6244b2311e9f5b18a95 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/OpenArtBookSignal.cs b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/OpenArtBookSignal.cs new file mode 100644 index 0000000..8175f44 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/OpenArtBookSignal.cs @@ -0,0 +1,6 @@ +using UnityEngine; + +namespace Darkmatter.Core +{ + public record struct OpenArtBookSignal; +} diff --git a/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/OpenArtBookSignal.cs.meta b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/OpenArtBookSignal.cs.meta new file mode 100644 index 0000000..1f64629 --- /dev/null +++ b/Assets/Darkmatter/Code/Core/Data/Signals/Features/DrawingCatalog/OpenArtBookSignal.cs.meta @@ -0,0 +1,2 @@ +fileFormatVersion: 2 +guid: cf8582ced90151445a9fa7b610f59ce9 \ No newline at end of file diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs index e5e62fa..795d5d7 100644 --- a/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/Systems/DrawingCatalogController.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Threading; using Cysharp.Threading.Tasks; +using Darkmatter.Core; using Darkmatter.Core.Contracts.Features.DrawingCatalog; using Darkmatter.Core.Contracts.Features.Progression; using Darkmatter.Core.Data.Signals.Features.Drawing; @@ -40,6 +41,14 @@ public sealed class DrawingCatalogController : IDrawingCatalogController { _bus.Publish(new DrawingSelectedSignal(id)); } + public void PublishBackBtnClickedSignal() + { + _bus.Publish(new BackBtnClickedSignal()); + } + public void PublishOpenArtBookSignal() + { + _bus.Publish(new OpenArtBookSignal()); + } private void Refresh() { diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs index 88fa867..c2d7fa1 100644 --- a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogButton.cs @@ -1,18 +1,20 @@ using UnityEngine; using UnityEngine.UI; -namespace Darkmatter.Features.DrawingCatalog; - -public class DrawingCatalogButton : MonoBehaviour +namespace Darkmatter.Features.DrawingCatalog { - public string Id { get; private set; } - [SerializeField] private Image thumbnail; - [SerializeField] private Button button; - - public void Initialize(string id,Sprite thumbnailSprite, UnityEngine.Events.UnityAction onClick) + public class DrawingCatalogButton : MonoBehaviour { - Id = id; - thumbnail.sprite = thumbnailSprite; - button.onClick.AddListener(onClick); + public string Id { get; private set; } + [SerializeField] private Image thumbnail; + [SerializeField] private Button button; + + public void Initialize(string id, Sprite thumbnailSprite, UnityEngine.Events.UnityAction onClick) + { + Id = id; + thumbnail.sprite = thumbnailSprite; + button.onClick.AddListener(onClick); + } } -} \ No newline at end of file +} + diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs index 5c7ed91..2fee84c 100644 --- a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogPresenter.cs @@ -26,9 +26,22 @@ namespace Darkmatter.Features.DrawingCatalog public void Start() { _view.OnItemClicked += OnItemClicked; + _view.OnBackClicked += OnBackBtnClicked; + _view.OnArtBookClicked += OnArtBookBtnClicked; + _controller.ListChanged += OnListChanged; } + private void OnArtBookBtnClicked() + { + _controller.PublishOpenArtBookSignal(); + } + + private void OnBackBtnClicked() + { + _controller.PublishBackBtnClickedSignal(); + } + private void OnItemClicked(string id) => _controller.OnTemplateSelected(id); diff --git a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs index 9936aaf..29bc1b5 100644 --- a/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs +++ b/Assets/Darkmatter/Code/Features/DrawingCatalog/UI/DrawingCatalogView.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using Darkmatter.Libs.Observer; using UnityEngine; using UnityEngine.Pool; +using UnityEngine.UI; namespace Darkmatter.Features.DrawingCatalog { @@ -9,9 +11,21 @@ namespace Darkmatter.Features.DrawingCatalog { [SerializeField] private RectTransform content; [SerializeField] private DrawingCatalogButton buttonPrefab; + + [Header("Buttons")] + [SerializeField] private Button backButton; + [SerializeField] private Button artBookButton; private readonly List _buttons = new(); public event Action OnItemClicked; + public event Action OnBackClicked; + public event Action OnArtBookClicked; + + public void Start() + { + backButton.onClick.AddListener(() => OnBackClicked?.Invoke()); + artBookButton.onClick.AddListener(() => OnArtBookClicked?.Invoke()); + } public void SetItems(IReadOnlyList items) { diff --git a/Assets/Darkmatter/Code/Features/MainMenu/Features.Mainmenu.asmdef b/Assets/Darkmatter/Code/Features/MainMenu/Features.Mainmenu.asmdef index acc17b9..5426ab2 100644 --- a/Assets/Darkmatter/Code/Features/MainMenu/Features.Mainmenu.asmdef +++ b/Assets/Darkmatter/Code/Features/MainMenu/Features.Mainmenu.asmdef @@ -7,7 +7,8 @@ "GUID:b0214a6008ed146ff8f122a6a9c2f6cc", "GUID:68765d262e2128e4ab49c983f3411946", "GUID:80ecb87cae9c44d19824e70ea7229748", - "GUID:f51ebe6a0ceec4240a699833d6309b23" + "GUID:f51ebe6a0ceec4240a699833d6309b23", + "GUID:b4c9f7fbf1e144933a1797dc208ece5f" ], "includePlatforms": [], "excludePlatforms": [], diff --git a/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuPresenter.cs b/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuPresenter.cs index 71d6bee..ca4e46a 100644 --- a/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuPresenter.cs +++ b/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuPresenter.cs @@ -1,4 +1,6 @@ using System; +using Darkmatter.Core.Data.Signals.Features.AppBoot; +using Darkmatter.Libs.Observer; using UnityEngine; using VContainer.Unity; @@ -6,16 +8,26 @@ namespace Darkmatter.Features.Mainmenu { public class MainMenuPresenter : IStartable, IDisposable { + private readonly IEventBus _eventBus; private readonly MainMenuView _view; - public MainMenuPresenter(MainMenuView view) + + + public MainMenuPresenter(MainMenuView view, IEventBus eventBus) { _view = view; + _eventBus = eventBus; } public void Start() { _view.OnPlayBtnClickedEvent += OnPlayBtnClicked; + _eventBus.Subscribe(OnIntroComplete); + } + + private void OnIntroComplete(IntroCompletedSignal signal) + { + _view.PlayMascotIntro(); } private void OnPlayBtnClicked() diff --git a/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuView.cs b/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuView.cs index bc5d2ed..079f451 100644 --- a/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuView.cs +++ b/Assets/Darkmatter/Code/Features/MainMenu/UI/MainMenuView.cs @@ -10,10 +10,8 @@ namespace Darkmatter.Features.Mainmenu public class MainMenuView : MonoBehaviour { [Header("UI Elements")] - [SerializeField] private Button playBtn; - [SerializeField] private ParticleSystem playBtnParticle; - [SerializeField] private Animator playBtnAnimator; - + //[SerializeField] private Button playBtn; + [SerializeField] private PlayButtonView playBtn; [SerializeField] private SkeletonGraphic mascotSkeletonGraphic; [Header("Mascot Animations")] @@ -28,8 +26,7 @@ namespace Darkmatter.Features.Mainmenu private void Start() { - playBtn.onClick.AddListener(OnPlayBtnClicked); - PlayMascotIntro(); + playBtn.OnPlayBtnClickedEvent += () => OnPlayBtnClickedEvent?.Invoke(); } private void OnDisable() @@ -39,7 +36,7 @@ namespace Darkmatter.Features.Mainmenu helloCts = null; } - private void PlayMascotIntro() + public void PlayMascotIntro() { var state = mascotSkeletonGraphic.AnimationState; state.SetAnimation(0, jumpAnimation, false); @@ -59,19 +56,5 @@ namespace Darkmatter.Features.Mainmenu state.AddAnimation(0, idleAnimation, true, 0f); } } - - private void OnPlayBtnClicked() - { - playBtn.interactable = false; - playBtnAnimator.enabled = false; - PlayBtnSequenceAsync(this.GetCancellationTokenOnDestroy()).Forget(); - } - - private async UniTaskVoid PlayBtnSequenceAsync(CancellationToken token) - { - playBtnParticle.Play(); - await UniTask.WaitUntil(() => !playBtnParticle.IsAlive(true), cancellationToken: token); - OnPlayBtnClickedEvent?.Invoke(); - } } } diff --git a/Assets/Darkmatter/Code/Features/MainMenu/UI/PlayButtonView.cs b/Assets/Darkmatter/Code/Features/MainMenu/UI/PlayButtonView.cs new file mode 100644 index 0000000..5e9d0f4 --- /dev/null +++ b/Assets/Darkmatter/Code/Features/MainMenu/UI/PlayButtonView.cs @@ -0,0 +1,43 @@ +using System; +using System.Threading; +using Cysharp.Threading.Tasks; +using UnityEngine; +using UnityEngine.UI; + +namespace Darkmatter.Features.Mainmenu +{ + public class PlayButtonView : MonoBehaviour + { + private Button playBtn; + private Animator playBtnAnimator; + [SerializeField] private ParticleSystem playBtnParticle; + + public event Action OnPlayBtnClickedEvent; + + private void Awake() + { + playBtnAnimator = GetComponent(); + playBtn = GetComponent