public override void Initialize() { base.Initialize(); _internalSolution = Owner.EnsureComponent <SolutionContainerComponent>(); _internalSolution.MaxVolume = _initialMaxVolume; }
public override void Initialize() { base.Initialize(); Owner.TryGetComponent(out _appearanceComponent); if (!Owner.TryGetComponent(out _contents)) { _contents = Owner.AddComponent <SolutionContainerComponent>(); } _contents.Capabilities = SolutionContainerCaps.AddTo | SolutionContainerCaps.RemoveFrom; Opened = _defaultToOpened; UpdateAppearance(); }
public async Task TryAllTest() { var server = StartServerDummyTicker(); await server.WaitIdleAsync(); var mapManager = server.ResolveDependency <IMapManager>(); var entityManager = server.ResolveDependency <IEntityManager>(); var prototypeManager = server.ResolveDependency <IPrototypeManager>(); foreach (var reactionPrototype in prototypeManager.EnumeratePrototypes <ReactionPrototype>()) { //since i have no clue how to isolate each loop assert-wise im just gonna throw this one in for good measure Console.WriteLine($"Testing {reactionPrototype.ID}"); IEntity beaker; SolutionContainerComponent component = null; server.Assert(() => { mapManager.CreateNewMapEntity(MapId.Nullspace); beaker = entityManager.SpawnEntity("BluespaceBeaker", MapCoordinates.Nullspace); Assert.That(beaker.TryGetComponent(out component)); foreach (var(id, reactant) in reactionPrototype.Reactants) { Assert.That(component.TryAddReagent(id, reactant.Amount, out var quantity)); Assert.That(reactant.Amount, Is.EqualTo(quantity)); } }); await server.WaitIdleAsync(); server.Assert(() => { //you just got linq'd fool //(i'm sorry) var foundProductsMap = reactionPrototype.Products .Concat(reactionPrototype.Reactants.Where(x => x.Value.Catalyst).ToDictionary(x => x.Key, x => x.Value.Amount)) .ToDictionary(x => x, x => false); foreach (var reagent in component.Solution.Contents) { Assert.That(foundProductsMap.TryFirstOrNull(x => x.Key.Key == reagent.ReagentId && x.Key.Value == reagent.Quantity, out var foundProduct)); foundProductsMap[foundProduct.Value.Key] = true; } Assert.That(foundProductsMap.All(x => x.Value)); }); } }
private void Update(float frameTime, VaporComponent vapor, SolutionContainerComponent contents) { if (!vapor.Active) { return; } var entity = vapor.Owner; vapor.Timer += frameTime; vapor.ReactTimer += frameTime; if (vapor.ReactTimer >= ReactTime && vapor.Owner.Transform.GridID.IsValid()) { vapor.ReactTimer = 0; var mapGrid = _mapManager.GetGrid(entity.Transform.GridID); var tile = mapGrid.GetTileRef(entity.Transform.Coordinates.ToVector2i(EntityManager, _mapManager)); foreach (var reagentQuantity in contents.ReagentList.ToArray()) { if (reagentQuantity.Quantity == ReagentUnit.Zero) { continue; } var reagent = _protoManager.Index <ReagentPrototype>(reagentQuantity.ReagentId); contents.TryRemoveReagent(reagentQuantity.ReagentId, reagent.ReactionTile(tile, (reagentQuantity.Quantity / vapor.TransferAmount) * 0.25f)); } } // Check if we've reached our target. if (!vapor.Reached && vapor.Target.TryDistance(EntityManager, entity.Transform.Coordinates, out var distance) && distance <= 0.5f) { vapor.Reached = true; } if (contents.CurrentVolume == 0 || vapor.Timer > vapor.AliveTime) { // Delete this entity.QueueDelete(); } }