Пример #1
0
 private void UpdateWorkerObjectStats(FlockingDataWorker flockingDataWorker)
 {
     flockingDataWorker.universeCenter           = this.transform.position;
     flockingDataWorker.AllFlocks                = flockers;
     flockingDataWorker.AllColliders             = colliders;
     flockingDataWorker.maxRandomSiblingsTested  = FlockingMaxRandomSiblingsTested;
     flockingDataWorker.maxBoundsRadius          = FlockingBoundsRadius;
     flockingDataWorker.seperationWeight         = FlockingSeperationWeight;
     flockingDataWorker.seperationRadius         = FlockingSeperationRadius;
     flockingDataWorker.alignmentWeight          = FlockingAlignmentWeight;
     flockingDataWorker.alignmentRadius          = FlockingAlignmentRadius;
     flockingDataWorker.cohesionWeight           = FlockingCohesionWeight;
     flockingDataWorker.cohesionRadius           = FlockingCohesionRadius;
     flockingDataWorker.destinationAttractRadius = FlockingDestinationAttractRadius;
     flockingDataWorker.destinationReachedRadius = FlockingDestinationReachedRadius;
 }
Пример #2
0
    private void InitThreadPool()
    {
        //--------------- Cap the number of threads --------------------
        int maxThreads = ThreadingMaxThreads;

        if (maxThreads <= 0)
        {
            maxThreads = Mathf.Max(SystemInfo.processorCount - 1, 1);
        }
        //--------------- Cap the number of threads --------------------

        //--------------- Spread the Flocks over multiple worker-packages --------------------
        int ThreadingPoolPackages = ThreadingPackagesPerThread * maxThreads;

        int flocksPerBlock = Mathf.CeilToInt((float)FlockingSpawnCount / (float)ThreadingPoolPackages);

        workerObjects = new FlockingDataWorker[ThreadingPoolPackages];

        int i        = ThreadingPoolPackages;
        int startIdx = 0;

        while (--i > -1)
        {
            FlockingDataWorker workerBlock = new FlockingDataWorker();
            UpdateWorkerObjectStats(workerBlock);

            workerBlock.startWorkIndex = startIdx;
            workerBlock.endWorkIndex   = Mathf.Min(flockers.Length, startIdx + flocksPerBlock);
            workerObjects[i]           = workerBlock;
            startIdx += flocksPerBlock;
        }
        //--------------- Spread the Flocks over multiple worker-packages --------------------


        myThreadScheduler = Loom.CreateThreadPoolScheduler();
        myThreadScheduler.ForceToMainThread = !MultithreadingEnabled;
        myThreadScheduler.StartASyncThreads(workerObjects, onThreadWorkComplete, null, maxThreads);
    }
Пример #3
0
    void Start()
    {
        DontDestroyOnLoad(this);
        myThreadScheduler = UThread.CreateThreadPoolScheduler();
        //myThreadScheduler.ForceToMainThread = true;
        //UThread.StartSingleThread(LoadConfig, System.Threading.ThreadPriority.Normal, true);
        workerObjects = new FlockingDataWorker[1];
        int maxThreads = -1;

        if (maxThreads <= 0)
        {
            maxThreads = Mathf.Max(SystemInfo.processorCount - 1, 1);
        }

        FlockingDataWorker workerBlock = new FlockingDataWorker();

        workerObjects[0] = workerBlock;

        myThreadScheduler.ForceToMainThread = true;
        myThreadScheduler.StartASyncThreads(workerObjects, onThreadWorkComplete, null, maxThreads);

        StartCoroutine(LoadPosFile());
        StartCoroutine(LoadSummonPosFile());
    }
    private void InitThreadPool()
    {
        //--------------- Cap the number of threads --------------------
        int maxThreads = ThreadingMaxThreads;
        if (maxThreads <= 0)
            maxThreads = Mathf.Max(SystemInfo.processorCount - 1, 1);
        //--------------- Cap the number of threads --------------------

        //--------------- Spread the Flocks over multiple worker-packages --------------------
        int ThreadingPoolPackages = ThreadingPackagesPerThread * maxThreads;

        int flocksPerBlock = Mathf.CeilToInt((float)FlockingSpawnCount / (float)ThreadingPoolPackages);
        workerObjects = new FlockingDataWorker[ThreadingPoolPackages];

        int i = ThreadingPoolPackages;
        int startIdx = 0;
        while (--i > -1)
        {
            FlockingDataWorker workerBlock = new FlockingDataWorker();
            UpdateWorkerObjectStats(workerBlock);

            workerBlock.startWorkIndex = startIdx;
            workerBlock.endWorkIndex = Mathf.Min(flockers.Length, startIdx + flocksPerBlock);
            workerObjects[i] = workerBlock;
            startIdx += flocksPerBlock;
        }
        //--------------- Spread the Flocks over multiple worker-packages --------------------

        myThreadScheduler = Loom.CreateThreadPoolScheduler();
        myThreadScheduler.ForceToMainThread = !MultithreadingEnabled;
        myThreadScheduler.StartASyncThreads(workerObjects, onThreadWorkComplete, null, maxThreads);
    }
 private void UpdateWorkerObjectStats(FlockingDataWorker flockingDataWorker)
 {
     flockingDataWorker.universeCenter   = this.transform.position;
     flockingDataWorker.AllFlocks      = flockers;
     flockingDataWorker.AllColliders     = colliders;
     flockingDataWorker.maxRandomSiblingsTested = FlockingMaxRandomSiblingsTested;
     flockingDataWorker.maxBoundsRadius  = FlockingBoundsRadius;
     flockingDataWorker.seperationWeight = FlockingSeperationWeight;
     flockingDataWorker.seperationRadius = FlockingSeperationRadius;
     flockingDataWorker.alignmentWeight = FlockingAlignmentWeight;
     flockingDataWorker.alignmentRadius = FlockingAlignmentRadius;
     flockingDataWorker.cohesionWeight   = FlockingCohesionWeight;
     flockingDataWorker.cohesionRadius   = FlockingCohesionRadius;
     flockingDataWorker.destinationAttractRadius = FlockingDestinationAttractRadius;
     flockingDataWorker.destinationReachedRadius = FlockingDestinationReachedRadius;
 }