void Update() { if (Input.GetMouseButtonDown(0)) { MouseHoverInfo mhi = GetMouseHoverInfo(crew.reachRange); if (mhi.IsHit) { ClickTransmitter clickTransmitter = mhi.hoverObject.GetComponent <ClickTransmitter>(); if (clickTransmitter != null) { HitClickTransmitter(clickTransmitter); } } } }
private void ActivateClosestClickReceiver(ClickTransmitter clickTransmitter) { //this handles two cases: //activate all clickReceivers with matching frequency, or //if frequency is zero, activate the closest clickReceiver. ClickReceiver closestReceiver = null; float minDistance = 0; foreach (ClickReceiver clickReceiver in FindObjectsOfType <ClickReceiver>()) { float newDistance = Vector3.Distance(clickTransmitter.gameObject.transform.position, clickReceiver.startPosition); if (newDistance < minDistance || closestReceiver == null) { closestReceiver = clickReceiver; minDistance = newDistance; } } closestReceiver.Activate(); }
private void HitClickTransmitter(ClickTransmitter clickTransmitter) { //called when clickTransmitter has been activated. if (clickTransmitter.FindsClosestReceiver()) { ActivateClosestClickReceiver(clickTransmitter); } else { foreach (GameObject go in clickTransmitter.clickReceiverGameObjects) { ClickReceiver clickReceiver = go.GetComponent <ClickReceiver>(); if (clickReceiver == null) { Debug.LogError("an item in clickReceiverGameObjects has no clickReceiver. " + clickTransmitter.gameObject); continue; } clickReceiver.Activate(); } } }