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