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(); } }