diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/OpenSim.Region/Scenes/Avatar.cs | 102 |
1 files changed, 85 insertions, 17 deletions
diff --git a/OpenSim/OpenSim.Region/Scenes/Avatar.cs b/OpenSim/OpenSim.Region/Scenes/Avatar.cs index 6ae4319..17b2437 100644 --- a/OpenSim/OpenSim.Region/Scenes/Avatar.cs +++ b/OpenSim/OpenSim.Region/Scenes/Avatar.cs | |||
@@ -61,6 +61,7 @@ namespace OpenSim.Region.Scenes | |||
61 | private ulong m_regionHandle; | 61 | private ulong m_regionHandle; |
62 | private Dictionary<uint, IClientAPI> m_clientThreads; | 62 | private Dictionary<uint, IClientAPI> m_clientThreads; |
63 | private bool childAvatar = false; | 63 | private bool childAvatar = false; |
64 | private bool newForce = false; | ||
64 | 65 | ||
65 | protected RegionInfo m_regionInfo; | 66 | protected RegionInfo m_regionInfo; |
66 | /// <summary> | 67 | /// <summary> |
@@ -78,6 +79,7 @@ namespace OpenSim.Region.Scenes | |||
78 | this.uuid = theClient.AgentId; | 79 | this.uuid = theClient.AgentId; |
79 | 80 | ||
80 | m_regionInfo = reginfo; | 81 | m_regionInfo = reginfo; |
82 | m_regionHandle = reginfo.RegionHandle; | ||
81 | OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "Avatar.cs - Loading details from grid (DUMMY)"); | 83 | OpenSim.Framework.Console.MainConsole.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.LOW, "Avatar.cs - Loading details from grid (DUMMY)"); |
82 | ControllingClient = theClient; | 84 | ControllingClient = theClient; |
83 | this.firstname = ControllingClient.FirstName; | 85 | this.firstname = ControllingClient.FirstName; |
@@ -99,8 +101,8 @@ namespace OpenSim.Region.Scenes | |||
99 | //ControllingClient.OnSetAppearance += new SetAppearance(this.SetAppearance); | 101 | //ControllingClient.OnSetAppearance += new SetAppearance(this.SetAppearance); |
100 | ControllingClient.OnCompleteMovementToRegion += new GenericCall2(this.CompleteMovement); | 102 | ControllingClient.OnCompleteMovementToRegion += new GenericCall2(this.CompleteMovement); |
101 | ControllingClient.OnCompleteMovementToRegion += new GenericCall2(this.SendInitialPosition); | 103 | ControllingClient.OnCompleteMovementToRegion += new GenericCall2(this.SendInitialPosition); |
102 | /* ControllingClient.OnAgentUpdate += new GenericCall3(this.HandleAgentUpdate); | 104 | ControllingClient.OnAgentUpdate += new UpdateAgent(this.HandleAgentUpdate); |
103 | ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack); | 105 | /* ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack); |
104 | ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); | 106 | ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange); |
105 | ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); | 107 | ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement); |
106 | */ | 108 | */ |
@@ -135,31 +137,51 @@ namespace OpenSim.Region.Scenes | |||
135 | /// </summary> | 137 | /// </summary> |
136 | public override void addForces() | 138 | public override void addForces() |
137 | { | 139 | { |
138 | 140 | lock (this.forcesList) | |
141 | { | ||
142 | newForce = false; | ||
143 | if (this.forcesList.Count > 0) | ||
144 | { | ||
145 | for (int i = 0; i < this.forcesList.Count; i++) | ||
146 | { | ||
147 | NewForce force = this.forcesList[i]; | ||
148 | PhysicsVector phyVector = new PhysicsVector(force.X, force.Y, force.Z); | ||
149 | lock (m_world.SyncRoot) | ||
150 | { | ||
151 | this._physActor.Velocity = phyVector; | ||
152 | } | ||
153 | this.updateflag = true; | ||
154 | this.velocity = new LLVector3(force.X, force.Y, force.Z); //shouldn't really be doing this | ||
155 | // but as we are setting the velocity (rather than using real forces) at the moment it is okay. | ||
156 | this.newForce = true; | ||
157 | } | ||
158 | for (int i = 0; i < this.forcesList.Count; i++) | ||
159 | { | ||
160 | this.forcesList.RemoveAt(0); | ||
161 | } | ||
162 | } | ||
163 | } | ||
139 | } | 164 | } |
140 | 165 | ||
141 | /// <summary> | 166 | public void SendTerseUpdateToClient(IClientAPI RemoteClient) |
142 | /// likely to removed very soon | ||
143 | /// </summary> | ||
144 | /// <param name="name"></param> | ||
145 | public static void SetupTemplate(string name) | ||
146 | { | 167 | { |
147 | 168 | RemoteClient.SendAvatarTerseUpdate(this.m_regionHandle, 64096, this.localid, new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z), new LLVector3(this._physActor.Velocity.X, this._physActor.Velocity.Y, this._physActor.Velocity.Z)); | |
148 | } | 169 | } |
149 | 170 | ||
150 | /// <summary> | 171 | /// <summary> |
151 | /// likely to removed very soon | 172 | /// |
152 | /// </summary> | 173 | /// </summary> |
153 | /// <param name="objdata"></param> | 174 | public void SendTerseUpdateToALLClients() |
154 | protected static void SetDefaultPacketValues(ObjectUpdatePacket.ObjectDataBlock objdata) | ||
155 | { | 175 | { |
156 | 176 | List<Avatar> avatars = this.m_world.RequestAvatarList(); | |
157 | 177 | for (int i = 0; i < avatars.Count; i++) | |
158 | 178 | { | |
179 | this.SendTerseUpdateToClient(avatars[i].ControllingClient); | ||
180 | } | ||
159 | } | 181 | } |
160 | 182 | ||
161 | /// <summary> | 183 | /// <summary> |
162 | /// | 184 | /// Complete Avatar's movement into the region |
163 | /// </summary> | 185 | /// </summary> |
164 | public void CompleteMovement() | 186 | public void CompleteMovement() |
165 | { | 187 | { |
@@ -187,9 +209,55 @@ namespace OpenSim.Region.Scenes | |||
187 | /// <summary> | 209 | /// <summary> |
188 | /// | 210 | /// |
189 | /// </summary> | 211 | /// </summary> |
190 | public void SendRegionHandshake() | 212 | /// <param name="pack"></param> |
213 | public void HandleAgentUpdate(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation) | ||
191 | { | 214 | { |
192 | 215 | ||
216 | if ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_AT_POS) != 0) | ||
217 | { | ||
218 | Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | ||
219 | if (((movementflag & 1) == 0) || (q != this.bodyRot)) | ||
220 | { | ||
221 | //we should add a new force to the list | ||
222 | // but for now we will deal with velocities | ||
223 | NewForce newVelocity = new NewForce(); | ||
224 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0); | ||
225 | Axiom.MathLib.Vector3 direc = q * v3; | ||
226 | direc.Normalize(); | ||
227 | |||
228 | //work out velocity for sim physics system | ||
229 | direc = direc * ((0.03f) * 128f); | ||
230 | if (this._physActor.Flying) | ||
231 | direc *= 4; | ||
232 | |||
233 | newVelocity.X = direc.x; | ||
234 | newVelocity.Y = direc.y; | ||
235 | newVelocity.Z = direc.z; | ||
236 | this.forcesList.Add(newVelocity); | ||
237 | movementflag = 1; | ||
238 | this.bodyRot = q; | ||
239 | } | ||
240 | } | ||
241 | else | ||
242 | { | ||
243 | if (movementflag == 16) | ||
244 | { | ||
245 | movementflag = 0; | ||
246 | } | ||
247 | if ((movementflag) != 0) | ||
248 | { | ||
249 | NewForce newVelocity = new NewForce(); | ||
250 | newVelocity.X = 0; | ||
251 | newVelocity.Y = 0; | ||
252 | newVelocity.Z = 0; | ||
253 | this.forcesList.Add(newVelocity); | ||
254 | movementflag = 0; | ||
255 | |||
256 | this.movementflag = 16; | ||
257 | |||
258 | } | ||
259 | } | ||
260 | |||
193 | } | 261 | } |
194 | 262 | ||
195 | /// <summary> | 263 | /// <summary> |