113 lines
3.4 KiB
C#
113 lines
3.4 KiB
C#
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
using UnityEngine.InputSystem;
|
|
|
|
public class ObjectVisualizer : MonoBehaviour
|
|
{
|
|
|
|
public Transform familiarObjects;
|
|
public Transform unfamiliarObjects;
|
|
public List<int> 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<displayObjectSize; i++)
|
|
{
|
|
// Show only the corresponding child indicated in the position of the list
|
|
parentObject.GetChild(i).gameObject.SetActive(i==objectDisplayOrder[currentShowedIndex]);
|
|
}
|
|
}
|
|
|
|
void Start()
|
|
{
|
|
// Initialize which type of objects to show
|
|
UpdateDisplayObjectType();
|
|
|
|
// Start the list with sequential numbers
|
|
objectDisplayOrder = Enumerable.Range(0, displayObjectSize).ToList();
|
|
|
|
// Initialize displayed object
|
|
UpdateDisplayedObject();
|
|
}
|
|
|
|
}
|