예제 #1
0
        private void TargetEnter(InputReceiver inputReceiver)
        {
            //status:
            Status = PointerStatus.Targeting;

            //sets:
            Target = inputReceiver.gameObject;

            //catalog:
            _targetedInputReceiver = inputReceiver;
            _targetedInputReceiver.TargetEnter(gameObject);
        }
예제 #2
0
        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);
        }