using System; using System.Collections; using System.Collections.Generic; using System.Threading; using BITKit; using BITKit.Console; using BITKit.Mod; using BITKit.Pool; using BITKit.UX; using BITKit.WorldNode; using Cysharp.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Hosting.Unity; using Microsoft.Extensions.Logging; using Net.Like.Xue.Tokyo.GameService; using Net.Like.Xue.Tokyo.UX; using Net.Project.B.Health; using Net.Project.B.Interaction; using Net.Project.B.WorldNode; using Project.B.Animation; using Project.B.CharacterController; using Project.B.Entities; using Project.B.Map; using Project.B.Player; using Project.B.UX; using UnityEngine; using YooAsset; using ILogger = Microsoft.Extensions.Logging.ILogger; namespace Net.Like.Xue.Tokyo { public class Program : MonoBehaviour { [SerializeField] private ScriptablePlayerKeyMap playerKeyMap; [SerializeField] private ScriptablePlayerSettings playerSettings; // Start is called before the first frame update private async void Start() { DontDestroyOnLoad(gameObject); var source = new CancellationTokenSource(); destroyCancellationToken.Register(source.Cancel); var serviceCollection = new ServiceCollection(); serviceCollection.AddSingleton(serviceCollection); serviceCollection.AddSingleton(); serviceCollection.AddTransient(); serviceCollection.AddLogging(); serviceCollection.AddSingleton(serviceCollection); //玩家角色控制器服务 serviceCollection.AddSingleton(); //玩家生命值 serviceCollection.AddSingleton(); //对象池 serviceCollection.AddSingleton(); //击倒服务 serviceCollection.AddSingleton(); var scriptablePlayerAnimation =await ModService.LoadAsset("scriptable_player_animations"); //玩家动画 serviceCollection.AddSingleton(scriptablePlayerAnimation); //注册实体工厂 serviceCollection.AddSingleton(); //注册地图服务 serviceCollection.AddSingleton(); //场景互动 serviceCollection.AddSingleton(); //场景可互动高亮 serviceCollection.AddSingleton(); //场景互动门 serviceCollection.AddSingleton(); //场景节点 serviceCollection.AddSingleton(); //场景描述节点 serviceCollection.AddSingleton(); //传送服务 serviceCollection.AddSingleton(); //玩家配置 serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(playerKeyMap); serviceCollection.AddSingleton(playerKeyMap); serviceCollection.AddSingleton(playerSettings); //循环 serviceCollection.AddSingleton(new GameTick()); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); //UX&Ui服务 serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); serviceCollection.AddSingleton(); //生成玩家 serviceCollection.AddSingleton(); //获取服务提供者 var serviceProvider = serviceCollection.BuildServiceProvider(); if (serviceProvider is IDisposable disposable) { destroyCancellationToken.Register(disposable.Dispose); } var logger = serviceProvider.GetRequiredService>(); BIT4Log.OnLog += (x) => { logger.LogInformation(x); }; BIT4Log.OnWarning += (x) => { logger.LogWarning(x); }; BIT4Log.OnException += (x) => { logger.LogCritical(x,x.Message); }; //初始化动画 await serviceProvider.GetRequiredService().InitializeAsync(); //初始化相机 Instantiate(await ModService.LoadAsset("prefab_camera"),transform); //初始化UX await serviceProvider.GetRequiredService().InitializeAsync(); serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService().Entry(); //初始化传送服务 serviceProvider.GetRequiredService(); //初始化玩家生成 serviceProvider.GetRequiredService(); //初始化场景高亮 serviceProvider.GetRequiredService(); serviceProvider.GetRequiredService(); Application.targetFrameRate = 90; await destroyCancellationToken.WaitUntilCanceled(); } } }