private IEnumerator <IYieldInstruction> TelemtrySpeedFilter() { float time = 0.0f; while (time < (TELEMETRY_UPDATE_RATE + TELEMETRY_SPEED_FILTER_PADDING)) { time += Time.deltaTime; yield return(new YieldUntilNextFrame()); } if (this.StateMachine.CurrentState is DefaultForeignAvatarState) { DefaultForeignAvatarState state = (DefaultForeignAvatarState)this.StateMachine.CurrentState; state.SetCurrentAvatarSpeed(0.0f); } }
private void ReceiveEmote(Message message) { // Parse out the emote info to load from the repo to make sure the emote is loaded before we try to play it. XmlDocument emoteDoc = new XmlDocument(); emoteDoc.LoadXml((string)message.Data[0]); XmlNode emoteNode = emoteDoc.SelectSingleNode("Asset"); ClientAssetInfo emoteInfo = new ClientAssetInfo(emoteNode); GameFacade.Instance.RetrieveProxy <ClientAssetRepository>().GetAsset <RigAnimationAsset>(emoteInfo, delegate(RigAnimationAsset rigAnimationAsset) { if (this.StateMachine.CurrentState is DefaultForeignAvatarState) { DefaultForeignAvatarState state = (DefaultForeignAvatarState)this.StateMachine.CurrentState; state.PlayEmote(rigAnimationAsset.AnimationName.ToString()); } }); }
protected override void AvatarEntityLoadedCallback(AvatarEntity avatar) { base.AvatarEntityLoadedCallback(avatar); this.Entity = avatar; IState avatarStartState = new DefaultForeignAvatarState(avatar as ForeignAvatarEntity); this.StateMachine.CurrentState.AddTransition(avatarStartState); this.StateMachine.TransitionToState(avatarStartState); // TODO: This next line might not be doing anything. mAvatar.SetActiveRecursively(true); GameFacade.Instance.RetrieveMediator <AvatarMediator>().RegisterForeignAvatar(this.AvatarEntity, this.DistributedObjectId); base.AvatarEntityLoadedRunBufferedMessages(); }
private IEnumerator <IYieldInstruction> DeadReckonTelemetry(Vector3 position, Quaternion rotation) { float step = 1.0f / (TELEMETRY_UPDATE_RATE * 1.1f); Vector3 lastFixedUpdatePosition; for (float time = 0.0f; time < (TELEMETRY_UPDATE_RATE * 1.1f); time += Time.fixedDeltaTime) { float t = time * step; lastFixedUpdatePosition = this.Entity.UnityGameObject.transform.position; yield return(new YieldUntilNextFrame()); this.Entity.UnityGameObject.transform.position = Vector3.Lerp(mLastPosition, position, t); this.Entity.UnityGameObject.transform.rotation = Quaternion.Slerp(mLastRotation, rotation, t); if (this.StateMachine.CurrentState is DefaultForeignAvatarState) { DefaultForeignAvatarState state = (DefaultForeignAvatarState)this.StateMachine.CurrentState; // Add this frame's speed to the list of recent speeds float thisFrameSpeed = (lastFixedUpdatePosition - this.Entity.UnityGameObject.transform.position).magnitude / Time.fixedDeltaTime; mSpeeds.Add(thisFrameSpeed); if (mSpeeds.Count > mSpeedWindow) { mSpeeds.RemoveAt(0); } // Average the speeds float smoothSpeed = 0.0f; foreach (float speed in mSpeeds) { smoothSpeed += speed; } smoothSpeed /= (float)mSpeeds.Count; state.SetCurrentAvatarSpeed(smoothSpeed); } lastFixedUpdatePosition = this.Entity.UnityGameObject.transform.position; } }