public IEnumerator IndicatorCheck() { while (true) { Collider[] hitColliders = Physics.OverlapSphere(transform.position, indicatorRange); foreach (ActionIndicator indicator in aIndicators) { if (indicator.anim.isActiveAndEnabled) { indicator.anim.SetBool("isVisible", false); } } aIndicators.Clear(); foreach (Collider col in hitColliders) { ActionIndicator indicator = col.GetComponentInChildren <ActionIndicator>(); if (indicator) { aIndicators.Add(indicator); } } foreach (ActionIndicator indicator in aIndicators) { RaycastHit hit; if (Physics.Linecast(transform.position, indicator.transform.position, out hit) && hit.transform.gameObject == indicator.iObject.gameObject && !indicator.isGazedAt) { if (indicator.anim.isActiveAndEnabled) { indicator.anim.SetBool("isVisible", true); } } else { if (indicator.anim.isActiveAndEnabled) { indicator.anim.SetBool("isVisible", false); } } } yield return(new WaitForSeconds(updateRate)); } }
// TODO - maybe UI panels should have base and subclasses that implement their own creation methods public void CreateInteractionPanel(WorldObject.InformationStruct informationStruct) { GameObject obj = Instantiate(interactionPanelPrefab, transform); obj.transform.SetParent(transform); obj.transform.position = Input.mousePosition; InteractionPanel interactionPanel = obj.GetComponent <InteractionPanel>(); // Set the title as the object name interactionPanel.objectNameText.text = informationStruct.objectName; // Set this panel to close on the close button click interactionPanel.closeButton.onClick.AddListener(() => { Destroy(obj); }); // Update the actions panel foreach (Action action in informationStruct.actions) { ActionIndicator actionIndicator = Instantiate(interactionPanel.actionEntryPrefab, transform); actionIndicator.transform.SetParent(interactionPanel.actionListPanel.transform); // Link the add item button actionIndicator.addItemButton.onClick.AddListener(() => { CreateItemSelectPanel(interactionPanel, action); }); // Add the action title actionIndicator.actionNameText.text = action.description; // Add precondition icons foreach (WorldItem precondition in action.preconditions) { Image itemIcon = Instantiate(actionIndicator.itemIcon, transform); itemIcon.transform.SetParent(actionIndicator.preconditionGridLayout.transform); itemIcon.sprite = precondition.itemDefinition.icon; } // Add effect icons foreach (WorldItem effect in action.effects) { Image itemIcon = Instantiate(actionIndicator.itemIcon, transform); itemIcon.transform.SetParent(actionIndicator.effectGridLayout.transform); itemIcon.sprite = effect.itemDefinition.icon; } } }
// When we are enabled public virtual void Start() { indicator = Instantiate(UI.current.aIndicatorPrefab, transform); indicator.iObject = this; }