aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
authorJohn Hurliman2010-03-12 14:28:31 -0800
committerJohn Hurliman2010-03-12 14:28:31 -0800
commit3036aba875187923b4e4d8481d46334e53393107 (patch)
tree4aa2b5ba3687873e0be69cee84a0652c9f2dd136 /OpenSim
parentFixing the previous patch to work correctly with standalone mode (diff)
downloadopensim-SC_OLD-3036aba875187923b4e4d8481d46334e53393107.zip
opensim-SC_OLD-3036aba875187923b4e4d8481d46334e53393107.tar.gz
opensim-SC_OLD-3036aba875187923b4e4d8481d46334e53393107.tar.bz2
opensim-SC_OLD-3036aba875187923b4e4d8481d46334e53393107.tar.xz
* Added a better check to the SimianGrid connectors to test if they are enabled or not. This method should work equally well with standalone or robust mode
* Applying #4602 from Misterblu to add collision detection to BulletDotNET
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs1
-rw-r--r--OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs33
-rw-r--r--OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs102
-rw-r--r--OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs99
-rw-r--r--OpenSim/Region/Physics/OdePlugin/ODEPrim.cs4
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs31
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs27
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs31
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs27
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs16
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs27
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs41
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs27
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs31
-rw-r--r--OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs29
15 files changed, 363 insertions, 163 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index 8967252..a2b98b9 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -2044,6 +2044,7 @@ namespace OpenSim.Region.Framework.Scenes
2044 { 2044 {
2045 m_lastColliders.Remove(localID); 2045 m_lastColliders.Remove(localID);
2046 } 2046 }
2047
2047 if (m_parentGroup == null) 2048 if (m_parentGroup == null)
2048 return; 2049 return;
2049 if (m_parentGroup.IsDeleted) 2050 if (m_parentGroup.IsDeleted)
diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs
index 6a54705..ac4e2b9 100644
--- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs
+++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETCharacter.cs
@@ -108,12 +108,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
108 private bool[] m_colliderarr = new bool[11]; 108 private bool[] m_colliderarr = new bool[11];
109 private bool[] m_colliderGroundarr = new bool[11]; 109 private bool[] m_colliderGroundarr = new bool[11];
110 110
111
112
113 private BulletDotNETScene m_parent_scene; 111 private BulletDotNETScene m_parent_scene;
114 112
115 public int m_eventsubscription = 0; 113 public int m_eventsubscription = 0;
116 // private CollisionEventUpdate CollisionEventsThisFrame = new CollisionEventUpdate(); 114 private CollisionEventUpdate CollisionEventsThisFrame = null;
115 private int m_requestedUpdateFrequency = 0;
117 116
118 public BulletDotNETCharacter(string avName, BulletDotNETScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p, float capsule_radius, float tensor, float density, float height_fudge_factor, float walk_divisor, float rundivisor) 117 public BulletDotNETCharacter(string avName, BulletDotNETScene parent_scene, Vector3 pos, Vector3 size, float pid_d, float pid_p, float capsule_radius, float tensor, float density, float height_fudge_factor, float walk_divisor, float rundivisor)
119 { 118 {
@@ -212,7 +211,8 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
212 m_mass = Mass; 211 m_mass = Mass;
213 212
214 Body = new btRigidBody(m_mass, m_bodyMotionState, Shell); 213 Body = new btRigidBody(m_mass, m_bodyMotionState, Shell);
215 Body.setUserPointer(new IntPtr((int)Body.Handle)); 214 // this is used for self identification. User localID instead of body handle
215 Body.setUserPointer(new IntPtr((int)m_localID));
216 216
217 if (ClosestCastResult != null) 217 if (ClosestCastResult != null)
218 ClosestCastResult.Dispose(); 218 ClosestCastResult.Dispose();
@@ -717,6 +717,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
717 public override void SubscribeEvents(int ms) 717 public override void SubscribeEvents(int ms)
718 { 718 {
719 m_eventsubscription = ms; 719 m_eventsubscription = ms;
720 m_requestedUpdateFrequency = ms;
720 m_parent_scene.addCollisionEventReporting(this); 721 m_parent_scene.addCollisionEventReporting(this);
721 } 722 }
722 723
@@ -724,6 +725,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
724 { 725 {
725 m_parent_scene.remCollisionEventReporting(this); 726 m_parent_scene.remCollisionEventReporting(this);
726 m_eventsubscription = 0; 727 m_eventsubscription = 0;
728 m_requestedUpdateFrequency = 0;
727 } 729 }
728 730
729 public override bool SubscribedEvents() 731 public override bool SubscribedEvents()
@@ -733,6 +735,29 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
733 return false; 735 return false;
734 } 736 }
735 737
738 public void AddCollision(uint collideWith, ContactPoint contact)
739 {
740 if (CollisionEventsThisFrame == null)
741 {
742 CollisionEventsThisFrame = new CollisionEventUpdate();
743 }
744 CollisionEventsThisFrame.addCollider(collideWith, contact);
745 }
746
747 public void SendCollisions()
748 {
749 if (m_eventsubscription >= m_requestedUpdateFrequency)
750 {
751 if (CollisionEventsThisFrame != null)
752 {
753 base.SendCollisionUpdate(CollisionEventsThisFrame);
754 }
755 CollisionEventsThisFrame = new CollisionEventUpdate();
756 m_eventsubscription = 0;
757 }
758 return;
759 }
760
736 internal void Dispose() 761 internal void Dispose()
737 { 762 {
738 if (Body.isInWorld()) 763 if (Body.isInWorld())
diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs
index 920ed96..dc3229a 100644
--- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs
+++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETPrim.cs
@@ -154,7 +154,8 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
154 private Vector3 _target_velocity; 154 private Vector3 _target_velocity;
155 155
156 public int m_eventsubscription; 156 public int m_eventsubscription;
157 // private CollisionEventUpdate CollisionEventsThisFrame = null; 157 private int m_requestedUpdateFrequency = 0;
158 private CollisionEventUpdate CollisionEventsThisFrame = null;
158 159
159 public volatile bool childPrim; 160 public volatile bool childPrim;
160 161
@@ -595,6 +596,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
595 public override void SubscribeEvents(int ms) 596 public override void SubscribeEvents(int ms)
596 { 597 {
597 m_eventsubscription = ms; 598 m_eventsubscription = ms;
599 m_requestedUpdateFrequency = ms;
598 _parent_scene.addCollisionEventReporting(this); 600 _parent_scene.addCollisionEventReporting(this);
599 } 601 }
600 602
@@ -602,6 +604,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
602 { 604 {
603 _parent_scene.remCollisionEventReporting(this); 605 _parent_scene.remCollisionEventReporting(this);
604 m_eventsubscription = 0; 606 m_eventsubscription = 0;
607 m_requestedUpdateFrequency = 0;
605 } 608 }
606 609
607 public override bool SubscribedEvents() 610 public override bool SubscribedEvents()
@@ -611,7 +614,28 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
611 614
612 #endregion 615 #endregion
613 616
617 public void AddCollision(uint collideWith, ContactPoint contact)
618 {
619 if (CollisionEventsThisFrame == null)
620 {
621 CollisionEventsThisFrame = new CollisionEventUpdate();
622 }
623 CollisionEventsThisFrame.addCollider(collideWith, contact);
624 }
614 625
626 public void SendCollisions()
627 {
628 if (m_eventsubscription >= m_requestedUpdateFrequency)
629 {
630 if (CollisionEventsThisFrame != null)
631 {
632 base.SendCollisionUpdate(CollisionEventsThisFrame);
633 }
634 CollisionEventsThisFrame = null;
635 // m_eventsubscription = 0;
636 }
637 return;
638 }
615 639
616 internal void Dispose() 640 internal void Dispose()
617 { 641 {
@@ -759,7 +783,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
759 { 783 {
760 if (m_taintadd) 784 if (m_taintadd)
761 { 785 {
762 m_log.Debug("[PHYSICS]: TaintAdd"); 786 // m_log.Debug("[PHYSICS]: TaintAdd");
763 changeadd(timestep); 787 changeadd(timestep);
764 } 788 }
765 789
@@ -771,7 +795,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
771 SetBody(Mass); 795 SetBody(Mass);
772 else 796 else
773 SetBody(0); 797 SetBody(0);
774 m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT"); 798 // m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT");
775 } 799 }
776 800
777 if (prim_geom.Handle == IntPtr.Zero) 801 if (prim_geom.Handle == IntPtr.Zero)
@@ -782,31 +806,31 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
782 SetBody(Mass); 806 SetBody(Mass);
783 else 807 else
784 SetBody(0); 808 SetBody(0);
785 m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT"); 809 // m_log.Debug("[PHYSICS]: GEOM_DOESNT_EXSIT");
786 810
787 } 811 }
788 812
789 if (!_position.ApproxEquals(m_taintposition, 0f)) 813 if (!_position.ApproxEquals(m_taintposition, 0f))
790 { 814 {
791 m_log.Debug("[PHYSICS]: TaintMove"); 815 // m_log.Debug("[PHYSICS]: TaintMove");
792 changemove(timestep); 816 changemove(timestep);
793 } 817 }
794 if (m_taintrot != _orientation) 818 if (m_taintrot != _orientation)
795 { 819 {
796 m_log.Debug("[PHYSICS]: TaintRotate"); 820 // m_log.Debug("[PHYSICS]: TaintRotate");
797 rotate(timestep); 821 rotate(timestep);
798 } // 822 } //
799 823
800 if (m_taintPhysics != m_isphysical && !(m_taintparent != _parent)) 824 if (m_taintPhysics != m_isphysical && !(m_taintparent != _parent))
801 { 825 {
802 m_log.Debug("[PHYSICS]: TaintPhysics"); 826 // m_log.Debug("[PHYSICS]: TaintPhysics");
803 changePhysicsStatus(timestep); 827 changePhysicsStatus(timestep);
804 } 828 }
805 // 829 //
806 830
807 if (!_size.ApproxEquals(m_taintsize, 0f)) 831 if (!_size.ApproxEquals(m_taintsize, 0f))
808 { 832 {
809 m_log.Debug("[PHYSICS]: TaintSize"); 833 // m_log.Debug("[PHYSICS]: TaintSize");
810 changesize(timestep); 834 changesize(timestep);
811 } 835 }
812 836
@@ -814,43 +838,43 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
814 838
815 if (m_taintshape) 839 if (m_taintshape)
816 { 840 {
817 m_log.Debug("[PHYSICS]: TaintShape"); 841 // m_log.Debug("[PHYSICS]: TaintShape");
818 changeshape(timestep); 842 changeshape(timestep);
819 } // 843 } //
820 844
821 if (m_taintforce) 845 if (m_taintforce)
822 { 846 {
823 m_log.Debug("[PHYSICS]: TaintForce"); 847 // m_log.Debug("[PHYSICS]: TaintForce");
824 changeAddForce(timestep); 848 changeAddForce(timestep);
825 } 849 }
826 if (m_taintaddangularforce) 850 if (m_taintaddangularforce)
827 { 851 {
828 m_log.Debug("[PHYSICS]: TaintAngularForce"); 852 // m_log.Debug("[PHYSICS]: TaintAngularForce");
829 changeAddAngularForce(timestep); 853 changeAddAngularForce(timestep);
830 } 854 }
831 if (!m_taintTorque.ApproxEquals(Vector3.Zero, 0.001f)) 855 if (!m_taintTorque.ApproxEquals(Vector3.Zero, 0.001f))
832 { 856 {
833 m_log.Debug("[PHYSICS]: TaintTorque"); 857 // m_log.Debug("[PHYSICS]: TaintTorque");
834 changeSetTorque(timestep); 858 changeSetTorque(timestep);
835 } 859 }
836 if (m_taintdisable) 860 if (m_taintdisable)
837 { 861 {
838 m_log.Debug("[PHYSICS]: TaintDisable"); 862 // m_log.Debug("[PHYSICS]: TaintDisable");
839 changedisable(timestep); 863 changedisable(timestep);
840 } 864 }
841 if (m_taintselected != m_isSelected) 865 if (m_taintselected != m_isSelected)
842 { 866 {
843 m_log.Debug("[PHYSICS]: TaintSelected"); 867 // m_log.Debug("[PHYSICS]: TaintSelected");
844 changeSelectedStatus(timestep); 868 changeSelectedStatus(timestep);
845 } 869 }
846 if (!m_taintVelocity.ApproxEquals(Vector3.Zero, 0.001f)) 870 if (!m_taintVelocity.ApproxEquals(Vector3.Zero, 0.001f))
847 { 871 {
848 m_log.Debug("[PHYSICS]: TaintVelocity"); 872 // m_log.Debug("[PHYSICS]: TaintVelocity");
849 changevelocity(timestep); 873 changevelocity(timestep);
850 } 874 }
851 if (m_taintparent != _parent) 875 if (m_taintparent != _parent)
852 { 876 {
853 m_log.Debug("[PHYSICS]: TaintLink"); 877 // m_log.Debug("[PHYSICS]: TaintLink");
854 changelink(timestep); 878 changelink(timestep);
855 } 879 }
856 if (m_taintCollidesWater != m_collidesWater) 880 if (m_taintCollidesWater != m_collidesWater)
@@ -859,7 +883,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
859 } 883 }
860 if (!m_angularlock.ApproxEquals(m_taintAngularLock, 0)) 884 if (!m_angularlock.ApproxEquals(m_taintAngularLock, 0))
861 { 885 {
862 m_log.Debug("[PHYSICS]: TaintAngularLock"); 886 // m_log.Debug("[PHYSICS]: TaintAngularLock");
863 changeAngularLock(timestep); 887 changeAngularLock(timestep);
864 } 888 }
865 if (m_taintremove) 889 if (m_taintremove)
@@ -917,7 +941,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
917 private void changemove(float timestep) 941 private void changemove(float timestep)
918 { 942 {
919 943
920 m_log.Debug("[PHYSICS]: _________ChangeMove"); 944 // m_log.Debug("[PHYSICS]: _________ChangeMove");
921 if (!m_isphysical) 945 if (!m_isphysical)
922 { 946 {
923 tempTransform2 = Body.getWorldTransform(); 947 tempTransform2 = Body.getWorldTransform();
@@ -977,7 +1001,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
977 1001
978 private void rotate(float timestep) 1002 private void rotate(float timestep)
979 { 1003 {
980 m_log.Debug("[PHYSICS]: _________ChangeRotate"); 1004 // m_log.Debug("[PHYSICS]: _________ChangeRotate");
981 tempTransform2 = Body.getWorldTransform(); 1005 tempTransform2 = Body.getWorldTransform();
982 tempOrientation2 = new btQuaternion(_orientation.X, _orientation.Y, _orientation.Z, _orientation.W); 1006 tempOrientation2 = new btQuaternion(_orientation.X, _orientation.Y, _orientation.Z, _orientation.W);
983 tempTransform2.setRotation(tempOrientation2); 1007 tempTransform2.setRotation(tempOrientation2);
@@ -1000,7 +1024,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
1000 //Body = null; 1024 //Body = null;
1001 // TODO: dispose parts that make up body 1025 // TODO: dispose parts that make up body
1002 } 1026 }
1003 m_log.Debug("[PHYSICS]: _________ChangePhysics"); 1027 // m_log.Debug("[PHYSICS]: _________ChangePhysics");
1004 1028
1005 ProcessGeomCreation(); 1029 ProcessGeomCreation();
1006 1030
@@ -1092,7 +1116,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
1092 // TODO: dispose parts that make up body 1116 // TODO: dispose parts that make up body
1093 } 1117 }
1094 1118
1095 m_log.Debug("[PHYSICS]: _________ChangeSize"); 1119 // m_log.Debug("[PHYSICS]: _________ChangeSize");
1096 SetCollisionShape(null); 1120 SetCollisionShape(null);
1097 // Construction of new prim 1121 // Construction of new prim
1098 ProcessGeomCreation(); 1122 ProcessGeomCreation();
@@ -1297,13 +1321,13 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
1297 // TODO: throw new NotImplementedException(); 1321 // TODO: throw new NotImplementedException();
1298 if (m_taintselected) 1322 if (m_taintselected)
1299 { 1323 {
1300 Body.setCollisionFlags((int)ContactFlags.CF_NO_CONTACT_RESPONSE); 1324 // Body.setCollisionFlags((int)ContactFlags.CF_NO_CONTACT_RESPONSE);
1301 disableBodySoft(); 1325 disableBodySoft();
1302 1326
1303 } 1327 }
1304 else 1328 else
1305 { 1329 {
1306 Body.setCollisionFlags(0 | (int)ContactFlags.CF_CUSTOM_MATERIAL_CALLBACK); 1330 // Body.setCollisionFlags(0 | (int)ContactFlags.CF_CUSTOM_MATERIAL_CALLBACK);
1307 enableBodySoft(); 1331 enableBodySoft();
1308 } 1332 }
1309 m_isSelected = m_taintselected; 1333 m_isSelected = m_taintselected;
@@ -1605,6 +1629,11 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
1605 enableBodySoft(); 1629 enableBodySoft();
1606 } 1630 }
1607 */ 1631 */
1632 if (!Body.isActive())
1633 {
1634 Body.clearForces();
1635 enableBodySoft();
1636 }
1608 // 35x10 = 350n times the mass per second applied maximum. 1637 // 35x10 = 350n times the mass per second applied maximum.
1609 1638
1610 float nmax = 35f * m_mass; 1639 float nmax = 35f * m_mass;
@@ -1632,6 +1661,12 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
1632 Body.applyCentralImpulse(tempAddForce); 1661 Body.applyCentralImpulse(tempAddForce);
1633 } 1662 }
1634 } 1663 }
1664 else
1665 {
1666 // if no forces on the prim, make sure everything is zero
1667 Body.clearForces();
1668 enableBodySoft();
1669 }
1635 } 1670 }
1636 else 1671 else
1637 { 1672 {
@@ -1985,7 +2020,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
1985 2020
1986 public void CreateGeom(IntPtr m_targetSpace, IMesh p_mesh) 2021 public void CreateGeom(IntPtr m_targetSpace, IMesh p_mesh)
1987 { 2022 {
1988 m_log.Debug("[PHYSICS]: _________CreateGeom"); 2023 // m_log.Debug("[PHYSICS]: _________CreateGeom");
1989 if (p_mesh != null) 2024 if (p_mesh != null)
1990 { 2025 {
1991 //_mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical); 2026 //_mesh = _parent_scene.mesher.CreateMesh(m_primName, _pbs, _size, _parent_scene.meshSculptLOD, IsPhysical);
@@ -2042,7 +2077,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
2042 // TODO: Set Collision Body Mesh 2077 // TODO: Set Collision Body Mesh
2043 // This sleeper is there to moderate how long it takes between 2078 // This sleeper is there to moderate how long it takes between
2044 // setting up the mesh and pre-processing it when we get rapid fire mesh requests on a single object 2079 // setting up the mesh and pre-processing it when we get rapid fire mesh requests on a single object
2045 m_log.Debug("_________SetMesh"); 2080 // m_log.Debug("_________SetMesh");
2046 Thread.Sleep(10); 2081 Thread.Sleep(10);
2047 2082
2048 //Kill Body so that mesh can re-make the geom 2083 //Kill Body so that mesh can re-make the geom
@@ -2159,7 +2194,14 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
2159 2194
2160 // Body = new btRigidBody(mass, tempMotionState1, prim_geom); 2195 // Body = new btRigidBody(mass, tempMotionState1, prim_geom);
2161 //else 2196 //else
2162 Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); 2197 // Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1);
2198 if (Body == null)
2199 {
2200 Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1);
2201 // add localID so we can later map bullet object back to OpenSim object
2202 Body.setUserPointer(new IntPtr((int)m_localID));
2203 }
2204
2163 2205
2164 if (prim_geom is btGImpactMeshShape) 2206 if (prim_geom is btGImpactMeshShape)
2165 { 2207 {
@@ -2250,7 +2292,13 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
2250 2292
2251 // Body = new btRigidBody(mass, tempMotionState1, prim_geom); 2293 // Body = new btRigidBody(mass, tempMotionState1, prim_geom);
2252 //else 2294 //else
2253 Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1); 2295 // Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1);
2296 if (Body == null)
2297 {
2298 Body = new btRigidBody(mass, tempMotionState1, prim_geom, tempInertia1);
2299 // each body has the localID stored into it so we can identify collision objects
2300 Body.setUserPointer(new IntPtr((int)m_localID));
2301 }
2254 2302
2255 if (prim_geom is btGImpactMeshShape) 2303 if (prim_geom is btGImpactMeshShape)
2256 { 2304 {
diff --git a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs
index 9e048ab..85e34c1 100644
--- a/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs
+++ b/OpenSim/Region/Physics/BulletDotNETPlugin/BulletDotNETScene.cs
@@ -47,7 +47,9 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
47 // private string m_sceneIdentifier = string.Empty; 47 // private string m_sceneIdentifier = string.Empty;
48 48
49 private List<BulletDotNETCharacter> m_characters = new List<BulletDotNETCharacter>(); 49 private List<BulletDotNETCharacter> m_characters = new List<BulletDotNETCharacter>();
50 private Dictionary<uint, BulletDotNETCharacter> m_charactersLocalID = new Dictionary<uint, BulletDotNETCharacter>();
50 private List<BulletDotNETPrim> m_prims = new List<BulletDotNETPrim>(); 51 private List<BulletDotNETPrim> m_prims = new List<BulletDotNETPrim>();
52 private Dictionary<uint, BulletDotNETPrim> m_primsLocalID = new Dictionary<uint, BulletDotNETPrim>();
51 private List<BulletDotNETPrim> m_activePrims = new List<BulletDotNETPrim>(); 53 private List<BulletDotNETPrim> m_activePrims = new List<BulletDotNETPrim>();
52 private List<PhysicsActor> m_taintedActors = new List<PhysicsActor>(); 54 private List<PhysicsActor> m_taintedActors = new List<PhysicsActor>();
53 private btDiscreteDynamicsWorld m_world; 55 private btDiscreteDynamicsWorld m_world;
@@ -134,7 +136,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
134 m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration); 136 m_dispatcher = new btCollisionDispatcher(m_collisionConfiguration);
135 m_world = new btDiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_solver, m_collisionConfiguration); 137 m_world = new btDiscreteDynamicsWorld(m_dispatcher, m_broadphase, m_solver, m_collisionConfiguration);
136 m_world.setGravity(m_gravity); 138 m_world.setGravity(m_gravity);
137 //EnableCollisionInterface(); 139 EnableCollisionInterface();
138 140
139 141
140 } 142 }
@@ -145,7 +147,16 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
145 avCapRadius, avStandupTensor, avDensity, 147 avCapRadius, avStandupTensor, avDensity,
146 avHeightFudgeFactor, avMovementDivisorWalk, 148 avHeightFudgeFactor, avMovementDivisorWalk,
147 avMovementDivisorRun); 149 avMovementDivisorRun);
148 m_characters.Add(chr); 150 try
151 {
152 m_characters.Add(chr);
153 m_charactersLocalID.Add(chr.m_localID, chr);
154 }
155 catch
156 {
157 // noop if it's already there
158 m_log.Debug("[PHYSICS] BulletDotNet: adding duplicate avatar localID");
159 }
149 AddPhysicsActorTaint(chr); 160 AddPhysicsActorTaint(chr);
150 return chr; 161 return chr;
151 } 162 }
@@ -154,6 +165,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
154 { 165 {
155 BulletDotNETCharacter chr = (BulletDotNETCharacter) actor; 166 BulletDotNETCharacter chr = (BulletDotNETCharacter) actor;
156 167
168 m_charactersLocalID.Remove(chr.m_localID);
157 m_characters.Remove(chr); 169 m_characters.Remove(chr);
158 m_world.removeRigidBody(chr.Body); 170 m_world.removeRigidBody(chr.Body);
159 m_world.removeCollisionObject(chr.Body); 171 m_world.removeCollisionObject(chr.Body);
@@ -279,7 +291,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
279 prim.Move(timeStep); 291 prim.Move(timeStep);
280 } 292 }
281 } 293 }
282 float steps = m_world.stepSimulation(timeStep * 1000, 10, WorldTimeComp); 294 float steps = m_world.stepSimulation(timeStep, 10, WorldTimeComp);
283 295
284 foreach (BulletDotNETCharacter chr in m_characters) 296 foreach (BulletDotNETCharacter chr in m_characters)
285 { 297 {
@@ -296,20 +308,67 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
296 } 308 }
297 if (m_CollisionInterface != null) 309 if (m_CollisionInterface != null)
298 { 310 {
299 List<int> collisions = m_CollisionInterface.GetContactList(); 311 List<BulletDotNETPrim> primsWithCollisions = new List<BulletDotNETPrim>();
300 lock (collisions) 312 List<BulletDotNETCharacter> charactersWithCollisions = new List<BulletDotNETCharacter>();
313
314 // get the collisions that happened this tick
315 List<BulletDotNET.ContactAddedCallbackHandler.ContactInfo> collisions = m_CollisionInterface.GetContactList();
316 // passed back the localID of the prim so we can associate the prim
317 foreach (BulletDotNET.ContactAddedCallbackHandler.ContactInfo ci in collisions)
301 { 318 {
302 foreach (int pvalue in collisions) 319 // ContactPoint = { contactPoint, contactNormal, penetrationDepth }
303 { 320 ContactPoint contact = new ContactPoint(new Vector3(ci.pX, ci.pY, ci.pZ),
304 System.Console.Write(string.Format("{0} ", pvalue)); 321 new Vector3(ci.nX, ci.nY, ci.nZ), ci.depth);
305 } 322
323 ProcessContact(ci.contact, ci.contactWith, contact, ref primsWithCollisions, ref charactersWithCollisions);
324 ProcessContact(ci.contactWith, ci.contact, contact, ref primsWithCollisions, ref charactersWithCollisions);
325
306 } 326 }
307 m_CollisionInterface.Clear(); 327 m_CollisionInterface.Clear();
308 328 // for those prims and characters that had collisions cause collision events
329 foreach (BulletDotNETPrim bdnp in primsWithCollisions)
330 {
331 bdnp.SendCollisions();
332 }
333 foreach (BulletDotNETCharacter bdnc in charactersWithCollisions)
334 {
335 bdnc.SendCollisions();
336 }
309 } 337 }
310 return steps; 338 return steps;
311 } 339 }
312 340
341 private void ProcessContact(uint cont, uint contWith, ContactPoint contact,
342 ref List<BulletDotNETPrim> primsWithCollisions,
343 ref List<BulletDotNETCharacter> charactersWithCollisions)
344 {
345 BulletDotNETPrim bdnp;
346 // collisions with a normal prim?
347 if (m_primsLocalID.TryGetValue(cont, out bdnp))
348 {
349 // Added collision event to the prim. This creates a pile of events
350 // that will be sent to any subscribed listeners.
351 bdnp.AddCollision(contWith, contact);
352 if (!primsWithCollisions.Contains(bdnp))
353 {
354 primsWithCollisions.Add(bdnp);
355 }
356 }
357 else
358 {
359 BulletDotNETCharacter bdnc;
360 // if not a prim, maybe it's one of the characters
361 if (m_charactersLocalID.TryGetValue(cont, out bdnc))
362 {
363 bdnc.AddCollision(contWith, contact);
364 if (!charactersWithCollisions.Contains(bdnc))
365 {
366 charactersWithCollisions.Add(bdnc);
367 }
368 }
369 }
370 }
371
313 public override void GetResults() 372 public override void GetResults()
314 { 373 {
315 374
@@ -387,6 +446,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
387 m_terrainTransform = new btTransform(QuatIdentity, m_terrainPosition); 446 m_terrainTransform = new btTransform(QuatIdentity, m_terrainPosition);
388 m_terrainMotionState = new btDefaultMotionState(m_terrainTransform); 447 m_terrainMotionState = new btDefaultMotionState(m_terrainTransform);
389 TerrainBody = new btRigidBody(0, m_terrainMotionState, m_terrainShape); 448 TerrainBody = new btRigidBody(0, m_terrainMotionState, m_terrainShape);
449 TerrainBody.setUserPointer((IntPtr)0);
390 m_world.addRigidBody(TerrainBody); 450 m_world.addRigidBody(TerrainBody);
391 451
392 452
@@ -459,6 +519,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
459 { 519 {
460 lock (m_prims) 520 lock (m_prims)
461 { 521 {
522 m_primsLocalID.Clear();
462 foreach (BulletDotNETPrim prim in m_prims) 523 foreach (BulletDotNETPrim prim in m_prims)
463 { 524 {
464 if (prim.Body != null) 525 if (prim.Body != null)
@@ -513,6 +574,7 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
513 m_world.removeRigidBody(body); 574 m_world.removeRigidBody(body);
514 } 575 }
515 remActivePrim(prm); 576 remActivePrim(prm);
577 m_primsLocalID.Remove(prm.m_localID);
516 m_prims.Remove(prm); 578 m_prims.Remove(prm);
517 } 579 }
518 580
@@ -686,9 +748,18 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
686 { 748 {
687 if (!m_prims.Contains(pPrim)) 749 if (!m_prims.Contains(pPrim))
688 { 750 {
689 m_prims.Add(pPrim); 751 try
752 {
753 m_prims.Add(pPrim);
754 m_primsLocalID.Add(pPrim.m_localID, pPrim);
755 }
756 catch
757 {
758 // noop if it's already there
759 m_log.Debug("[PHYSICS] BulletDotNet: adding duplicate prim localID");
760 }
690 m_world.addRigidBody(pPrim.Body); 761 m_world.addRigidBody(pPrim.Body);
691 m_log.Debug("ADDED"); 762 // m_log.Debug("[PHYSICS] added prim to scene");
692 } 763 }
693 } 764 }
694 } 765 }
@@ -696,8 +767,8 @@ namespace OpenSim.Region.Physics.BulletDotNETPlugin
696 { 767 {
697 if (m_CollisionInterface == null) 768 if (m_CollisionInterface == null)
698 { 769 {
699 m_CollisionInterface = new ContactAddedCallbackHandler(); 770 m_CollisionInterface = new ContactAddedCallbackHandler(m_world);
700 m_world.SetCollisionAddedCallback(m_CollisionInterface); 771 // m_world.SetCollisionAddedCallback(m_CollisionInterface);
701 } 772 }
702 } 773 }
703 774
diff --git a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
index 03736d1..0720b5e 100644
--- a/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
+++ b/OpenSim/Region/Physics/OdePlugin/ODEPrim.cs
@@ -1575,11 +1575,11 @@ Console.WriteLine(" JointCreateFixed");
1575 { 1575 {
1576//Console.WriteLine("Move " + m_primName); 1576//Console.WriteLine("Move " + m_primName);
1577 if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009 1577 if (!d.BodyIsEnabled (Body)) d.BodyEnable (Body); // KF add 161009
1578 /*
1579 // NON-'VEHICLES' are dealt with here 1578 // NON-'VEHICLES' are dealt with here
1580 if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f)) 1579 if (d.BodyIsEnabled(Body) && !m_angularlock.ApproxEquals(Vector3.Zero, 0.003f))
1581 { 1580 {
1582 d.Vector3 avel2 = d.BodyGetAngularVel(Body); 1581 d.Vector3 avel2 = d.BodyGetAngularVel(Body);
1582 /*
1583 if (m_angularlock.X == 1) 1583 if (m_angularlock.X == 1)
1584 avel2.X = 0; 1584 avel2.X = 0;
1585 if (m_angularlock.Y == 1) 1585 if (m_angularlock.Y == 1)
@@ -1587,8 +1587,8 @@ Console.WriteLine(" JointCreateFixed");
1587 if (m_angularlock.Z == 1) 1587 if (m_angularlock.Z == 1)
1588 avel2.Z = 0; 1588 avel2.Z = 0;
1589 d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z); 1589 d.BodySetAngularVel(Body, avel2.X, avel2.Y, avel2.Z);
1590 */
1590 } 1591 }
1591 */
1592 //float PID_P = 900.0f; 1592 //float PID_P = 900.0f;
1593 1593
1594 float m_mass = CalculateMass(); 1594 float m_mass = CalculateMass();
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
index 3f00534..7cb075e 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAssetServiceConnector.cs
@@ -85,24 +85,27 @@ namespace OpenSim.Services.Connectors.SimianGrid
85 85
86 public void Initialise(IConfigSource source) 86 public void Initialise(IConfigSource source)
87 { 87 {
88 IConfig gridConfig = source.Configs["AssetService"]; 88 if (Simian.IsSimianEnabled(source, "AssetServices"))
89 if (gridConfig == null)
90 { 89 {
91 m_log.Error("[ASSET CONNECTOR]: AssetService missing from OpenSim.ini"); 90 IConfig gridConfig = source.Configs["AssetService"];
92 throw new Exception("Asset connector init error"); 91 if (gridConfig == null)
93 } 92 {
93 m_log.Error("[ASSET CONNECTOR]: AssetService missing from OpenSim.ini");
94 throw new Exception("Asset connector init error");
95 }
94 96
95 string serviceUrl = gridConfig.GetString("AssetServerURI"); 97 string serviceUrl = gridConfig.GetString("AssetServerURI");
96 if (String.IsNullOrEmpty(serviceUrl)) 98 if (String.IsNullOrEmpty(serviceUrl))
97 { 99 {
98 m_log.Info("[ASSET CONNECTOR]: No AssetServerURI in section AssetService, skipping SimianAssetServiceConnector"); 100 m_log.Error("[ASSET CONNECTOR]: No AssetServerURI in section AssetService");
99 return; 101 throw new Exception("Asset connector init error");
100 } 102 }
101 103
102 if (!serviceUrl.EndsWith("/")) 104 if (!serviceUrl.EndsWith("/"))
103 serviceUrl = serviceUrl + '/'; 105 serviceUrl = serviceUrl + '/';
104 106
105 m_serverUrl = serviceUrl; 107 m_serverUrl = serviceUrl;
108 }
106 } 109 }
107 110
108 #region IAssetService 111 #region IAssetService
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs
index 0876efb..6317b87 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAuthenticationServiceConnector.cs
@@ -73,21 +73,24 @@ namespace OpenSim.Services.Connectors.SimianGrid
73 73
74 public void Initialise(IConfigSource source) 74 public void Initialise(IConfigSource source)
75 { 75 {
76 IConfig assetConfig = source.Configs["AuthenticationService"]; 76 if (Simian.IsSimianEnabled(source, "AuthenticationServices"))
77 if (assetConfig == null)
78 { 77 {
79 m_log.Error("[AUTH CONNECTOR]: AuthenticationService missing from OpenSim.ini"); 78 IConfig assetConfig = source.Configs["AuthenticationService"];
80 throw new Exception("Authentication connector init error"); 79 if (assetConfig == null)
81 } 80 {
81 m_log.Error("[AUTH CONNECTOR]: AuthenticationService missing from OpenSim.ini");
82 throw new Exception("Authentication connector init error");
83 }
82 84
83 string serviceURI = assetConfig.GetString("AuthenticationServerURI"); 85 string serviceURI = assetConfig.GetString("AuthenticationServerURI");
84 if (String.IsNullOrEmpty(serviceURI)) 86 if (String.IsNullOrEmpty(serviceURI))
85 { 87 {
86 m_log.Info("[AUTH CONNECTOR]: No Server URI named in section AuthenticationService, skipping SimianAuthenticationServiceConnector"); 88 m_log.Error("[AUTH CONNECTOR]: No Server URI named in section AuthenticationService");
87 return; 89 throw new Exception("Authentication connector init error");
88 } 90 }
89 91
90 m_serverUrl = serviceURI; 92 m_serverUrl = serviceURI;
93 }
91 } 94 }
92 95
93 public string Authenticate(UUID principalID, string password, int lifetime) 96 public string Authenticate(UUID principalID, string password, int lifetime)
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
index 697bb43..a18cb22 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianAvatarServiceConnector.cs
@@ -78,24 +78,27 @@ namespace OpenSim.Services.Connectors.SimianGrid
78 78
79 public void Initialise(IConfigSource source) 79 public void Initialise(IConfigSource source)
80 { 80 {
81 IConfig gridConfig = source.Configs["AvatarService"]; 81 if (Simian.IsSimianEnabled(source, "AvatarServices"))
82 if (gridConfig == null)
83 { 82 {
84 m_log.Error("[AVATAR CONNECTOR]: AvatarService missing from OpenSim.ini"); 83 IConfig gridConfig = source.Configs["AvatarService"];
85 throw new Exception("Avatar connector init error"); 84 if (gridConfig == null)
86 } 85 {
86 m_log.Error("[AVATAR CONNECTOR]: AvatarService missing from OpenSim.ini");
87 throw new Exception("Avatar connector init error");
88 }
87 89
88 string serviceUrl = gridConfig.GetString("AvatarServerURI"); 90 string serviceUrl = gridConfig.GetString("AvatarServerURI");
89 if (String.IsNullOrEmpty(serviceUrl)) 91 if (String.IsNullOrEmpty(serviceUrl))
90 { 92 {
91 m_log.Info("[AVATAR CONNECTOR]: No AvatarServerURI in section AvatarService, skipping SimianAvatarServiceConnector"); 93 m_log.Error("[AVATAR CONNECTOR]: No AvatarServerURI in section AvatarService");
92 return; 94 throw new Exception("Avatar connector init error");
93 } 95 }
94 96
95 if (!serviceUrl.EndsWith("/")) 97 if (!serviceUrl.EndsWith("/"))
96 serviceUrl = serviceUrl + '/'; 98 serviceUrl = serviceUrl + '/';
97 99
98 m_serverUrl = serviceUrl; 100 m_serverUrl = serviceUrl;
101 }
99 } 102 }
100 103
101 #region IAvatarService 104 #region IAvatarService
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs
index abb98a3..b3ecc7e 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianFriendsServiceConnector.cs
@@ -76,21 +76,24 @@ namespace OpenSim.Services.Connectors.SimianGrid
76 76
77 public void Initialise(IConfigSource source) 77 public void Initialise(IConfigSource source)
78 { 78 {
79 IConfig assetConfig = source.Configs["FriendsService"]; 79 if (Simian.IsSimianEnabled(source, "FriendsServices"))
80 if (assetConfig == null)
81 { 80 {
82 m_log.Error("[FRIENDS CONNECTOR]: FriendsService missing from OpenSim.ini"); 81 IConfig assetConfig = source.Configs["FriendsService"];
83 throw new Exception("Friends connector init error"); 82 if (assetConfig == null)
84 } 83 {
84 m_log.Error("[FRIENDS CONNECTOR]: FriendsService missing from OpenSim.ini");
85 throw new Exception("Friends connector init error");
86 }
85 87
86 string serviceURI = assetConfig.GetString("FriendsServerURI"); 88 string serviceURI = assetConfig.GetString("FriendsServerURI");
87 if (String.IsNullOrEmpty(serviceURI)) 89 if (String.IsNullOrEmpty(serviceURI))
88 { 90 {
89 m_log.Info("[FRIENDS CONNECTOR]: No Server URI named in section FriendsService, skipping SimianFriendsServiceConnector"); 91 m_log.Error("[FRIENDS CONNECTOR]: No Server URI named in section FriendsService");
90 return; 92 throw new Exception("Friends connector init error");
91 } 93 }
92 94
93 m_serverUrl = serviceURI; 95 m_serverUrl = serviceURI;
96 }
94 } 97 }
95 98
96 #region IFriendsService 99 #region IFriendsService
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs
index 41ed2f1..c3de98e 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianGrid.cs
@@ -25,7 +25,23 @@
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;
28using Mono.Addins; 29using Mono.Addins;
30using Nini.Config;
29 31
30[assembly: Addin("SimianGrid", "1.0")] 32[assembly: Addin("SimianGrid", "1.0")]
31[assembly: AddinDependency("OpenSim", "0.5")] 33[assembly: AddinDependency("OpenSim", "0.5")]
34
35public static class Simian
36{
37 public static bool IsSimianEnabled(IConfigSource config, string moduleName)
38 {
39 if (config.Configs["Modules"] != null)
40 {
41 string module = config.Configs["Modules"].GetString("AuthenticationServices");
42 return !String.IsNullOrEmpty(module) && module.Contains("Simian");
43 }
44
45 return false;
46 }
47} \ No newline at end of file
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
index ef943ec..eebdf14 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianGridServiceConnector.cs
@@ -80,21 +80,24 @@ namespace OpenSim.Services.Connectors.SimianGrid
80 80
81 public void Initialise(IConfigSource source) 81 public void Initialise(IConfigSource source)
82 { 82 {
83 IConfig gridConfig = source.Configs["GridService"]; 83 if (Simian.IsSimianEnabled(source, "GridServices"))
84 if (gridConfig == null)
85 { 84 {
86 m_log.Error("[GRID CONNECTOR]: GridService missing from OpenSim.ini"); 85 IConfig gridConfig = source.Configs["GridService"];
87 throw new Exception("Grid connector init error"); 86 if (gridConfig == null)
88 } 87 {
88 m_log.Error("[GRID CONNECTOR]: GridService missing from OpenSim.ini");
89 throw new Exception("Grid connector init error");
90 }
89 91
90 string serviceUrl = gridConfig.GetString("GridServerURI"); 92 string serviceUrl = gridConfig.GetString("GridServerURI");
91 if (String.IsNullOrEmpty(serviceUrl)) 93 if (String.IsNullOrEmpty(serviceUrl))
92 { 94 {
93 m_log.Info("[GRID CONNECTOR]: No Server URI named in section GridService, skipping SimianGridServiceConnector"); 95 m_log.Error("[GRID CONNECTOR]: No Server URI named in section GridService");
94 return; 96 throw new Exception("Grid connector init error");
95 } 97 }
96 98
97 m_serverUrl = serviceUrl; 99 m_serverUrl = serviceUrl;
100 }
98 } 101 }
99 102
100 #region IGridService 103 #region IGridService
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
index a41e493..891782f 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianInventoryServiceConnector.cs
@@ -92,23 +92,38 @@ namespace OpenSim.Services.Connectors.SimianGrid
92 92
93 public void Initialise(IConfigSource source) 93 public void Initialise(IConfigSource source)
94 { 94 {
95 IConfig gridConfig = source.Configs["InventoryService"]; 95 if (Simian.IsSimianEnabled(source, "InventoryServices"))
96 if (gridConfig == null)
97 { 96 {
98 m_log.Error("[INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini"); 97 IConfig gridConfig = source.Configs["InventoryService"];
99 throw new Exception("Inventory connector init error"); 98 if (gridConfig == null)
100 } 99 {
100 m_log.Error("[INVENTORY CONNECTOR]: InventoryService missing from OpenSim.ini");
101 throw new Exception("Inventory connector init error");
102 }
101 103
102 string serviceUrl = gridConfig.GetString("InventoryServerURI"); 104 string serviceUrl = gridConfig.GetString("InventoryServerURI");
103 if (String.IsNullOrEmpty(serviceUrl)) 105 if (String.IsNullOrEmpty(serviceUrl))
104 { 106 {
105 m_log.Info("[INVENTORY CONNECTOR]: No Server URI named in section InventoryService, skipping SimianInventoryServiceConnector"); 107 m_log.Error("[INVENTORY CONNECTOR]: No Server URI named in section InventoryService");
106 return; 108 throw new Exception("Inventory connector init error");
107 } 109 }
108 110
109 // FIXME: Get the user server URL too 111 m_serverUrl = serviceUrl;
110 112
111 m_serverUrl = serviceUrl; 113 gridConfig = source.Configs["UserAccountService"];
114 if (gridConfig != null)
115 {
116 serviceUrl = gridConfig.GetString("UserAccountServerURI");
117 if (!String.IsNullOrEmpty(serviceUrl))
118 m_userServerUrl = serviceUrl;
119 else
120 m_log.Info("[INVENTORY CONNECTOR]: No Server URI named in section UserAccountService");
121 }
122 else
123 {
124 m_log.Warn("[INVENTORY CONNECTOR]: UserAccountService missing from OpenSim.ini");
125 }
126 }
112 } 127 }
113 128
114 /// <summary> 129 /// <summary>
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
index fa387ba..1b5edf4 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianPresenceServiceConnector.cs
@@ -104,21 +104,24 @@ namespace OpenSim.Services.Connectors.SimianGrid
104 104
105 public void Initialise(IConfigSource source) 105 public void Initialise(IConfigSource source)
106 { 106 {
107 IConfig gridConfig = source.Configs["PresenceService"]; 107 if (Simian.IsSimianEnabled(source, "PresenceServices"))
108 if (gridConfig == null)
109 { 108 {
110 m_log.Error("[PRESENCE CONNECTOR]: PresenceService missing from OpenSim.ini"); 109 IConfig gridConfig = source.Configs["PresenceService"];
111 throw new Exception("Presence connector init error"); 110 if (gridConfig == null)
112 } 111 {
112 m_log.Error("[PRESENCE CONNECTOR]: PresenceService missing from OpenSim.ini");
113 throw new Exception("Presence connector init error");
114 }
113 115
114 string serviceUrl = gridConfig.GetString("PresenceServerURI"); 116 string serviceUrl = gridConfig.GetString("PresenceServerURI");
115 if (String.IsNullOrEmpty(serviceUrl)) 117 if (String.IsNullOrEmpty(serviceUrl))
116 { 118 {
117 m_log.Info("[PRESENCE CONNECTOR]: No PresenceServerURI in section PresenceService, skipping SimianPresenceServiceConnector"); 119 m_log.Error("[PRESENCE CONNECTOR]: No PresenceServerURI in section PresenceService");
118 return; 120 throw new Exception("Presence connector init error");
119 } 121 }
120 122
121 m_serverUrl = serviceUrl; 123 m_serverUrl = serviceUrl;
124 }
122 } 125 }
123 126
124 #region IPresenceService 127 #region IPresenceService
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs
index 3c93725..9c226fb 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianProfiles.cs
@@ -88,24 +88,27 @@ namespace OpenSim.Services.Connectors.SimianGrid
88 88
89 public void Initialise(IConfigSource source) 89 public void Initialise(IConfigSource source)
90 { 90 {
91 IConfig gridConfig = source.Configs["UserAccountService"]; 91 if (Simian.IsSimianEnabled(source, "UserAccountServices"))
92 if (gridConfig == null)
93 { 92 {
94 m_log.Error("[PROFILES]: UserAccountService missing from OpenSim.ini"); 93 IConfig gridConfig = source.Configs["UserAccountService"];
95 throw new Exception("Profiles init error"); 94 if (gridConfig == null)
96 } 95 {
96 m_log.Error("[PROFILES]: UserAccountService missing from OpenSim.ini");
97 throw new Exception("Profiles init error");
98 }
97 99
98 string serviceUrl = gridConfig.GetString("UserAccountServerURI"); 100 string serviceUrl = gridConfig.GetString("UserAccountServerURI");
99 if (String.IsNullOrEmpty(serviceUrl)) 101 if (String.IsNullOrEmpty(serviceUrl))
100 { 102 {
101 m_log.Info("[PROFILES]: No UserAccountServerURI in section UserAccountService, skipping SimianProfiles"); 103 m_log.Error("[PROFILES]: No UserAccountServerURI in section UserAccountService");
102 return; 104 throw new Exception("Profiles init error");
103 } 105 }
104 106
105 if (!serviceUrl.EndsWith("/")) 107 if (!serviceUrl.EndsWith("/"))
106 serviceUrl = serviceUrl + '/'; 108 serviceUrl = serviceUrl + '/';
107 109
108 m_serverUrl = serviceUrl; 110 m_serverUrl = serviceUrl;
111 }
109 } 112 }
110 113
111 private void ClientConnectHandler(IClientCore clientCore) 114 private void ClientConnectHandler(IClientCore clientCore)
diff --git a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs
index 3a35d9a..bb0ac57 100644
--- a/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs
+++ b/OpenSim/Services/Connectors/SimianGrid/SimianUserAccountServiceConnector.cs
@@ -77,22 +77,25 @@ namespace OpenSim.Services.Connectors.SimianGrid
77 77
78 public void Initialise(IConfigSource source) 78 public void Initialise(IConfigSource source)
79 { 79 {
80 IConfig assetConfig = source.Configs["UserAccountService"]; 80 if (Simian.IsSimianEnabled(source, "UserAccountServices"))
81 if (assetConfig == null)
82 { 81 {
83 m_log.Error("[ACCOUNT CONNECTOR]: UserAccountService missing from OpenSim.ini"); 82 IConfig assetConfig = source.Configs["UserAccountService"];
84 throw new Exception("User account connector init error"); 83 if (assetConfig == null)
85 } 84 {
85 m_log.Error("[ACCOUNT CONNECTOR]: UserAccountService missing from OpenSim.ini");
86 throw new Exception("User account connector init error");
87 }
86 88
87 string serviceURI = assetConfig.GetString("UserAccountServerURI"); 89 string serviceURI = assetConfig.GetString("UserAccountServerURI");
88 if (String.IsNullOrEmpty(serviceURI)) 90 if (String.IsNullOrEmpty(serviceURI))
89 { 91 {
90 m_log.Info("[ACCOUNT CONNECTOR]: No UserAccountServerURI in section UserAccountService, skipping SimianUserAccountServiceConnector"); 92 m_log.Error("[ACCOUNT CONNECTOR]: No UserAccountServerURI in section UserAccountService, skipping SimianUserAccountServiceConnector");
91 return; 93 throw new Exception("User account connector init error");
92 } 94 }
93 95
94 m_accountCache = new ExpiringCache<UUID, UserAccount>(); 96 m_accountCache = new ExpiringCache<UUID, UserAccount>();
95 m_serverUrl = serviceURI; 97 m_serverUrl = serviceURI;
98 }
96 } 99 }
97 100
98 public UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName) 101 public UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName)