Esempio n. 1
0
        private void FindAvailableToTakeResources()
        {
            var takenResourcesGuids = new List <Guid>();
            var deliversEntities    = delivers.Entities
                                      .Take(delivers.GetEntitiesCount());
            var resourcesEntities = resources.Entities
                                    .Take(resources.GetEntitiesCount());

            foreach (var deliverEntity in deliversEntities)
            {
                var deliverPosition = deliverEntity.Get <MovementComponent>().CurrentPosition;
                foreach (var resourceEntity in resourcesEntities)
                {
                    var resourceGuid = resourceEntity.Get <ResourceComponent>().Guid;
                    if (takenResourcesGuids.Contains(resourceGuid))
                    {
                        continue;
                    }

                    var resourcePosition = resourceEntity.Get <ResourceComponent>().Position;
                    if (Vector3.Distance(resourcePosition, deliverPosition) <= minTakingDistance)
                    {
                        if (TakeResourceHelpers.CanBeTaken(deliverEntity))
                        {
                            TakeResourceHelpers.CreateTakeEvent(deliverEntity, resourceEntity);
                            ResourceDestroyHelpers.CreateDestroyEvent(resourceEntity);
                            takenResourcesGuids.Add(resourceGuid);
                        }
                        break;
                    }
                }
            }
        }
Esempio n. 2
0
        private void TakeResource()
        {
            var takeEntities = takeEvents.Entities
                               .Take(takeEvents.GetEntitiesCount());

            foreach (var takeResourceEntity in takeEntities)
            {
                var deliverComponent = takeResourceEntity.Get <ResourceDeliverComponent>();
                var takeEvent        = takeResourceEntity.Get <ResourceTakeEvent>();
                deliverComponent.Resources.Add(takeEvent.ResourceEntity.Get <ResourceComponent>());
                ResourceDestroyHelpers.CreateDestroyEvent(takeEvent.ResourceEntity);

                takeResourceEntity.Unset <ResourceTakeEvent>();
            }
        }