|
|
- namespace Oculus.Platform.Samples.VrHoops
- {
- using UnityEngine;
- using System.Collections;
-
- // This component handles network coordination for the moving backboard.
- // Although there is randomness in the next direction, the movement is
- // otherwise completely predictable, much like a moving platform or door,
- // thus we only need to send occasional updates. If the position of the
- // backboard is not correct, the GoalMover will gradually nudge it in the
- // correct direction until the local and remote motion is synchronized.
- public class P2PNetworkGoal : MonoBehaviour
- {
- // cached reference to the associated GoalMover component
- private GoalMover m_goal;
-
- // the last move direction we sent to remote clients
- private Vector3 m_lastSentMoveDirection;
-
- private bool m_sendUpdates;
-
- public bool SendUpdates
- {
- set { m_sendUpdates = value; }
- }
-
- void Awake()
- {
- m_goal = gameObject.GetComponent<GoalMover>();
- }
-
- void FixedUpdate ()
- {
- // since the backboard's movement is deterministic, we don't need to send position
- // updates constantly, just when the move direction changes
- if (m_sendUpdates && m_goal.MoveDirection != m_lastSentMoveDirection)
- {
- SendBackboardUpdate();
- }
- }
-
- public void SendBackboardUpdate()
- {
- m_lastSentMoveDirection = m_goal.MoveDirection;
-
- float time = Time.realtimeSinceStartup;
- PlatformManager.P2P.SendBackboardUpdate(
- time, transform.localPosition,
- m_goal.MoveDirection, m_goal.NextMoveDirection);
- }
-
- // message from the remote player with new transforms
- public void RemoteBackboardUpdate(float remoteTime, Vector3 pos, Vector3 moveDir, Vector3 nextMoveDir)
- {
- // interpolate the position forward since the backboard would have moved over
- // the time it took to send the message
- float time = Time.realtimeSinceStartup;
- float numMissedSteps = (time - remoteTime) / Time.fixedDeltaTime;
- m_goal.ExpectedPosition = pos + (Mathf.Round(numMissedSteps) * moveDir);
-
- m_goal.MoveDirection = moveDir;
- m_goal.NextMoveDirection = nextMoveDir;
- }
- }
- }
|