private void DisconnectDelegates() { selector = GetComponent<Selector>(); if (selector != null) { selector.useDefaultGUI = true; selector.SelectedUsableObject -= OnSelectedUsable; selector.DeselectedUsableObject -= OnDeselectedUsable; } proximitySelector = GetComponent<ProximitySelector>(); if (proximitySelector != null) { proximitySelector.useDefaultGUI = true; proximitySelector.SelectedUsableObject -= OnSelectedUsable; proximitySelector.DeselectedUsableObject -= OnDeselectedUsable; } HideControls(); }
private void ConnectDelegates() { DisconnectDelegates(); // Make sure we're not connecting twice. selector = GetComponent<Selector>(); if (selector != null) { selector.useDefaultGUI = false; selector.SelectedUsableObject += OnSelectedUsable; selector.DeselectedUsableObject += OnDeselectedUsable; defaultUseMessage = selector.defaultUseMessage; } proximitySelector = GetComponent<ProximitySelector>(); if (proximitySelector != null) { proximitySelector.useDefaultGUI = false; proximitySelector.SelectedUsableObject += OnSelectedUsable; proximitySelector.DeselectedUsableObject += OnDeselectedUsable; if (string.IsNullOrEmpty(defaultUseMessage)) defaultUseMessage = proximitySelector.defaultUseMessage; } }
protected void DrawOnSelection(Usable usable, float distance, Selector.Reticle reticle, GUIStyle guiStyle, string defaultUseMessage, Color inRangeColor, Color outOfRangeColor, TextStyle textStyle, Color textStyleColor) { if (usable == null) return; if ((usable != lastUsable) || string.IsNullOrEmpty(heading)) { lastUsable = usable; heading = usable.GetName(); useMessage = string.IsNullOrEmpty(usable.overrideUseMessage) ? defaultUseMessage : usable.overrideUseMessage; } GameObject selection = usable.gameObject; if (selection != lastSelectionDrawn) { selectionHeight = Tools.GetGameObjectHeight(selection); selectionHeadingSize = guiStyle.CalcSize(new GUIContent(heading)); selectionUseMessageSize = guiStyle.CalcSize(new GUIContent(useMessage)); } // Set text color based on distance: bool inUseRange = (distance <= usable.maxUseDistance); guiStyle.normal.textColor = inUseRange ? inRangeColor : outOfRangeColor; // Draw heading: Vector3 screenPos = Camera.main.WorldToScreenPoint(selection.transform.position + (Vector3.up * selectionHeight)); screenPos += offset; screenPos = new Vector3(screenPos.x, screenPos.y + selectionUseMessageSize.y + selectionHeadingSize.y, screenPos.z); if (screenPos.z < 0) return; Rect rect = new Rect(screenPos.x - (selectionHeadingSize.x / 2), (Screen.height - screenPos.y) - (selectionHeadingSize.y / 2), selectionHeadingSize.x, selectionHeadingSize.y); UnityGUITools.DrawText(rect, heading, guiStyle, textStyle, textStyleColor); // Draw use message: screenPos = Camera.main.WorldToScreenPoint(selection.transform.position + (Vector3.up * (selectionHeight))); screenPos += offset; screenPos = new Vector3(screenPos.x, screenPos.y + selectionUseMessageSize.y, screenPos.z); rect = new Rect(screenPos.x - (selectionUseMessageSize.x / 2), (Screen.height - screenPos.y) - (selectionUseMessageSize.y / 2), selectionUseMessageSize.x, selectionUseMessageSize.y); UnityGUITools.DrawText(rect, useMessage, guiStyle, textStyle, textStyleColor); // Draw reticle: if (reticle != null) { Texture2D reticleTexture = inUseRange ? reticle.inRange : reticle.outOfRange; if (reticleTexture != null) { screenPos = Camera.main.WorldToScreenPoint(selection.transform.position + (Vector3.up * 0.5f * selectionHeight)); rect = new Rect(screenPos.x - (reticle.width / 2), (Screen.height - screenPos.y) - (reticle.height / 2), reticle.width, reticle.height); GUI.Label(rect, reticleTexture); } } }
void Awake() { selector = GetComponent<Selector>(); proximitySelector = GetComponent<ProximitySelector>(); }
void Awake() { selector = GetComponent <Selector>(); proximitySelector = GetComponent <ProximitySelector>(); }