public IStaticObject Create(ISector sector, HexNode node, int id) { if (sector is null) { throw new ArgumentNullException(nameof(sector)); } var staticObject = new StaticObject(node, Purpose, id); // Все залежи изначально имеют пустой модуль контейнера. // Он будет заполняться по мере добычи. var containerModule = new DepositContainer(); staticObject.AddModule(containerModule); var dropScheme = _schemeService.GetScheme <IDropTableScheme>(_dropTableSchemeSid); var depositModule = new PropDepositModule(containerModule, dropScheme, _dropResolver, _toolTags, ExhausingValue, Difficulty); staticObject.AddModule(depositModule); var lifetimeModule = new DepositLifetimeModule(sector.StaticObjectManager, staticObject); staticObject.AddModule(lifetimeModule); var durabilityModule = new DepositDurabilityModule(depositModule, lifetimeModule, 10); staticObject.AddModule(durabilityModule); return(staticObject); }
public void TakeDamageTest(int stockValue, int damagePerMineUnit, int[] damages) { var currentStock = stockValue; var depositModuleMock = new Mock <IPropDepositModule>(); depositModuleMock.SetupGet(x => x.Stock).Returns(() => (float)currentStock / stockValue); depositModuleMock.Setup(x => x.Mine()).Callback(() => currentStock--); var depositModule = depositModuleMock.Object; var lifetimeModuleMock = new Mock <ILifetimeModule>(); var lifetimeModule = lifetimeModuleMock.Object; var durabilityModule = new DepositDurabilityModule(depositModule, lifetimeModule, damagePerMineUnit); // ACT foreach (var damage in damages) { durabilityModule.TakeDamage(damage); } // ASSERT lifetimeModuleMock.Verify(x => x.Destroy(), Times.Once); }