using System.Collections.Generic; using System.Linq; using UnityEngine; using UnityEngine.InputSystem; public class ObjectVisualizer : MonoBehaviour { public Transform familiarObjects; public Transform unfamiliarObjects; public List objectDisplayOrder; [Header("Input Setup")] public InputActionReference changeObjectTypeAction; // Switches between familiar and unfamiliar objects public InputActionReference showNextObjectAction; // Shows next object in the circular list public InputActionReference showPreviousObjectAction; // Shows previous object in the circular list private bool displayFamiliarObjects = true; private int displayObjectSize; private int currentShowedIndex = 0; void OnEnable() { // Activate input callbacks changeObjectTypeAction.action.performed += ChangeObjectType; showNextObjectAction.action.performed += ShowNextObject; showPreviousObjectAction.action.performed += ShowPreviousObject; } void OnDisable() { // Deactivate input callbacks changeObjectTypeAction.action.performed -= ChangeObjectType; showNextObjectAction.action.performed -= ShowNextObject; showPreviousObjectAction.action.performed -= ShowPreviousObject; } /// INPUT CALLBACKS void ChangeObjectType(InputAction.CallbackContext ctx) { displayFamiliarObjects = displayFamiliarObjects? false:true; Debug.Log($"Changing object type | Displaying familiar objects?: {displayFamiliarObjects}"); UpdateDisplayObjectType(); // Restart displayed object index currentShowedIndex = 0; UpdateDisplayedObject(); } void ShowNextObject(InputAction.CallbackContext ctx) { currentShowedIndex++; UpdateDisplayedObject(); } void ShowPreviousObject(InputAction.CallbackContext ctx) { currentShowedIndex--; UpdateDisplayedObject(); } /// MAIN METHODS private int GetObjectsListSize() { if(displayFamiliarObjects) return familiarObjects.childCount; else return unfamiliarObjects.childCount; } void UpdateDisplayObjectType() { familiarObjects.gameObject.SetActive(displayFamiliarObjects); unfamiliarObjects.gameObject.SetActive(!displayFamiliarObjects); displayObjectSize = GetObjectsListSize(); } void UpdateDisplayedObject() { // Keep objects within limits if(currentShowedIndex == displayObjectSize) currentShowedIndex = 0; if(currentShowedIndex == -1) currentShowedIndex = displayObjectSize-1; Debug.Log($"Update displayed object | Current index: {currentShowedIndex}"); // Display corresponding object Transform parentObject = displayFamiliarObjects? familiarObjects : unfamiliarObjects; for(int i=0; i