コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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));
        }
コード例 #4
0
    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);
    }
コード例 #5
0
ファイル: Bitmap.cs プロジェクト: dtbinh/drone-sim
    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;
        }
    }
コード例 #6
0
        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);
        }
コード例 #7
0
        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));
        }
コード例 #8
0
ファイル: Bitmap.cs プロジェクト: dtbinh/drone-sim
 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>();
 }