protected override void OnUpdate() { if (GameManager.Instance == null || !GameManager.Instance.IsPlaying) { return; } job.Complete(); while (detections.TryDequeue(out bool isInsideObstacle)) { if (isInsideObstacle) { HealthManager.Instance.InsideObstacle(); OnEnteredObstacle?.Invoke(); } } detections.Clear(); var newJob = new DetectionJob { CameraPosition = Camera.main.transform.position, Output = detections.AsParallelWriter(), WorldRenderBoundsType = GetComponentTypeHandle <WorldRenderBounds>(true) }; job = newJob.ScheduleParallel(obstacleQuery, Dependency); Dependency = JobHandle.CombineDependencies(Dependency, job); }
protected override void OnUpdate() { if (registeredControllers.Count == 0) { return; } saberDatas.Clear(); for (int i = 0; i < registeredControllers.Count; i++) { saberDatas.Add(new SaberData { AffectsNoteType = registeredControllers[i].affectsNoteType, Forward = registeredControllers[i].transform.forward, Position = registeredControllers[i].transform.position, Length = registeredControllers[i].saberLength }); } var newJob = new DetectionJob { SaberDatas = saberDatas, RaycastOffsets = raycastOffsets, HitDetections = detections.AsParallelWriter(), NoteType = GetComponentTypeHandle <Note>(true), TranslationType = GetComponentTypeHandle <Translation>(true), RotationType = GetComponentTypeHandle <Rotation>(true), WorldRenderBoundsType = GetComponentTypeHandle <WorldRenderBounds>(true), EntityType = GetEntityTypeHandle(), }; job = newJob.ScheduleParallel(noteQuery, Dependency); Dependency = JobHandle.CombineDependencies(Dependency, job); job.Complete(); while (detections.TryDequeue(out SaberNoteHitData hit)) { for (int i = 0; i < registeredControllers.Count; i++) { if (registeredControllers[i].affectsNoteType == hit.Note.Type) { registeredControllers[i].RegisterHit(hit); } } } }