namespace Oculus.Platform.Samples.VrBoardGame
|
|
{
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using UnityEngine.EventSystems;
|
|
|
|
// This is a helper class for selecting objects that the user is looking at.
|
|
// It will select UI objects that have an attach 3d collision volume and helps
|
|
// the GameController locate GamePieces and GamePositions.
|
|
public class EyeCamera : MonoBehaviour
|
|
{
|
|
// the EventSystem used by the UI elements
|
|
[SerializeField] private EventSystem m_eventSystem = null;
|
|
|
|
// the GameController to notify
|
|
[SerializeField] private GameController m_gameController = null;
|
|
|
|
// a tine ball in the distance to debug where the user is looking
|
|
[SerializeField] private SphereCollider m_gazeTracker = null;
|
|
|
|
// the current Button, if any, being looked at
|
|
private Button m_currentButton;
|
|
|
|
// the current GamePiece, if any, being looked at
|
|
private GamePiece m_currentPiece;
|
|
|
|
// the current BoardPosition, if any, being looked at
|
|
private BoardPosition m_boardPosition;
|
|
|
|
void Update()
|
|
{
|
|
RaycastHit hit;
|
|
Button button = null;
|
|
GamePiece piece = null;
|
|
BoardPosition pos = null;
|
|
|
|
// do a forward raycast to see if we hit a selectable object
|
|
bool hitSomething = Physics.Raycast(transform.position, transform.forward, out hit, 50f);
|
|
if (hitSomething) {
|
|
button = hit.collider.GetComponent<Button>();
|
|
piece = hit.collider.GetComponent<GamePiece>();
|
|
pos = hit.collider.GetComponent<BoardPosition>();
|
|
}
|
|
|
|
if (m_currentButton != button)
|
|
{
|
|
if (m_eventSystem != null)
|
|
{
|
|
m_eventSystem.SetSelectedGameObject(null);
|
|
}
|
|
m_currentButton = button;
|
|
if (m_currentButton != null)
|
|
{
|
|
m_currentButton.Select();
|
|
}
|
|
}
|
|
|
|
if (m_currentPiece != piece)
|
|
{
|
|
if (m_currentPiece != null)
|
|
{
|
|
m_gameController.StoppedLookingAtPiece();
|
|
}
|
|
m_currentPiece = piece;
|
|
if (m_currentPiece != null)
|
|
{
|
|
m_gameController.StartedLookingAtPiece(m_currentPiece);
|
|
}
|
|
}
|
|
|
|
if (m_boardPosition != pos)
|
|
{
|
|
m_boardPosition = pos;
|
|
if (m_boardPosition != null)
|
|
{
|
|
m_gameController.StartedLookingAtPosition(m_boardPosition);
|
|
}
|
|
}
|
|
|
|
// clear the potential move if they gaze off the board
|
|
if (hit.collider == m_gazeTracker)
|
|
{
|
|
m_gameController.ClearProposedMove();
|
|
}
|
|
|
|
// moves the camera with the mouse - very useful for debugging in to 2D mode.
|
|
if (Input.GetButton("Fire2"))
|
|
{
|
|
var v = Input.GetAxis("Mouse Y");
|
|
var h = Input.GetAxis("Mouse X");
|
|
transform.rotation *= Quaternion.AngleAxis(h, Vector3.up);
|
|
transform.rotation *= Quaternion.AngleAxis(-v, Vector3.right);
|
|
Vector3 eulers = transform.eulerAngles;
|
|
eulers.z = 0;
|
|
transform.eulerAngles = eulers;
|
|
}
|
|
}
|
|
}
|
|
}
|