Инкапсулированы методы появления и ухода персонажа Инкапсулирована работа с аниматором Работа с репликами вынесена в ScriptableObject Логика MessageBox вынесена в отдельный класс Переработан event bus персонажей Сложность и призовой модуль вынесены в отдельные классы Character.cs приведён к Single Responsibility Principle.
60 lines
1.4 KiB
C#
60 lines
1.4 KiB
C#
using DG.Tweening;
|
|
using System;
|
|
using UnityEngine;
|
|
|
|
public class MenuGameplayTransit : MonoBehaviour
|
|
{
|
|
[SerializeField] MenuLayoutController menu;
|
|
[SerializeField] GameplayLayoutController gameplay;
|
|
|
|
public event Action GameplayOpened;
|
|
|
|
Sequence _sequence;
|
|
bool locked = false;
|
|
|
|
|
|
public void GotoGameplay()
|
|
{
|
|
Lock();
|
|
if (_sequence != null)
|
|
{
|
|
_sequence.Kill();
|
|
_sequence = null;
|
|
}
|
|
|
|
_sequence = DOTween.Sequence();
|
|
_sequence.Append(menu.GetCloseSequence());
|
|
_sequence.Append(gameplay.GetOpenSequence());
|
|
_sequence.onComplete += Unlock;
|
|
|
|
_sequence.onComplete += NotifyGameplayOpened;
|
|
_sequence.PlayForward();
|
|
}
|
|
|
|
private void NotifyGameplayOpened()
|
|
{
|
|
GameplayOpened?.Invoke();
|
|
}
|
|
|
|
public void GotoMenu()
|
|
{
|
|
Lock();
|
|
if (_sequence != null)
|
|
{
|
|
_sequence.Kill();
|
|
_sequence = null;
|
|
}
|
|
|
|
_sequence = DOTween.Sequence();
|
|
_sequence.Append(gameplay.GetCloseSequence());
|
|
_sequence.Append(menu.GetOpenSequence());
|
|
_sequence.AppendCallback(() => ControlsPerformer.Instance.SetControlable(menu));
|
|
_sequence.onComplete += Unlock;
|
|
|
|
_sequence.PlayForward();
|
|
}
|
|
|
|
private void Lock() => locked = true;
|
|
private void Unlock() => locked = false;
|
|
}
|