static async Task <ModuleInventoryData> GetModuleInventory(DocumentSnapshot[] moduleSnapshots) { var count = moduleSnapshots.Length; var modules = new Improbable.Collections.Map <int, ModuleInfo>(count); var modulesResources = new Improbable.Collections.Map <int, ModuleResources>(count); var tasks = new Task <ModuleResources> [count]; for (int i = 0; i < count; i++) { var moduleSnapshot = moduleSnapshots[i]; var module = moduleSnapshot.ConvertTo <Module>(); var moduleInfo = new ModuleInfo(moduleSnapshot.Id, module.Name, module.Type, module.Creator, module.Properties); modules[i] = moduleInfo; tasks[i] = GetModuleResources(moduleSnapshot.Reference); } await Task.WhenAll(tasks); for (int i = 0; i < count; i++) { modulesResources[i] = tasks[i].Result; } return(new ModuleInventoryData(modules, modulesResources)); }
private static Entity createEntity(string workerType, double X, double Y, bool currentAlive, UInt64 currentSequenceId, bool previousAlive, UInt64 previousSequenceId, Improbable.Collections.List <EntityId> neighborsList) { var entity = new Entity(); //const string entityType = "Cell"; string entityType = "Cell"; if (currentAlive) { entityType = "Cell_Alive"; } else { entityType = "Cell_Dead"; } // Defines worker attribute requirements for workers that can read a component. // workers with an attribute of "client" OR workerType will have read access var readRequirementSet = new WorkerRequirementSet( new Improbable.Collections.List <WorkerAttributeSet> { new WorkerAttributeSet(new Improbable.Collections.List <string> { workerType }) //new WorkerAttributeSet(new Improbable.Collections.List<string> {"client"}), }); // Defines worker attribute requirements for workers that can write to a component. // workers with an attribute of workerType will have write access var workerWriteRequirementSet = new WorkerRequirementSet( new Improbable.Collections.List <WorkerAttributeSet> { new WorkerAttributeSet(new Improbable.Collections.List <string> { workerType }), }); var writeAcl = new Improbable.Collections.Map <uint, WorkerRequirementSet> { { EntityAcl.ComponentId, workerWriteRequirementSet }, { Position.ComponentId, workerWriteRequirementSet }, { Metadata.ComponentId, workerWriteRequirementSet }, { Life.ComponentId, workerWriteRequirementSet } }; entity.Add(new EntityAcl.Data(readRequirementSet, writeAcl)); // Needed for the entity to be persisted in snapshots. entity.Add(new Persistence.Data()); entity.Add(new Metadata.Data(entityType)); //Can use metadata to do color setting for visualization in inspector entity.Add(new Position.Data(new Coordinates(X, 0, Y))); entity.Add(new Life.Data(currentAlive, currentSequenceId, previousAlive, previousSequenceId)); entity.Add(new Neighbors.Data(neighborsList)); return(entity); }
static SamplerData GetSamplerComponent(Module[] modules) { var samplers = new Improbable.Collections.Map <int, SamplerStat>(); for (int i = 0; i < modules.Length; i++) { if (modules[i].Type == ModuleType.Sampler) { samplers[i] = Samplers.Craft(modules[i].Properties.BackingArray); } } return(new SamplerData(samplers)); }
private void OnEnable() { deliveriesMap = ControllerWriter.Data.deliveriesMap; droneSlots = ControllerWriter.Data.droneSlots; completedDeliveries = MetricsWriter.Data.completedDeliveries; completedRoundTrips = MetricsWriter.Data.completedRoundTrips; collisionsReported = MetricsWriter.Data.collisionsReported; failedLaunches = MetricsWriter.Data.failedLaunches; failedDeliveries = MetricsWriter.Data.failedDeliveries; failedReturns = MetricsWriter.Data.failedReturns; unknownRequests = MetricsWriter.Data.unknownRequests; revenue = MetricsWriter.Data.revenue; costs = MetricsWriter.Data.costs; penalties = MetricsWriter.Data.penalties; avgWaitTime = MetricsWriter.Data.avgWaitTime; launches = MetricsWriter.Data.launches; avgDeliveryTime = MetricsWriter.Data.avgDeliveryTime; for (int i = 0; i < droneSlots.Count; i++) { if (droneSlots[i].occupied) { usedSlots++; } } departuresPoint = transform.position.ToCoordinates() + SimulationSettings.ControllerDepartureOffset; arrivalsPoint = transform.position.ToCoordinates() + SimulationSettings.ControllerArrivalOffset; ControllerWriter.CommandReceiver.OnRequestNewTarget.RegisterAsyncResponse(HandleTargetRequest); ControllerWriter.CommandReceiver.OnCollision.RegisterAsyncResponse(HandleCollision); ControllerWriter.CommandReceiver.OnUnlinkDrone.RegisterAsyncResponse(HandleUnlinkRequest); globalLayer = gameObject.GetComponent <GridGlobalLayer>(); /* SCHEDULER CHOICE */ scheduler = gameObject.GetComponent <FirstComeFirstServeScheduler>(); //scheduler = gameObject.GetComponent<LeastLostValueScheduler>(); //scheduler = gameObject.GetComponent<ShortestJobFirstScheduler>(); UnityEngine.Random.InitState((int)gameObject.EntityId().Id); InvokeRepeating("ControllerTick", UnityEngine.Random.Range(0, SimulationSettings.RequestHandlerInterval), SimulationSettings.RequestHandlerInterval); InvokeRepeating("PrintMetrics", 0, SimulationSettings.ControllerMetricsInterval); InvokeRepeating("DroneMapPrune", UnityEngine.Random.Range(0, SimulationSettings.DroneMapPruningInterval), SimulationSettings.DroneMapPruningInterval); }
private void OnEnable() { BIT_SIZE = SimulationSettings.BIT_SIZE; // meters that each bit in the grid corresponds to SIZE_OF_A_STEP = SimulationSettings.SIZE_OF_A_STEP; // used when setting bits from a no fly zone //BitmapWriter.ComponentUpdated.Add(HandleAction); if (BitmapWriter.Data.initialised) { TopLeft = BitmapWriter.Data.topLeft; BottomRight = BitmapWriter.Data.bottomRight; Width = BitmapWriter.Data.width; Height = BitmapWriter.Data.height; GridHeight = BitmapWriter.Data.gridHeight; GridWidth = BitmapWriter.Data.gridWidth; Grid = BitmapWriter.Data.grid; } }
private static Entity createEntity(string workerType, Coordinates cord) { var entity = new Entity(); const string entityType = "Cell"; // Defines worker attribute requirements for workers that can read a component. // workers with an attribute of "client" OR workerType will have read access var readRequirementSet = new WorkerRequirementSet( new Improbable.Collections.List <WorkerAttributeSet> { new WorkerAttributeSet(new Improbable.Collections.List <string> { workerType }), new WorkerAttributeSet(new Improbable.Collections.List <string> { "client" }), }); // Defines worker attribute requirements for workers that can write to a component. // workers with an attribute of workerType will have write access var workerWriteRequirementSet = new WorkerRequirementSet( new Improbable.Collections.List <WorkerAttributeSet> { new WorkerAttributeSet(new Improbable.Collections.List <string> { workerType }), }); var writeAcl = new Improbable.Collections.Map <uint, WorkerRequirementSet> { { EntityAcl.ComponentId, workerWriteRequirementSet }, { Position.ComponentId, workerWriteRequirementSet }, { Cell.IsAlive.ComponentId, workerWriteRequirementSet }, { Metadata.ComponentId, workerWriteRequirementSet } }; entity.Add(new EntityAcl.Data(readRequirementSet, writeAcl)); // Needed for the entity to be persisted in snapshots. entity.Add(new Persistence.Data()); entity.Add(new Cell.IsAlive.Data(true)); entity.Add(new Metadata.Data(entityType)); entity.Add(new Position.Data(cord)); return(entity); }
static async Task <ResourceInventoryData> GetResourceInventory(DocumentReference shipRef) { var resourceQuery = await shipRef.Collection(ResourceCollection).GetSnapshotAsync(); var resourceSnapshots = (DocumentSnapshot[])resourceQuery.Documents; var resources = new Improbable.Collections.Map <int, ResourceInfo>(resourceQuery.Count); for (int i = 0; i < resourceQuery.Count; i++) { var snapshot = resourceSnapshots[i]; var resource = snapshot.ConvertTo <Resource>(); resources[i] = new ResourceInfo(snapshot.Id, resource.Type, resource.Quantity); } return(new ResourceInventoryData(resources)); }
private void createBitmapOfGivenSize(double width, double height) { GridWidth = (int)Math.Ceiling(width / BIT_SIZE); GridHeight = (int)Math.Ceiling(height / BIT_SIZE); Grid = new Improbable.Collections.Map <int, GridType>(); }