Assignment for RMIT Mixed Reality in 2020
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

84 lines
2.7 KiB

namespace Oculus.Platform.Samples.VrHoops
{
using UnityEngine;
// This script moves to goal around in a random direction to add a bit more difficulty
// to the game.
public class GoalMover : MonoBehaviour {
// how far to from the center before changing direction
[SerializeField] private float MAX_OFFSET = 2.0f;
// how fast the backboard will move
[SerializeField] private float m_speed = 0.005f;
// maximum interpolation distance allow to correct per update
private const float MOVE_TOLERANCE = 0.1f;
// the position the goal should be in - only differs if network updates come in
private Vector3 m_expectedPosition;
// the current move vector * m_speed;
private Vector3 m_moveDirection;
// the direction to move when we run into the boundary
private Vector3 m_nextMoveDirection;
public Vector3 ExpectedPosition
{
get { return m_expectedPosition; }
set { m_expectedPosition = value; }
}
public Vector3 MoveDirection
{
get { return m_moveDirection; }
set { m_moveDirection = value; }
}
public Vector3 NextMoveDirection
{
get { return m_nextMoveDirection; }
set { m_nextMoveDirection = value; }
}
void Start ()
{
ExpectedPosition = transform.localPosition;
m_moveDirection.x = Random.Range(-1.0f, 1.0f);
m_moveDirection.y = Random.Range(-1.0f, 1.0f);
m_moveDirection = Vector3.ClampMagnitude(m_moveDirection, m_speed);
m_nextMoveDirection.x = -Mathf.Sign(m_moveDirection.x) * Random.Range(0f, 1.0f);
m_nextMoveDirection.y = -Mathf.Sign(m_moveDirection.y) * Random.Range(0f, 1.0f);
m_nextMoveDirection = Vector3.ClampMagnitude(m_nextMoveDirection, m_speed);
}
void FixedUpdate ()
{
// move a bit along our random direction
transform.localPosition += MoveDirection;
ExpectedPosition += MoveDirection;
// make a slight correction to the position if we're not where we should be
Vector3 correction = ExpectedPosition - transform.localPosition;
correction = Vector3.ClampMagnitude(correction, MOVE_TOLERANCE);
transform.localPosition += correction;
// if we've gone too far from the center point, correct and change direction
if (transform.localPosition.sqrMagnitude > (MAX_OFFSET*MAX_OFFSET))
{
transform.localPosition = Vector3.ClampMagnitude(transform.localPosition, MAX_OFFSET);
ExpectedPosition = transform.localPosition;
MoveDirection = NextMoveDirection;
// select a the next randomish direction to move in
m_nextMoveDirection.x = -Mathf.Sign(m_moveDirection.x) * Random.Range(0f, 1.0f);
m_nextMoveDirection.y = -Mathf.Sign(m_moveDirection.y) * Random.Range(0f, 1.0f);
m_nextMoveDirection = Vector3.ClampMagnitude(m_nextMoveDirection, m_speed);
}
}
}
}