public HandleAgentUpdate ( IClientAPI remoteClient, AgentUpdateArgs agentData ) : void | ||
remoteClient | IClientAPI | |
agentData | AgentUpdateArgs | |
return | void |
// Some presence property has changed. Generate a call into the scene presence // so the new values are evaluated (like AgentControlFlags). // The ScenePresence will trigger OnScenePresenceUpdated and we rely on the // fact that the values will all be equal to supress the generation of a // new outgoing property update message. private void GenerateAgentUpdated(ScenePresence sp) { // The call for the change of these values comes out of the client view // which has an OnAgentUpdate event that the scene presence connects to. // We can't use the OnAgentUpdate event subscription (we're not derived // from client view) so we fake the reception of a presenece changing // message by building up the parameter block and directly calling the // ScenePresence's handling routine. AgentUpdateArgs aua = new AgentUpdateArgs(); aua.AgentID = sp.UUID; aua.BodyRotation = sp.Rotation; aua.CameraAtAxis = sp.CameraAtAxis; aua.CameraCenter = sp.CameraPosition; aua.CameraLeftAxis = sp.CameraLeftAxis; aua.CameraUpAxis = sp.CameraUpAxis; aua.ClientAgentPosition = sp.AbsolutePosition; aua.ControlFlags = sp.AgentControlFlags; aua.Far = sp.DrawDistance; aua.Flags = 0; aua.HeadRotation = sp.Rotation; // this is wrong but the only thing we can do aua.State = sp.State; aua.UseClientAgentPosition = true; sp.HandleAgentUpdate(null, aua); }
public void OnBotAgentUpdate(ScenePresence presence, Vector3 toward, uint controlFlag, Quaternion bodyRotation, bool isMoving) { if (m_controller.Bot.Frozen && isMoving) { var pa = presence.PhysicsActor; bool fly = pa != null && pa.Flying; StopMoving(presence, fly, false); return; } if (isMoving) m_hasStoppedMoving = false; AgentUpdateArgs pack = new AgentUpdateArgs { ControlFlags = controlFlag, BodyRotation = bodyRotation }; presence.HandleAgentUpdate(presence.ControllingClient, pack); }