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