private void TargetEnter(InputReceiver inputReceiver) { //status: Status = PointerStatus.Targeting; //sets: Target = inputReceiver.gameObject; //catalog: _targetedInputReceiver = inputReceiver; _targetedInputReceiver.TargetEnter(gameObject); }
private void Scan() { RaycastHit[] hits = new RaycastHit[0]; if (raycastAll) { //cast: hits = Physics.RaycastAll(inputDriver.motionSource.position, inputDriver.motionSource.forward, distance, layermask); } else { RaycastHit hit; if (Physics.Raycast(inputDriver.motionSource.position, inputDriver.motionSource.forward, out hit, distance, layermask)) { hits = new RaycastHit[] { hit }; } } if (hits.Length == 0) { if (_targetedReceivers.Count > 0) { foreach (var item in _targetedReceivers) { if (!_selectedReceivers.Contains(item)) { item.TargetExit(gameObject); } } _scannedReceivers.Clear(); _targetedReceivers.Clear(); } return; } //catalog zones: _scannedReceivers.Clear(); foreach (var hit in hits) { InputReceiver zone = hit.transform.GetComponent <InputReceiver>(); if (zone != null) { zone.TargetEnter(gameObject); _scannedReceivers.Add(zone); } } //target exits: foreach (var item in _targetedReceivers) { if (!_selectedReceivers.Contains(item) && !_scannedReceivers.Contains(item)) { item.TargetExit(gameObject); } } //update active zones: _targetedReceivers = new List <InputReceiver>(_scannedReceivers); }