aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/POSPlugin/POSPlugin.cs')
-rw-r--r--OpenSim/Region/Physics/POSPlugin/POSPlugin.cs84
1 files changed, 51 insertions, 33 deletions
diff --git a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs
index 26310f9..1bc3490 100644
--- a/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs
+++ b/OpenSim/Region/Physics/POSPlugin/POSPlugin.cs
@@ -25,8 +25,8 @@
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28using System.Collections.Generic;
29using System; 28using System;
29using System.Collections.Generic;
30using Axiom.Math; 30using Axiom.Math;
31using OpenSim.Framework; 31using OpenSim.Framework;
32using OpenSim.Region.Physics.Manager; 32using OpenSim.Region.Physics.Manager;
@@ -114,10 +114,10 @@ namespace OpenSim.Region.Physics.POSPlugin
114 public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position, 114 public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
115 PhysicsVector size, Quaternion rotation) 115 PhysicsVector size, Quaternion rotation)
116 { 116 {
117 return this.AddPrimShape(primName, pbs, position, size, rotation, false); 117 return AddPrimShape(primName, pbs, position, size, rotation, false);
118 } 118 }
119 119
120 public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position, 120 public override PhysicsActor AddPrimShape(string primName, PrimitiveBaseShape pbs, PhysicsVector position,
121 PhysicsVector size, Quaternion rotation, bool isPhysical) 121 PhysicsVector size, Quaternion rotation, bool isPhysical)
122 { 122 {
123 POSPrim prim = new POSPrim(); 123 POSPrim prim = new POSPrim();
@@ -136,18 +136,20 @@ namespace OpenSim.Region.Physics.POSPlugin
136 " sizeX: " + p.Size.X * 0.5 + 0.5); 136 " sizeX: " + p.Size.X * 0.5 + 0.5);
137 */ 137 */
138 138
139 Vector3 rotatedPos = p.Orientation.Inverse() * new Vector3(c.Position.X - p.Position.X, c.Position.Y - p.Position.Y, c.Position.Z - p.Position.Z); 139 Vector3 rotatedPos = p.Orientation.Inverse()*
140 Vector3 avatarSize = p.Orientation.Inverse() * new Vector3(c.Size.X, c.Size.Y, c.Size.Z); 140 new Vector3(c.Position.X - p.Position.X, c.Position.Y - p.Position.Y,
141 c.Position.Z - p.Position.Z);
142 Vector3 avatarSize = p.Orientation.Inverse()*new Vector3(c.Size.X, c.Size.Y, c.Size.Z);
141 143
142 if (Math.Abs(rotatedPos.x) >= (p.Size.X * 0.5 + Math.Abs(avatarSize.x))) 144 if (Math.Abs(rotatedPos.x) >= (p.Size.X*0.5 + Math.Abs(avatarSize.x)))
143 { 145 {
144 return false; 146 return false;
145 } 147 }
146 if (Math.Abs(rotatedPos.y) >= (p.Size.Y * 0.5 + Math.Abs(avatarSize.y))) 148 if (Math.Abs(rotatedPos.y) >= (p.Size.Y*0.5 + Math.Abs(avatarSize.y)))
147 { 149 {
148 return false; 150 return false;
149 } 151 }
150 if (Math.Abs(rotatedPos.z) >= (p.Size.Z * 0.5 + Math.Abs(avatarSize.z))) 152 if (Math.Abs(rotatedPos.z) >= (p.Size.Z*0.5 + Math.Abs(avatarSize.z)))
151 { 153 {
152 return false; 154 return false;
153 } 155 }
@@ -182,12 +184,12 @@ namespace OpenSim.Region.Physics.POSPlugin
182 184
183 if (!character.Flying) 185 if (!character.Flying)
184 { 186 {
185 character._target_velocity.Z += gravity * timeStep; 187 character._target_velocity.Z += gravity*timeStep;
186 } 188 }
187 189
188 bool forcedZ = false; 190 bool forcedZ = false;
189 character.Position.X += character._target_velocity.X * timeStep; 191 character.Position.X += character._target_velocity.X*timeStep;
190 character.Position.Y += character._target_velocity.Y * timeStep; 192 character.Position.Y += character._target_velocity.Y*timeStep;
191 193
192 if (character.Position.Y < 0) 194 if (character.Position.Y < 0)
193 { 195 {
@@ -207,15 +209,15 @@ namespace OpenSim.Region.Physics.POSPlugin
207 character.Position.X = 255.9F; 209 character.Position.X = 255.9F;
208 } 210 }
209 211
210 float terrainheight = _heightMap[(int)character.Position.Y * 256 + (int)character.Position.X]; 212 float terrainheight = _heightMap[(int) character.Position.Y*256 + (int) character.Position.X];
211 if (character.Position.Z + (character._target_velocity.Z * timeStep) < terrainheight + 2) 213 if (character.Position.Z + (character._target_velocity.Z*timeStep) < terrainheight + 2)
212 { 214 {
213 character.Position.Z = terrainheight + 1.0f; 215 character.Position.Z = terrainheight + 1.0f;
214 forcedZ = true; 216 forcedZ = true;
215 } 217 }
216 else 218 else
217 { 219 {
218 character.Position.Z += character._target_velocity.Z * timeStep; 220 character.Position.Z += character._target_velocity.Z*timeStep;
219 } 221 }
220 222
221 /// this is it -- the magic you've all been waiting for! Ladies and gentlemen -- 223 /// this is it -- the magic you've all been waiting for! Ladies and gentlemen --
@@ -224,21 +226,21 @@ namespace OpenSim.Region.Physics.POSPlugin
224 226
225 if (check_all_prims(character)) 227 if (check_all_prims(character))
226 { 228 {
227 character.Position.Z = oldposZ; // first try Z axis 229 character.Position.Z = oldposZ; // first try Z axis
228 if (check_all_prims(character)) 230 if (check_all_prims(character))
229 { 231 {
230 character.Position.Z = oldposZ + 0.4f; // try harder 232 character.Position.Z = oldposZ + 0.4f; // try harder
231 if (check_all_prims(character)) 233 if (check_all_prims(character))
232 { 234 {
233 character.Position.X = oldposX; 235 character.Position.X = oldposX;
234 character.Position.Y = oldposY; 236 character.Position.Y = oldposY;
235 character.Position.Z = oldposZ; 237 character.Position.Z = oldposZ;
236 character.Position.X = character.Position.X + (character._target_velocity.X * timeStep); 238 character.Position.X = character.Position.X + (character._target_velocity.X*timeStep);
237 if (check_all_prims(character)) 239 if (check_all_prims(character))
238 { 240 {
239 character.Position.X = oldposX; 241 character.Position.X = oldposX;
240 } 242 }
241 character.Position.Y = character.Position.Y + (character._target_velocity.Y * timeStep); 243 character.Position.Y = character.Position.Y + (character._target_velocity.Y*timeStep);
242 if (check_all_prims(character)) 244 if (check_all_prims(character))
243 { 245 {
244 character.Position.Y = oldposY; 246 character.Position.Y = oldposY;
@@ -253,7 +255,7 @@ namespace OpenSim.Region.Physics.POSPlugin
253 { 255 {
254 forcedZ = true; 256 forcedZ = true;
255 } 257 }
256 } 258 }
257 259
258 if (character.Position.Y < 0) 260 if (character.Position.Y < 0)
259 { 261 {
@@ -273,8 +275,8 @@ namespace OpenSim.Region.Physics.POSPlugin
273 character.Position.X = 255.9F; 275 character.Position.X = 255.9F;
274 } 276 }
275 277
276 character._velocity.X = (character.Position.X - oldposX) / timeStep; 278 character._velocity.X = (character.Position.X - oldposX)/timeStep;
277 character._velocity.Y = (character.Position.Y - oldposY) / timeStep; 279 character._velocity.Y = (character.Position.Y - oldposY)/timeStep;
278 280
279 if (forcedZ) 281 if (forcedZ)
280 { 282 {
@@ -284,7 +286,7 @@ namespace OpenSim.Region.Physics.POSPlugin
284 } 286 }
285 else 287 else
286 { 288 {
287 character._velocity.Z = (character.Position.Z - oldposZ) / timeStep; 289 character._velocity.Z = (character.Position.Z - oldposZ)/timeStep;
288 } 290 }
289 } 291 }
290 return fps; 292 return fps;
@@ -326,31 +328,37 @@ namespace OpenSim.Region.Physics.POSPlugin
326 _position = new PhysicsVector(); 328 _position = new PhysicsVector();
327 _acceleration = new PhysicsVector(); 329 _acceleration = new PhysicsVector();
328 } 330 }
331
329 public override int PhysicsActorType 332 public override int PhysicsActorType
330 { 333 {
331 get { return (int)ActorTypes.Agent; } 334 get { return (int) ActorTypes.Agent; }
332 set { return; } 335 set { return; }
333 } 336 }
337
334 public override PhysicsVector RotationalVelocity 338 public override PhysicsVector RotationalVelocity
335 { 339 {
336 get { return m_rotationalVelocity; } 340 get { return m_rotationalVelocity; }
337 set { m_rotationalVelocity = value; } 341 set { m_rotationalVelocity = value; }
338 } 342 }
343
339 public override bool SetAlwaysRun 344 public override bool SetAlwaysRun
340 { 345 {
341 get { return false; } 346 get { return false; }
342 set { return; } 347 set { return; }
343 } 348 }
349
344 public override bool IsPhysical 350 public override bool IsPhysical
345 { 351 {
346 get { return false; } 352 get { return false; }
347 set { return; } 353 set { return; }
348 } 354 }
355
349 public override bool ThrottleUpdates 356 public override bool ThrottleUpdates
350 { 357 {
351 get { return false; } 358 get { return false; }
352 set { return; } 359 set { return; }
353 } 360 }
361
354 public override bool Flying 362 public override bool Flying
355 { 363 {
356 get { return flying; } 364 get { return flying; }
@@ -362,16 +370,19 @@ namespace OpenSim.Region.Physics.POSPlugin
362 get { return iscolliding; } 370 get { return iscolliding; }
363 set { iscolliding = value; } 371 set { iscolliding = value; }
364 } 372 }
373
365 public override bool CollidingGround 374 public override bool CollidingGround
366 { 375 {
367 get { return false; } 376 get { return false; }
368 set { return; } 377 set { return; }
369 } 378 }
379
370 public override bool CollidingObj 380 public override bool CollidingObj
371 { 381 {
372 get { return false; } 382 get { return false; }
373 set { return; } 383 set { return; }
374 } 384 }
385
375 public override PhysicsVector Position 386 public override PhysicsVector Position
376 { 387 {
377 get { return _position; } 388 get { return _position; }
@@ -383,18 +394,22 @@ namespace OpenSim.Region.Physics.POSPlugin
383 get { return new PhysicsVector(0.5f, 0.5f, 1.0f); } 394 get { return new PhysicsVector(0.5f, 0.5f, 1.0f); }
384 set { } 395 set { }
385 } 396 }
397
386 public override float Mass 398 public override float Mass
387 { 399 {
388 get { return 0f; } 400 get { return 0f; }
389 } 401 }
402
390 public override PhysicsVector Force 403 public override PhysicsVector Force
391 { 404 {
392 get { return PhysicsVector.Zero; } 405 get { return PhysicsVector.Zero; }
393 } 406 }
407
394 public override PhysicsVector CenterOfMass 408 public override PhysicsVector CenterOfMass
395 { 409 {
396 get { return PhysicsVector.Zero; } 410 get { return PhysicsVector.Zero; }
397 } 411 }
412
398 public override PhysicsVector GeometricCenter 413 public override PhysicsVector GeometricCenter
399 { 414 {
400 get { return PhysicsVector.Zero; } 415 get { return PhysicsVector.Zero; }
@@ -402,10 +417,7 @@ namespace OpenSim.Region.Physics.POSPlugin
402 417
403 public override PrimitiveBaseShape Shape 418 public override PrimitiveBaseShape Shape
404 { 419 {
405 set 420 set { return; }
406 {
407 return;
408 }
409 } 421 }
410 422
411 public override PhysicsVector Velocity 423 public override PhysicsVector Velocity
@@ -461,41 +473,49 @@ namespace OpenSim.Region.Physics.POSPlugin
461 _position = new PhysicsVector(); 473 _position = new PhysicsVector();
462 _acceleration = new PhysicsVector(); 474 _acceleration = new PhysicsVector();
463 } 475 }
476
464 public override int PhysicsActorType 477 public override int PhysicsActorType
465 { 478 {
466 get { return (int)ActorTypes.Prim; } 479 get { return (int) ActorTypes.Prim; }
467 set { return; } 480 set { return; }
468 } 481 }
482
469 public override PhysicsVector RotationalVelocity 483 public override PhysicsVector RotationalVelocity
470 { 484 {
471 get { return m_rotationalVelocity; } 485 get { return m_rotationalVelocity; }
472 set { m_rotationalVelocity = value; } 486 set { m_rotationalVelocity = value; }
473 } 487 }
488
474 public override bool IsPhysical 489 public override bool IsPhysical
475 { 490 {
476 get { return false; } 491 get { return false; }
477 set { return; } 492 set { return; }
478 } 493 }
494
479 public override bool ThrottleUpdates 495 public override bool ThrottleUpdates
480 { 496 {
481 get { return false; } 497 get { return false; }
482 set { return; } 498 set { return; }
483 } 499 }
500
484 public override bool IsColliding 501 public override bool IsColliding
485 { 502 {
486 get { return iscolliding; } 503 get { return iscolliding; }
487 set { iscolliding = value; } 504 set { iscolliding = value; }
488 } 505 }
506
489 public override bool CollidingGround 507 public override bool CollidingGround
490 { 508 {
491 get { return false; } 509 get { return false; }
492 set { return; } 510 set { return; }
493 } 511 }
512
494 public override bool CollidingObj 513 public override bool CollidingObj
495 { 514 {
496 get { return false; } 515 get { return false; }
497 set { return; } 516 set { return; }
498 } 517 }
518
499 public override PhysicsVector Position 519 public override PhysicsVector Position
500 { 520 {
501 get { return _position; } 521 get { return _position; }
@@ -530,10 +550,7 @@ namespace OpenSim.Region.Physics.POSPlugin
530 550
531 public override PrimitiveBaseShape Shape 551 public override PrimitiveBaseShape Shape
532 { 552 {
533 set 553 set { return; }
534 {
535 return;
536 }
537 } 554 }
538 555
539 public override PhysicsVector Velocity 556 public override PhysicsVector Velocity
@@ -571,6 +588,7 @@ namespace OpenSim.Region.Physics.POSPlugin
571 public override void SetMomentum(PhysicsVector momentum) 588 public override void SetMomentum(PhysicsVector momentum)
572 { 589 {
573 } 590 }
591
574 public override bool Flying 592 public override bool Flying
575 { 593 {
576 get { return false; } 594 get { return false; }
@@ -583,4 +601,4 @@ namespace OpenSim.Region.Physics.POSPlugin
583 set { return; } 601 set { return; }
584 } 602 }
585 } 603 }
586} 604} \ No newline at end of file