Пример гоночки

This commit is contained in:
ThomasCharester committed 2026-01-28 16:30:32 +03:00
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();
}
}
}
+3 -2
View File
@@ -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);
}
}
+21 -15
View File
@@ -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);