Beispiel #1
0
        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);
        }