//TODO combine/put all this data in separate data structure public void AppRun(AssetDataAbstractBuilder parInitialAssetBuilder, IAssetDatabaseUpdateStrategy parInitialAssetDatabaseUpdateStrategy, SoundManagerColleague parViewSoundManagerColleague, ViewProviderColleague parViewSideViewProviderColleague) { if (CurrentAppState.CurrentBaseAppState != EBaseAppStates.Created) { throw new Exception("Already launched application model cannot be launched again!"); } CurrentAppState = new AppState() { CurrentBaseAppState = EBaseAppStates.Running }; //initialize resources manager AppResourceManager = new ResourceManager(AppInfoConsts.ResourcesAssetsDirpath, parInitialAssetBuilder, parInitialAssetDatabaseUpdateStrategy); // AppResourceManager.LoadAssetPack("packTest"); // AppResourceManager.LoadAssetPack("gfx_smd"); // Console.WriteLine($"{AppResourceManager.GetAssetData<AssetDataText>("packTest", "/data.txt").TextData[0]}"); //initialize sound manager ActualSoundManager = new AppSoundManager(AppResourceManager, this); ActualSoundManager.AppSoundManagerMediator.ViewSoundManagerColleague = parViewSoundManagerColleague; parViewSoundManagerColleague.Mediator = ActualSoundManager.AppSoundManagerMediator; ActualSoundManager.UpdateLibrary(); AppViewProviderMediator.ViewProviderViewSide = parViewSideViewProviderColleague; InitializeHumanPlayers(); /* * var testObj = AppGamePool.GetObject<GameObject>(typeof(GameObject)); * testObj.Init(this); * Console.WriteLine($"{testObj.LinkedAppModel}"); * testObj.DisableAndSendToPool(); * Console.WriteLine($"{testObj.LinkedAppModel}"); * Console.WriteLine($"{testObj.Test}"); */ GameObject launchingObject = AppGamePool.GetObject <GameObject>(typeof(GameObject)); launchingObject.Init(this); launchingObject.AddComponent <AppStartComponent>(AppGamePool .GetObject <AppStartComponent>(typeof(AppStartComponent)).Init(launchingObject)); //var testComp = AppGamePool.GetObject<TestInputExitComponent>(typeof(TestInputExitComponent)); //testComp.Init(testObj); //RegisterFixedUpdatableObject(new InputTestUpdatableObject(this)); //new InputTestUpdatableObject(this); //TODO: Application startup logic //TODO: Settings loading //TODO: App state machine definitions //TODO: Multithreading for physics }
/// <summary> /// Стандартный конструктор /// </summary> /// <param name="parAssetDatabaseDir">Директория для составления начальной базы данных ассетов</param> /// <param name="parInitialAssetBuilder">"Строитель"-загрузчик ресурсов</param> /// <param name="parAssetDatabaseUpdateStrategy">Стратегия составления начальной базы данных ассетов</param> public ResourceManager(string parAssetDatabaseDir, AssetDataAbstractBuilder parInitialAssetBuilder = null, IAssetDatabaseUpdateStrategy parAssetDatabaseUpdateStrategy = null) { AssetDatabaseDir = parAssetDatabaseDir; AvailableAssetPacks = new Dictionary <string, AssetPack>(); LoadedAssetPacks = new Dictionary <string, AssetPackLoadedData>(); StandardAssetBuilder = parInitialAssetBuilder ?? new AssetDataStandardBuilder(); StandardAssetDatabaseUpdateStrategy = parAssetDatabaseUpdateStrategy ?? new AssetDatabaseUpdateDiffByExtensionStrategy( StandardExtensionToAssetType); UpdateAssetsAvailableDatabase(StandardAssetDatabaseUpdateStrategy); }
/// <summary> /// Обновление базы данных доступных ассетов /// </summary> /// <param name="parAssetDatabaseUpdateStrategy"></param> public void UpdateAssetsAvailableDatabase(IAssetDatabaseUpdateStrategy parAssetDatabaseUpdateStrategy) { AvailableAssetPacks = parAssetDatabaseUpdateStrategy.GetAssetsDatabase(AssetDatabaseDir); }