protected void Start() { if (mesh == null) { Debug.LogError("[SampleController] No 'mesh' provided"); return; } if (material == null) { Debug.LogError("[SampleController] No 'material' provided"); return; } //Allocate arrays cubeData = new CubeData[cubeCount]; bucketedCubes = new BucketSet <CubeData>(bucketCount: avoidanceBucketCount, maxBucketSize: avoidanceMaxBucketSize); renderSet = new RenderSet(mesh, material, maxBatches: Mathf.CeilToInt(cubeCount / 1023f)); //Create misc stuff int numExecutors = useMultiThreading ? (System.Environment.ProcessorCount - 1) : 0; Debug.Log(string.Format("[SampleController] Staring 'TaskManager' with '{0}' executors", numExecutors)); taskManager = new TaskManager(numExecutors); avoidanceHasher = new PositionHasher(); random = new ShiftRandomProvider(); //Create tasks startTask = new StartFrameTask(); bucketCubeTask = new BucketCubeTask(bucketedCubes, avoidanceHasher); moveCubeTask = new MoveCubeTask(avoidanceHasher, bucketedCubes); respawnCubeTask = new RespawnCubeTask(random); addToRenderSetTask = new AddToRenderSetTask(renderSet); //Setup profiler timeline if (profiler != null) { completeProfilerTrack = profiler.CreateTrack <TimelineTrack>("Blocking main-thread to complete tasks"); renderProfilerTrack = profiler.CreateTrack <TimelineTrack>("Render instanced"); bucketCubesProfilerTrack = profiler.CreateTrack <TaskTimelineTrack>("Bucket cubes"); moveCubesProfilerTrack = profiler.CreateTrack <TaskTimelineTrack>("Move cubes"); respawnCubesProfilerTrack = profiler.CreateTrack <TaskTimelineTrack>("Respawn cubes"); addToRenderSetProfilerTrack = profiler.CreateTrack <TaskTimelineTrack>("Creating render batches"); profiler.StartTimers(); } //Setup initial data Rect spawnArea = MathUtils.FromCenterAndSize(Vector2.zero, spawnAreaSize); for (int i = 0; i < cubeCount; i++) { cubeData[i] = new CubeData { ID = i, Position = random.Inside(spawnArea), TimeNotHitTarget1 = 999f, TimeNotHitTarget2 = 999f } } ; }
public BucketCubeTask(BucketSet <CubeData> bucketSet, PositionHasher hasher) { this.bucketSet = bucketSet; this.hasher = hasher; }
public MoveCubeTask(PositionHasher hasher, BucketSet <CubeData> cubeLookup) { this.hasher = hasher; this.cubeLookup = cubeLookup; }