Merge remote-tracking branch 'origin/work_branch' into savya

# Conflicts:
#	Assets/Darkmatter/Content/Fonts/static/Fredoka-Bold SDF.asset
#	Assets/Darkmatter/Content/Fonts/static/Fredoka-Medium SDF.asset
#	Assets/Darkmatter/Content/Fonts/static/Fredoka-SemiBold SDF.asset
This commit is contained in:
Savya Bikram Shah
2026-05-28 16:10:23 +05:45
34 changed files with 26282 additions and 28977 deletions

View File

@@ -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()
{

View File

@@ -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);
}
}
}
}

View File

@@ -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);

View File

@@ -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<DrawingCatalogButton> _buttons = new();
public event Action<string> 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<CatalogItemVM> items)
{

View File

@@ -7,7 +7,8 @@
"GUID:b0214a6008ed146ff8f122a6a9c2f6cc",
"GUID:68765d262e2128e4ab49c983f3411946",
"GUID:80ecb87cae9c44d19824e70ea7229748",
"GUID:f51ebe6a0ceec4240a699833d6309b23"
"GUID:f51ebe6a0ceec4240a699833d6309b23",
"GUID:b4c9f7fbf1e144933a1797dc208ece5f"
],
"includePlatforms": [],
"excludePlatforms": [],

View File

@@ -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<IntroCompletedSignal>(OnIntroComplete);
}
private void OnIntroComplete(IntroCompletedSignal signal)
{
_view.PlayMascotIntro();
}
private void OnPlayBtnClicked()

View File

@@ -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();
}
}
}

View File

@@ -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<Animator>();
playBtn = GetComponent<Button>();
}
private void Start()
{
playBtn.onClick.AddListener(OnPlayBtnClicked);
}
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();
}
}
}

View File

@@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: 26f12f86a29f25046a03d5f29e123beb