initial main menu and dependencies

This commit is contained in:
MrTorex committed 2026-03-04 19:58:31 +03:00
1 parent 2cdb2aa43d
commit 61af80957c
834 files changed
+402699

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: e07d5cd999fb4d77975cb298c69dc88e
timeCreated: 1772204161
+18
View File
@@ -0,0 +1,18 @@
using Code.Input;
using UnityEngine;
using UnityEngine.InputSystem;
namespace Code.DI
{
public class Bootstrapper : MonoBehaviour
{
[SerializeField] private InputActionAsset inputActionAsset;
private void Awake()
{
var container = new GameObject("DIContainer").AddComponent<DIContainer>();
container.Register<IInputService>(new InputService(inputActionAsset));
}
}
}
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: a121b287cff04fab80cde7f9f7e1f982
timeCreated: 1772204190
+35
View File
@@ -0,0 +1,35 @@
using System;
using System.Collections.Generic;
using UnityEngine;
namespace Code.DI
{
public class DIContainer : MonoBehaviour
{
private readonly Dictionary<Type, object> _services = new();
private void Awake()
{
DontDestroyOnLoad(gameObject);
}
public void Register<T>(T service)
{
var type = typeof(T);
if (!_services.TryAdd(type, service))
{
Debug.LogWarning($"Service {type} is already registered.");
}
}
public T Resolve<T>()
{
var type = typeof(T);
if (_services.TryGetValue(type, out var service))
{
return (T)service;
}
throw new Exception($"Service {type} not found.");
}
}
}
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 660a533686c44961ace8a87cfbb6d7c4
timeCreated: 1772204169
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 8722d8a19b4344229829f7454f01d707
timeCreated: 1772203877
+9
View File
@@ -0,0 +1,9 @@
namespace Code.Input
{
public enum ActionMapping
{
MainMenu,
Gameplay,
UI
}
}
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: ebc8b8e5edcc44d6b0c67a7a43ee4458
timeCreated: 1772203887
+21
View File
@@ -0,0 +1,21 @@
using System;
using UnityEngine;
using UnityEngine.InputSystem;
namespace Code.Input
{
public interface IInputService
{
void EnableMap(ActionMapping actionMap);
void DisableMap(ActionMapping actionMap);
Vector2 MainMenuParallax { get; }
float MoveInput { get; }
bool JumpPressed { get; }
void DebugBindAction(int mapId, int actionId, Action<InputAction.CallbackContext> action);
void DebugUnbindAction(int mapId, int actionId, Action<InputAction.CallbackContext> action);
}
}
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 2c1a81b165e14b619a8ed42b4ab4f775
timeCreated: 1772203895
+89
View File
@@ -0,0 +1,89 @@
using UnityEngine;
using UnityEngine.InputSystem;
namespace Code.Input
{
public class InputService : IInputService
{
private readonly InputActionAsset _inputActionAsset;
public Vector2 MainMenuParallax { get; private set; }
public float MoveInput { get; private set; }
public bool JumpPressed { get; private set; }
public InputService(InputActionAsset inputActionAsset)
{
_inputActionAsset = inputActionAsset;
SetupInputCallbacks();
}
private void SetupInputCallbacks()
{
SetupMainMenuInputCallbacks();
SetupGameplayInputCallbacks();
}
private void SetupGameplayInputCallbacks()
{
var map = _inputActionAsset.actionMaps[(int)ActionMapping.Gameplay];
BindAxis(map, "Move", v => MoveInput = v);
BindButton(map, "Jump", v => JumpPressed = v);
}
private void SetupMainMenuInputCallbacks()
{
var map = _inputActionAsset.actionMaps[(int)ActionMapping.MainMenu];
BindVector2(map, "Parallax", v => MainMenuParallax = v);
}
private void BindButton(InputActionMap map, string actionName, System.Action<bool> setter)
{
var action = map.FindAction(actionName);
if (action == null)
return;
action.performed += _ => setter(true);
action.canceled += _ => setter(false);
}
private void BindVector2(InputActionMap map, string actionName, System.Action<Vector2> setter)
{
var action = map.FindAction(actionName);
if (action == null)
return;
action.performed += ctx => setter(ctx.ReadValue<Vector2>());
action.canceled += _ => setter(Vector2.zero);
}
private void BindAxis(InputActionMap map, string actionName, System.Action<float> setter)
{
var action = map.FindAction(actionName);
if (action == null)
return;
action.performed += ctx => setter(ctx.ReadValue<float>());
action.canceled += _ => setter(0f);
}
public void EnableMap(ActionMapping actionMap)
{
_inputActionAsset.actionMaps[(int)actionMap].Enable();
}
public void DisableMap(ActionMapping actionMap)
{
_inputActionAsset.actionMaps[(int)actionMap].Disable();
}
public void DebugBindAction(int mapId, int actionId, System.Action<InputAction.CallbackContext> action) =>
_inputActionAsset.actionMaps[mapId].actions[actionId].performed += action;
public void DebugUnbindAction(int mapId, int actionId, System.Action<InputAction.CallbackContext> action) =>
_inputActionAsset.actionMaps[mapId].actions[actionId].performed -= action;
}
}
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: f7087241a4e642d18a79b43896f1dab6
timeCreated: 1772203909
+3
View File
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 803735ba777643ddaebb30271986a35d
timeCreated: 1772643230
+27
View File
@@ -0,0 +1,27 @@
using System;
using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
namespace Code.UI
{
public class MainMenuController : MonoBehaviour
{
[SerializeField] private Button playButton;
private void Start()
{
playButton.onClick.AddListener(LoadGameplay);
}
private void LoadGameplay()
{
SceneManager.LoadScene("Gameplay");
}
private void OnDestroy()
{
playButton.onClick.RemoveAllListeners();
}
}
}
@@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 9a0c097c7ca742e69366306ba27e8114
timeCreated: 1772643243