aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region
diff options
context:
space:
mode:
authorDahlia Trimble2008-07-24 07:45:58 +0000
committerDahlia Trimble2008-07-24 07:45:58 +0000
commitf74a9bcdc7b0682c1c205e9d640fbfa5f214840b (patch)
tree6d30a6964db7d79771a4ec7b655077b813f983b3 /OpenSim/Region
parentRefactor some tests. (diff)
downloadopensim-SC-f74a9bcdc7b0682c1c205e9d640fbfa5f214840b.zip
opensim-SC-f74a9bcdc7b0682c1c205e9d640fbfa5f214840b.tar.gz
opensim-SC-f74a9bcdc7b0682c1c205e9d640fbfa5f214840b.tar.bz2
opensim-SC-f74a9bcdc7b0682c1c205e9d640fbfa5f214840b.tar.xz
Implements llSetForce() and llGetForce(). These are experimental and the units may not match the Linden implementation.
Diffstat (limited to 'OpenSim/Region')
-rw-r--r--OpenSim/Region/Environment/Scenes/SceneObjectPart.cs16
-rw-r--r--OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs1
-rw-r--r--OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs1
-rw-r--r--OpenSim/Region/Physics/Manager/PhysicsActor.cs3
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODECharacter.cs1
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs10
-rw-r--r--OpenSim/Region/Physics/POSPlugin/POSCharacter.cs1
-rw-r--r--OpenSim/Region/Physics/POSPlugin/POSPrim.cs1
-rw-r--r--OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs2
-rw-r--r--OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs33
-rw-r--r--OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs33
11 files changed, 92 insertions, 10 deletions
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
index f0b1686..a9709b1 100644
--- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs
@@ -1374,6 +1374,14 @@ namespace OpenSim.Region.Environment.Scenes
1374 } 1374 }
1375 } 1375 }
1376 1376
1377 public PhysicsVector GetForce()
1378 {
1379 if (PhysActor != null)
1380 return PhysActor.Force;
1381 else
1382 return new PhysicsVector();
1383 }
1384
1377 [SecurityPermission(SecurityAction.LinkDemand, 1385 [SecurityPermission(SecurityAction.LinkDemand,
1378 Flags = SecurityPermissionFlag.SerializationFormatter)] 1386 Flags = SecurityPermissionFlag.SerializationFormatter)]
1379 public virtual void GetObjectData( 1387 public virtual void GetObjectData(
@@ -2296,6 +2304,14 @@ namespace OpenSim.Region.Environment.Scenes
2296 } 2304 }
2297 } 2305 }
2298 2306
2307 public void SetForce(PhysicsVector force)
2308 {
2309 if (PhysActor != null)
2310 {
2311 PhysActor.Force = force;
2312 }
2313 }
2314
2299 public void SetGroup(LLUUID groupID, IClientAPI client) 2315 public void SetGroup(LLUUID groupID, IClientAPI client)
2300 { 2316 {
2301 _groupID = groupID; 2317 _groupID = groupID;
diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
index ee30e54..213f1d4 100644
--- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
+++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs
@@ -332,6 +332,7 @@ namespace OpenSim.Region.Physics.BasicPhysicsPlugin
332 public override PhysicsVector Force 332 public override PhysicsVector Force
333 { 333 {
334 get { return PhysicsVector.Zero; } 334 get { return PhysicsVector.Zero; }
335 set { return; }
335 } 336 }
336 337
337 public override PhysicsVector CenterOfMass 338 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
index 5ef196f..cc55f6e 100644
--- a/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
+++ b/OpenSim/Region/Physics/BulletXPlugin/BulletXPlugin.cs
@@ -943,6 +943,7 @@ namespace OpenSim.Region.Physics.BulletXPlugin
943 public override PhysicsVector Force 943 public override PhysicsVector Force
944 { 944 {
945 get { return PhysicsVector.Zero; } 945 get { return PhysicsVector.Zero; }
946 set { return; }
946 } 947 }
947 948
948 public override PhysicsVector CenterOfMass 949 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
index 22e21a5..beca4da 100644
--- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs
+++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs
@@ -173,7 +173,7 @@ namespace OpenSim.Region.Physics.Manager
173 173
174 public abstract PhysicsVector Position { get; set; } 174 public abstract PhysicsVector Position { get; set; }
175 public abstract float Mass { get; } 175 public abstract float Mass { get; }
176 public abstract PhysicsVector Force { get; } 176 public abstract PhysicsVector Force { get; set; }
177 public abstract PhysicsVector GeometricCenter { get; } 177 public abstract PhysicsVector GeometricCenter { get; }
178 public abstract PhysicsVector CenterOfMass { get; } 178 public abstract PhysicsVector CenterOfMass { get; }
179 public abstract PhysicsVector Velocity { get; set; } 179 public abstract PhysicsVector Velocity { get; set; }
@@ -277,6 +277,7 @@ namespace OpenSim.Region.Physics.Manager
277 public override PhysicsVector Force 277 public override PhysicsVector Force
278 { 278 {
279 get { return PhysicsVector.Zero; } 279 get { return PhysicsVector.Zero; }
280 set { return; }
280 } 281 }
281 282
282 public override PhysicsVector CenterOfMass 283 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
index 7f08cb4..5d3e986 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODECharacter.cs
@@ -534,6 +534,7 @@ namespace OpenSim.Region.Physics.OdePlugin
534 public override PhysicsVector Force 534 public override PhysicsVector Force
535 { 535 {
536 get { return new PhysicsVector(_target_velocity.X, _target_velocity.Y, _target_velocity.Z); } 536 get { return new PhysicsVector(_target_velocity.X, _target_velocity.Y, _target_velocity.Z); }
537 set { return; }
537 } 538 }
538 539
539 public override PhysicsVector CenterOfMass 540 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 59655d7..a4c0d79 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -103,6 +103,7 @@ namespace OpenSim.Region.Physics.OdePlugin
103 private CollisionLocker ode; 103 private CollisionLocker ode;
104 104
105 private bool m_taintforce = false; 105 private bool m_taintforce = false;
106 private PhysicsVector m_force = new PhysicsVector(0.0f, 0.0f, 0.0f);
106 private List<PhysicsVector> m_forcelist = new List<PhysicsVector>(); 107 private List<PhysicsVector> m_forcelist = new List<PhysicsVector>();
107 108
108 private IMesh _mesh; 109 private IMesh _mesh;
@@ -749,7 +750,7 @@ namespace OpenSim.Region.Physics.OdePlugin
749 changeshape(timestep); 750 changeshape(timestep);
750 // 751 //
751 752
752 if (m_taintforce) 753 if (m_taintforce || m_force != new PhysicsVector(0.0f, 0.0f, 0.0f))
753 changeAddForce(timestep); 754 changeAddForce(timestep);
754 755
755 if (m_taintdisable) 756 if (m_taintdisable)
@@ -1751,7 +1752,8 @@ namespace OpenSim.Region.Physics.OdePlugin
1751 //m_log.Info("[PHYSICS]: dequeing forcelist"); 1752 //m_log.Info("[PHYSICS]: dequeing forcelist");
1752 if (IsPhysical) 1753 if (IsPhysical)
1753 { 1754 {
1754 PhysicsVector iforce = new PhysicsVector(); 1755 //PhysicsVector iforce = new PhysicsVector();
1756 PhysicsVector iforce = m_force * 100.0f;
1755 for (int i = 0; i < m_forcelist.Count; i++) 1757 for (int i = 0; i < m_forcelist.Count; i++)
1756 { 1758 {
1757 iforce = iforce + (m_forcelist[i] * 100); 1759 iforce = iforce + (m_forcelist[i] * 100);
@@ -1856,7 +1858,9 @@ namespace OpenSim.Region.Physics.OdePlugin
1856 1858
1857 public override PhysicsVector Force 1859 public override PhysicsVector Force
1858 { 1860 {
1859 get { return PhysicsVector.Zero; } 1861 //get { return PhysicsVector.Zero; }
1862 get { return m_force; }
1863 set { m_force = value; }
1860 } 1864 }
1861 1865
1862 public override PhysicsVector CenterOfMass 1866 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs
index d146b60..c674d15 100644
--- a/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs
+++ b/OpenSim/Region/Physics/POSPlugin/POSCharacter.cs
@@ -156,6 +156,7 @@ namespace OpenSim.Region.Physics.POSPlugin
156 public override PhysicsVector Force 156 public override PhysicsVector Force
157 { 157 {
158 get { return PhysicsVector.Zero; } 158 get { return PhysicsVector.Zero; }
159 set { return; }
159 } 160 }
160 161
161 public override PhysicsVector CenterOfMass 162 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs
index c767917..fed67dd 100644
--- a/OpenSim/Region/Physics/POSPlugin/POSPrim.cs
+++ b/OpenSim/Region/Physics/POSPlugin/POSPrim.cs
@@ -118,6 +118,7 @@ namespace OpenSim.Region.Physics.POSPlugin
118 public override PhysicsVector Force 118 public override PhysicsVector Force
119 { 119 {
120 get { return PhysicsVector.Zero; } 120 get { return PhysicsVector.Zero; }
121 set { return; }
121 } 122 }
122 123
123 public override PhysicsVector CenterOfMass 124 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
index c9e1e30..197da0a 100644
--- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
+++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs
@@ -340,6 +340,7 @@ namespace OpenSim.Region.Physics.PhysXPlugin
340 public override PhysicsVector Force 340 public override PhysicsVector Force
341 { 341 {
342 get { return PhysicsVector.Zero; } 342 get { return PhysicsVector.Zero; }
343 set { return; }
343 } 344 }
344 345
345 public override PhysicsVector CenterOfMass 346 public override PhysicsVector CenterOfMass
@@ -669,6 +670,7 @@ namespace OpenSim.Region.Physics.PhysXPlugin
669 public override PhysicsVector Force 670 public override PhysicsVector Force
670 { 671 {
671 get { return PhysicsVector.Zero; } 672 get { return PhysicsVector.Zero; }
673 set { return; }
672 } 674 }
673 675
674 public override PhysicsVector CenterOfMass 676 public override PhysicsVector CenterOfMass
diff --git a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
index 2d5be27..1a60f45 100644
--- a/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
+++ b/OpenSim/Region/ScriptEngine/Common/LSL_BuiltIn_Commands.cs
@@ -42,6 +42,7 @@ using OpenSim.Region.Environment.Interfaces;
42using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; 42using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
43using OpenSim.Region.Environment.Modules.World.Land; 43using OpenSim.Region.Environment.Modules.World.Land;
44using OpenSim.Region.Environment.Scenes; 44using OpenSim.Region.Environment.Scenes;
45using OpenSim.Region.Physics.Manager;
45using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase; 46using OpenSim.Region.ScriptEngine.Common.ScriptEngineBase;
46 47
47//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL; 48//using OpenSim.Region.ScriptEngine.DotNetEngine.Compiler.LSL;
@@ -1578,14 +1579,40 @@ namespace OpenSim.Region.ScriptEngine.Common
1578 public void llSetForce(LSL_Types.Vector3 force, int local) 1579 public void llSetForce(LSL_Types.Vector3 force, int local)
1579 { 1580 {
1580 m_host.AddScriptLPS(1); 1581 m_host.AddScriptLPS(1);
1581 NotImplemented("llSetForce"); 1582 //NotImplemented("llSetForce");
1583
1584 if (m_host.ParentGroup != null)
1585 {
1586 if (m_host.ParentGroup.RootPart != null)
1587 {
1588 if (local != 0)
1589 force *= llGetRot();
1590
1591 m_host.ParentGroup.RootPart.SetForce(new PhysicsVector((float)force.x, (float)force.y, (float)force.z));
1592 }
1593 }
1582 } 1594 }
1583 1595
1584 public LSL_Types.Vector3 llGetForce() 1596 public LSL_Types.Vector3 llGetForce()
1585 { 1597 {
1598 LSL_Types.Vector3 force = new LSL_Types.Vector3(0.0, 0.0, 0.0);
1599
1586 m_host.AddScriptLPS(1); 1600 m_host.AddScriptLPS(1);
1587 NotImplemented("llGetForce"); 1601 //NotImplemented("llGetForce");
1588 return new LSL_Types.Vector3(); 1602 //return new LSL_Types.Vector3();
1603
1604 if (m_host.ParentGroup != null)
1605 {
1606 if (m_host.ParentGroup.RootPart != null)
1607 {
1608 PhysicsVector tmpForce = m_host.ParentGroup.RootPart.GetForce();
1609 force.x = tmpForce.X;
1610 force.y = tmpForce.Y;
1611 force.z = tmpForce.Z;
1612 }
1613 }
1614
1615 return force;
1589 } 1616 }
1590 1617
1591 public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range) 1618 public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range)
diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
index 9832cfc..ed320f8 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/LSL_Api.cs
@@ -43,6 +43,7 @@ using OpenSim.Region.Environment.Interfaces;
43using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney; 43using OpenSim.Region.Environment.Modules.Avatar.Currency.SampleMoney;
44using OpenSim.Region.Environment.Modules.World.Land; 44using OpenSim.Region.Environment.Modules.World.Land;
45using OpenSim.Region.Environment.Scenes; 45using OpenSim.Region.Environment.Scenes;
46using OpenSim.Region.Physics.Manager;
46using OpenSim.Region.ScriptEngine.Shared; 47using OpenSim.Region.ScriptEngine.Shared;
47using OpenSim.Region.ScriptEngine.Shared.Api.Plugins; 48using OpenSim.Region.ScriptEngine.Shared.Api.Plugins;
48using OpenSim.Region.ScriptEngine.Shared.ScriptBase; 49using OpenSim.Region.ScriptEngine.Shared.ScriptBase;
@@ -1430,14 +1431,40 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
1430 public void llSetForce(LSL_Types.Vector3 force, int local) 1431 public void llSetForce(LSL_Types.Vector3 force, int local)
1431 { 1432 {
1432 m_host.AddScriptLPS(1); 1433 m_host.AddScriptLPS(1);
1433 NotImplemented("llSetForce"); 1434 //NotImplemented("llSetForce");
1435
1436 if (m_host.ParentGroup != null)
1437 {
1438 if (m_host.ParentGroup.RootPart != null)
1439 {
1440 if (local != 0)
1441 force *= llGetRot();
1442
1443 m_host.ParentGroup.RootPart.SetForce(new PhysicsVector((float)force.x, (float)force.y, (float)force.z));
1444 }
1445 }
1434 } 1446 }
1435 1447
1436 public LSL_Types.Vector3 llGetForce() 1448 public LSL_Types.Vector3 llGetForce()
1437 { 1449 {
1450 LSL_Types.Vector3 force = new LSL_Types.Vector3(0.0, 0.0, 0.0);
1451
1438 m_host.AddScriptLPS(1); 1452 m_host.AddScriptLPS(1);
1439 NotImplemented("llGetForce"); 1453 //NotImplemented("llGetForce");
1440 return new LSL_Types.Vector3(); 1454 //return new LSL_Types.Vector3();
1455
1456 if (m_host.ParentGroup != null)
1457 {
1458 if (m_host.ParentGroup.RootPart != null)
1459 {
1460 PhysicsVector tmpForce = m_host.ParentGroup.RootPart.GetForce();
1461 force.x = tmpForce.X;
1462 force.y = tmpForce.Y;
1463 force.z = tmpForce.Z;
1464 }
1465 }
1466
1467 return force;
1441 } 1468 }
1442 1469
1443 public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range) 1470 public LSL_Types.LSLInteger llTarget(LSL_Types.Vector3 position, double range)