Files
2026-03-18 09:13:48 +07:00

87 lines
3.3 KiB
C#

using UnityEngine;
using VContainer;
using VContainer.Unity;
using YachtDice.Categories;
using YachtDice.Dice;
using YachtDice.Economy;
using YachtDice.Events;
using YachtDice.Game;
using YachtDice.Inventory;
using YachtDice.Modifiers.Definition;
using YachtDice.Modifiers.Pipeline;
using YachtDice.Modifiers.Runtime;
using YachtDice.Player;
using YachtDice.Run;
using YachtDice.Scoring;
using YachtDice.Shop;
using YachtDice.UI;
using YachtDice.UI.Presentation;
namespace YachtDice.DI
{
public class GameLifetimeScope : LifetimeScope
{
[Header("SO catalogs")]
[SerializeField] private ModifierCatalog modifierCatalog;
[SerializeField] private CategoryCatalog categoryCatalog;
[SerializeField] private DiceCatalog diceCatalog;
[SerializeField] private ShopCatalog shopCatalog;
[SerializeField] private RunBalanceConfigSO runBalanceConfig;
[Header("Scene References")]
[SerializeField] private ScoringSystem scoringSystem;
[SerializeField] private CurrencyBank currencyBank;
[SerializeField] private GameLoopController gameLoopController;
[SerializeField] private DiceManager diceManager;
[SerializeField] private GamePresentationRoot gamePresentationRoot;
[SerializeField] private ShopController shopController;
[SerializeField] private InventoryController inventoryController;
[Header("Settings")]
[SerializeField] private int maxActiveModifierSlots = 5;
protected override void Configure(IContainerBuilder builder)
{
// SO catalogs
builder.RegisterInstance(modifierCatalog);
builder.RegisterInstance(categoryCatalog);
builder.RegisterInstance(diceCatalog);
builder.RegisterInstance(shopCatalog);
builder.RegisterInstance(runBalanceConfig != null ? runBalanceConfig : RunBalanceConfigSO.CreateDefault());
// Core modifier services
builder.Register<ModifierRegistry>(Lifetime.Singleton)
.WithParameter<int>(maxActiveModifierSlots);
builder.Register<ModifierPipeline>(Lifetime.Singleton);
builder.Register<GameEventBus>(Lifetime.Singleton);
// Player subsystems
builder.Register<DiceCollection>(Lifetime.Singleton);
builder.Register<InventoryModel>(Lifetime.Singleton);
// Unified player model
builder.Register<PlayerModel>(Lifetime.Singleton);
// Shop
builder.Register<ShopModel>(Lifetime.Singleton);
// Run loop
builder.Register<StoredRollBank>(Lifetime.Singleton);
builder.Register<RunLoopService>(Lifetime.Singleton);
// Presentation services
builder.Register<IGameSaveService, GameSaveService>(Lifetime.Singleton);
builder.Register<IScoreSummaryService, ScoreSummaryService>(Lifetime.Singleton);
// Scene MonoBehaviour components
builder.RegisterComponent(scoringSystem);
builder.RegisterComponent(currencyBank);
builder.RegisterComponent(gameLoopController);
builder.RegisterComponent(diceManager);
builder.RegisterComponent(gamePresentationRoot);
builder.RegisterComponent(shopController);
builder.RegisterComponent(inventoryController);
}
}
}