Exemple #1
0
        public void Flood(Actor self)
        {
            var waveFront = Util.ExpandFootprint(cells, true)
                            .Take(info.MaxRange)
                            .SkipWhile(p => !self.World.Map.Contains(p) ||
                                       (resourceLayer.GetResourceType(p) == resourceType && resourceLayer.IsFull(p)))
                            .ToArray();

            foreach (var cell in waveFront)
            {
                if (resourceLayer.CanSpawnResourceAt(resourceType, cell))
                {
                    cells.Add(cell);
                    resourceLayer.AddResource(resourceType, cell, 1);
                }
            }
        }
Exemple #2
0
        void ITick.Tick(Actor self)
        {
            if (IsTraitDisabled)
            {
                Ticks = info.Interval;
            }

            if (IsTraitPaused || IsTraitDisabled)
            {
                return;
            }

            if (--Ticks < 0)
            {
                Ticks      = info.Interval;
                Resources += info.Amount;

                if (Resources >= Info.Capacity)
                {
                    var exit      = self.Exits().RandomOrDefault(self.World.SharedRandom);
                    var vehicle   = Info.DeliveryVehicleType.Random(self.World.SharedRandom).ToLowerInvariant();
                    var actorInfo = self.World.Map.Rules.Actors[vehicle];

                    ResourceType resourceType = null;
                    var          cells        = building.Info.Tiles(self.Location);
                    foreach (var cell in cells)
                    {
                        if (resourceLayer.GetResourceDensity(cell) > 0)
                        {
                            resourceType = resourceLayer.GetResourceType(cell);
                        }
                    }

                    SpawnDeliveryVehicle(self, actorInfo, exit != null ? exit.Info : null, resourceType);
                    Resources = 0;
                }
            }
        }