Пример гоночки
This commit is contained in:
1 parent
0f46c63b5d
commit
1f8e14d078
77 files changed
+10246
-90
No files matched your search
@@ -1,4 +1,3 @@
|
||||
using System;
|
||||
using Code.Infrastructure.Audio;
|
||||
using Code.Infrastructure.Camera;
|
||||
using Code.Infrastructure.Configs;
|
||||
|
||||
@@ -8,7 +8,7 @@ namespace Code.Infrastructure.App.States
|
||||
{
|
||||
[State(typeof(AppStates),typeof(AppStateMachineContext))]
|
||||
[StateRaisingEvent]
|
||||
public partial class BootstrapState : IOnGameplaySceneLoadedHandler, IUIPanelLoaded, IReadyToPlayHandle
|
||||
public partial class BootstrapState : IUIPanelLoaded, IReadyToPlayHandle
|
||||
{
|
||||
private EventBus.EventBus _eventBus;
|
||||
public BootstrapState(AppStateMachineContext context, EventBus.EventBus eventBus) : base(context,eventBus)
|
||||
@@ -21,9 +21,10 @@ namespace Code.Infrastructure.App.States
|
||||
{
|
||||
_eventBus.Subscribe(this);
|
||||
|
||||
Context.UIService.TryRemovePanel(UIPanelType.Logo);
|
||||
|
||||
Context.UIService.TryLoadPanel(UIPanelType.DebugSceneChooser);
|
||||
Context.AudioFactory.LoadAudioClips(AudioNames.UISounds);
|
||||
// Context.SceneLoader.LoadSceneAsync(SceneId.Gameplay, LoadSceneMode.Single).Forget();
|
||||
}
|
||||
|
||||
protected override void OnExitState()
|
||||
@@ -33,11 +34,6 @@ namespace Code.Infrastructure.App.States
|
||||
_eventBus.Unsubscribe(this);
|
||||
}
|
||||
|
||||
public void OnGameplaySceneLoaded()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void UILoaded(UIPanelType uiPanelType)
|
||||
{
|
||||
if (uiPanelType != UIPanelType.DebugSceneChooser) return;
|
||||
@@ -47,7 +43,7 @@ namespace Code.Infrastructure.App.States
|
||||
|
||||
public void OnReadyToPlay(AudioNames groupName)
|
||||
{
|
||||
// Context.AudioService.PlayRepeatedly(AudioNames.UISounds,0,new CancellationTokenSource());
|
||||
Context.AudioService.PlayRepeatedly(AudioNames.UISounds,0,new CancellationTokenSource());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,15 @@
|
||||
using System;
|
||||
|
||||
namespace Code.Infrastructure.UI.Panels
|
||||
{
|
||||
public class DamnEmptyPanel : UIPanel
|
||||
{
|
||||
public override void Open()
|
||||
public override void Open(Action callback = null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
public override void Close(Action callback = null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -1,13 +1,15 @@
|
||||
using System;
|
||||
|
||||
namespace Code.Infrastructure.UI.Panels
|
||||
{
|
||||
public class LoadingPanel : UIPanel
|
||||
{
|
||||
public override void Open()
|
||||
public override void Open(Action callback = null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
public override void Close(Action callback = null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using DG.Tweening;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
@@ -9,14 +10,14 @@ namespace Code.Infrastructure.UI.Panels
|
||||
[SerializeField] private Image image;
|
||||
[SerializeField] private Color shownColor;
|
||||
[SerializeField] private Color hiddenColor;
|
||||
public override void Open()
|
||||
public override void Open(Action callback = null)
|
||||
{
|
||||
image.DOColor(shownColor, 1f);
|
||||
image.DOColor(shownColor, 1f).onComplete = () => callback?.Invoke();
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
public override void Close(Action callback = null)
|
||||
{
|
||||
image.DOColor(hiddenColor, 1f);
|
||||
image.DOColor(hiddenColor, 1f).onComplete += () => callback?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using Code.Infrastructure.Audio;
|
||||
using Reflex.Attributes;
|
||||
|
||||
@@ -9,14 +10,15 @@ namespace Code.Infrastructure.UI.Panels
|
||||
public void PlaySelectSound() => _audioService.PlayOneShot(AudioNames.UISounds, 7);
|
||||
public void PlayDeselectSound() => _audioService.PlayOneShot(AudioNames.UISounds, 8);
|
||||
public void PlayClickSound() => _audioService.PlayOneShot(AudioNames.UISounds, 1);
|
||||
public override void Open()
|
||||
public override void Open(Action callback = null)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public override void Close()
|
||||
public override void Close(Action callback = null)
|
||||
{
|
||||
|
||||
callback?.Invoke();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
using System;
|
||||
using UnityEngine;
|
||||
|
||||
namespace Code.Infrastructure.UI
|
||||
@@ -6,7 +7,7 @@ namespace Code.Infrastructure.UI
|
||||
{
|
||||
[SerializeField] protected bool injectMeSenpai;
|
||||
public bool InjectMeSenpai => injectMeSenpai;
|
||||
public abstract void Open();
|
||||
public abstract void Close();
|
||||
public abstract void Open(Action callback = null);
|
||||
public abstract void Close(Action callback = null);
|
||||
}
|
||||
}
|
||||
@@ -13,14 +13,14 @@ namespace Code.Infrastructure.UI
|
||||
void OpenPanel(UIPanelType uiPanelType);
|
||||
void ClosePanel(UIPanelType uiPanelType);
|
||||
void TryLoadPanel(UIPanelType uiPanelType);
|
||||
void TryRemovePanel(UIPanelType panelType);
|
||||
void TryRemovePanel(UIPanelType uiPanelType);
|
||||
void SetCanvasCamera(UnityEngine.Camera camera);
|
||||
}
|
||||
|
||||
public class UIService : IUIPanelLoadedHandle, IUIService
|
||||
{
|
||||
private Dictionary<UIPanelType, UIPanel> _loadedPanels = new();
|
||||
|
||||
|
||||
private EventBus.EventBus _eventBus;
|
||||
private IUIFactory _factory;
|
||||
|
||||
@@ -35,15 +35,17 @@ namespace Code.Infrastructure.UI
|
||||
{
|
||||
_factory.Canvas.worldCamera = camera;
|
||||
}
|
||||
|
||||
|
||||
public void OpenPanel(UIPanelType uiPanelType)
|
||||
{
|
||||
_loadedPanels[uiPanelType].Open();
|
||||
_loadedPanels[uiPanelType].gameObject.SetActive(true);
|
||||
_loadedPanels[uiPanelType].Open();
|
||||
}
|
||||
|
||||
// TODO Close event
|
||||
public void ClosePanel(UIPanelType uiPanelType)
|
||||
{
|
||||
_loadedPanels[uiPanelType].Close();
|
||||
{
|
||||
_loadedPanels[uiPanelType].Close(() => { _loadedPanels[uiPanelType].gameObject.SetActive(false); });
|
||||
}
|
||||
|
||||
public void TryLoadPanel(UIPanelType uiPanelType) => _factory.LoadPanel(uiPanelType);
|
||||
@@ -51,26 +53,30 @@ namespace Code.Infrastructure.UI
|
||||
public void UIPanelLoaded(UIPanel panel, UIPanelType panelType)
|
||||
{
|
||||
_loadedPanels.Add(panelType, panel);
|
||||
|
||||
if(panel.InjectMeSenpai)
|
||||
|
||||
if (panel.InjectMeSenpai)
|
||||
GameObjectInjector.InjectRecursive(panel.gameObject, Container.RootContainer);
|
||||
// GameObjectInjector.InjectRecursive(panel.gameObject, SceneManager.GetActiveScene().GetSceneContainer()); // Скорее всего будут нужны компоненты текущей сцены
|
||||
|
||||
_eventBus.RaiseEvent<IUIPanelLoaded>(ui=> ui.UILoaded(panelType));
|
||||
// GameObjectInjector.InjectRecursive(panel.gameObject, SceneManager.GetActiveScene().GetSceneContainer()); // Скорее всего будут нужны компоненты текущей сцены
|
||||
|
||||
_eventBus.RaiseEvent<IUIPanelLoaded>(ui => ui.UILoaded(panelType));
|
||||
}
|
||||
|
||||
public void TryRemovePanel(UIPanelType panelType)
|
||||
public void TryRemovePanel(UIPanelType uiPanelType)
|
||||
{
|
||||
// TODO Close it
|
||||
RemovePanel(panelType);
|
||||
_loadedPanels[uiPanelType].Close(() =>
|
||||
{
|
||||
_loadedPanels[uiPanelType].gameObject.SetActive(false);
|
||||
RemovePanel(uiPanelType);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void RemovePanel(UIPanelType panelType)
|
||||
{
|
||||
_factory.ReleasePanel(_loadedPanels[panelType]);
|
||||
_loadedPanels.Remove(panelType);
|
||||
}
|
||||
}
|
||||
|
||||
public interface IUIPanelLoaded : IGlobalSubscriber
|
||||
{
|
||||
void UILoaded(UIPanelType uiPanelType);
|
||||
|
||||
Reference in new issue
Block a user