void CreateThreadActions(int raceTime) { object args = raceTime; for (int i = 0; i < MyThreadPool.workers.Length; i++) { WaitCallback callback = new WaitCallback(ThreadedRace); MyThreadPool.AddActionToQueue(callback, args); } }
IEnumerator AnimateTrees() { tasks = new Task[threads.Length]; while (true) { if (TerrainController.thisTerrainController == null || !TerrainController.thisTerrainController.levelLoaded) { yield return(null); continue; } if (!initialized) { Initialize(); initialized = true; } for (int i = 0; i < threads.Length; i++) { if ((tasks[i] == null || tasks[i].isDone) && treeObjects.Count != 0) { tasks[i] = MyThreadPool.AddActionToQueue(AnimatePart, i, TaskPriority.low); } } while (!runAnimation) { yield return(null); } yield return(null); for (int i = 0; i < meshVertices.Count; i++) { if (treeObjects[i].isEnabled) { treeObjects[i].GetComponent <MeshFilter>().mesh.vertices = updatedMeshVertices[i]; } } } }
public IEnumerator RemoveObject() { List <Task> tasks = new List <Task>(); count = 0; while (true) { while (currentVertices == null || removeList.Count == 0) { yield return(null); } while (removeList.Count > 0) { object args = removeList[0]; tasks.Add(MyThreadPool.AddActionToQueue(MoveMesh, args, TaskPriority.medium)); removeList.RemoveAt(0); } for (int i = 0; i < tasks.Count; i++) { while (!tasks[i].isDone) { yield return(null); } } if (thisAnimationParameters == null && currentVertices != null && updateCurrentVertices) { GetComponent <MeshFilter>().mesh.vertices = currentVertices; updateCurrentVertices = false; } if (count++ > 1) { yield return(null); count = 0; } } }
IEnumerator _VisualizeWind() { TreeAnimationController.instance.runAnimation = false; CreateChunks(true); tasks = new Task[chunkThreads.Length]; int curCount = 0; startTime = Time.realtimeSinceStartup; isFirst = true; curUvs = true; doneFirst = false; while (true) { yield return(null); bool alldone = true; for (int i = 0; i < chunkThreads.Length; i++) { if (tasks[i] != null && !tasks[i].isDone) { alldone = false; } } if (alldone) { curUvs = !curUvs; curCount = 0; if (isFirst) { curCount = intpSteps - 1; } if (doneFirst) { isFirst = false; } calcTime = Time.realtimeSinceStartup - startTime; startTime = Time.realtimeSinceStartup; } for (int i = 0; i < chunkThreads.Length; i++) { if (tasks[i] == null || tasks[i].isDone && (alldone)) { object[] args = new object[2]; args[0] = i; args[1] = WindController.time; object argsIn = args; tasks[i] = MyThreadPool.AddActionToQueue(CalculateChunk, argsIn); } } for (int i = 0; i < windSpeedChunkActive.Count; i++) { windSpeedChunkActive[i] = windSpeedChunks[i].gameObject.activeSelf; } if ((Time.realtimeSinceStartup - startTime) - calcTime * ((float)(curCount + 1) / intpSteps) >= 0) { while ((Time.realtimeSinceStartup - startTime) - calcTime * ((float)(curCount + 1) / intpSteps) >= 0) { curCount++; } curCount--; if (curCount > intpSteps - 1) { curCount = intpSteps - 1; } for (int i = 0; i < windSpeedChunks.Count; i++) { if (uvs[i] == null) { continue; } if (!isFirst) { if (curUvs) { windSpeedChunks[i].meshFilter.mesh.uv = buffereduvs[i][curCount]; } else { windSpeedChunks[i].meshFilter.mesh.uv = uvs[i][curCount]; } } else { windSpeedChunks[i].GetComponent <MeshRenderer>().enabled = true; windSpeedChunks[i].meshFilter.mesh.uv = buffereduvs[i][uvs[i].Length - 1]; doneFirst = true; } } curCount++; if (curCount > intpSteps - 1) { curCount = intpSteps - 1; } } } }