예제 #1
0
        public void Update()
        {
            if (!Owner.TryGetComponent(out SolutionComponent contents))
            {
                return;
            }

            if (!_running)
            {
                return;
            }

            // Get all intersecting tiles with the vapor and spray the divided solution on there
            if (Owner.TryGetComponent(out ICollidableComponent collidable))
            {
                var worldBounds = collidable.WorldAABB;
                var mapGrid     = _mapManager.GetGrid(Owner.Transform.GridID);

                var tiles  = mapGrid.GetTilesIntersecting(worldBounds);
                var amount = _transferAmount / ReagentUnit.New(tiles.Count());
                foreach (var tile in tiles)
                {
                    var pos = tile.GridIndices.ToGridCoordinates(_mapManager, tile.GridIndex);
                    SpillHelper.SpillAt(pos, contents.SplitSolution(amount), "PuddleSmear", false); //make non PuddleSmear?
                }
            }

            if (contents.CurrentVolume == 0)
            {
                // Delete this
                Owner.Delete();
            }
        }
        void ILand.Land(LandEventArgs eventArgs)
        {
            if (_pressurized &&
                !Opened &&
                _random.Prob(0.25f) &&
                Owner.TryGetComponent(out SolutionComponent component))
            {
                Opened = true;

                var solution = component.SplitSolution(component.CurrentVolume);
                SpillHelper.SpillAt(Owner, solution, "PuddleSmear");

                EntitySystem.Get <AudioSystem>().PlayFromEntity(_burstSound, Owner,
                                                                AudioParams.Default.WithVolume(-4));
            }
        }