diff options
author | Melanie Thielker | 2016-01-31 03:08:24 +0100 |
---|---|---|
committer | Melanie Thielker | 2016-01-31 03:08:24 +0100 |
commit | 367b7d7e5ee226894293f00f63112938a1447778 (patch) | |
tree | e4ef701e0dd0824e03cdd80163f7a90978e3d1c7 | |
parent | Replace the new ODE lib with one built against GLIBC 2.12. It's not our (diff) | |
parent | change parcel_owner_is_god configuration option from default from true to fa... (diff) | |
download | opensim-SC-367b7d7e5ee226894293f00f63112938a1447778.zip opensim-SC-367b7d7e5ee226894293f00f63112938a1447778.tar.gz opensim-SC-367b7d7e5ee226894293f00f63112938a1447778.tar.bz2 opensim-SC-367b7d7e5ee226894293f00f63112938a1447778.tar.xz |
Merge branch 'master' of opensimulator.org:/var/git/opensim
14 files changed, 130 insertions, 99 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs index 18bd5e5..e5d725c 100644 --- a/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs +++ b/OpenSim/Region/CoreModules/Framework/EntityTransfer/EntityTransferModule.cs | |||
@@ -801,7 +801,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
801 | int newSizeX = finalDestination.RegionSizeX; | 801 | int newSizeX = finalDestination.RegionSizeX; |
802 | int newSizeY = finalDestination.RegionSizeY; | 802 | int newSizeY = finalDestination.RegionSizeY; |
803 | 803 | ||
804 | bool OutSideViewRange = NeedsNewAgent(sp.DrawDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, | 804 | bool OutSideViewRange = NeedsNewAgent(sp.RegionViewDistance, oldRegionX, newRegionX, oldRegionY, newRegionY, |
805 | oldSizeX, oldSizeY, newSizeX, newSizeY); | 805 | oldSizeX, oldSizeY, newSizeX, newSizeY); |
806 | 806 | ||
807 | if (OutSideViewRange) | 807 | if (OutSideViewRange) |
@@ -1338,7 +1338,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1338 | // This returns 'true' if the new region already has a child agent for our | 1338 | // This returns 'true' if the new region already has a child agent for our |
1339 | // incoming agent. The implication is that, if 'false', we have to create the | 1339 | // incoming agent. The implication is that, if 'false', we have to create the |
1340 | // child and then teleport into the region. | 1340 | // child and then teleport into the region. |
1341 | protected virtual bool NeedsNewAgent(float drawdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, | 1341 | protected virtual bool NeedsNewAgent(float viewdist, uint oldRegionX, uint newRegionX, uint oldRegionY, uint newRegionY, |
1342 | int oldsizeX, int oldsizeY, int newsizeX, int newsizeY) | 1342 | int oldsizeX, int oldsizeY, int newsizeX, int newsizeY) |
1343 | { | 1343 | { |
1344 | if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) | 1344 | if (m_regionCombinerModule != null && m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) |
@@ -1353,7 +1353,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
1353 | return !(newRegionX >= swCorner.X && newRegionX <= neCorner.X && newRegionY >= swCorner.Y && newRegionY <= neCorner.Y); | 1353 | return !(newRegionX >= swCorner.X && newRegionX <= neCorner.X && newRegionY >= swCorner.Y && newRegionY <= neCorner.Y); |
1354 | } | 1354 | } |
1355 | 1355 | ||
1356 | return Util.IsOutsideView(drawdist, oldRegionX, newRegionX, oldRegionY, newRegionY, | 1356 | return Util.IsOutsideView(viewdist, oldRegionX, newRegionX, oldRegionY, newRegionY, |
1357 | oldsizeX, oldsizeY, newsizeX, newsizeY); | 1357 | oldsizeX, oldsizeY, newsizeX, newsizeY); |
1358 | } | 1358 | } |
1359 | 1359 | ||
@@ -2449,7 +2449,7 @@ namespace OpenSim.Region.CoreModules.Framework.EntityTransfer | |||
2449 | // view to include everything in the megaregion | 2449 | // view to include everything in the megaregion |
2450 | if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) | 2450 | if (m_regionCombinerModule == null || !m_regionCombinerModule.IsRootForMegaregion(Scene.RegionInfo.RegionID)) |
2451 | { | 2451 | { |
2452 | uint dd = (uint)avatar.DrawDistance; | 2452 | uint dd = (uint)avatar.RegionViewDistance; |
2453 | 2453 | ||
2454 | // until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors | 2454 | // until avatar movement updates client connections, we need to seend at least this current region imediate Neighbors |
2455 | uint ddX = Math.Max(dd, Constants.RegionSize); | 2455 | uint ddX = Math.Max(dd, Constants.RegionSize); |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 2813acb..b1005f7 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -179,7 +179,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
179 | m_RegionManagerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god", | 179 | m_RegionManagerIsGod = Util.GetConfigVarFromSections<bool>(config, "region_manager_is_god", |
180 | new string[] { "Startup", "Permissions" }, false); | 180 | new string[] { "Startup", "Permissions" }, false); |
181 | m_ParcelOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "parcel_owner_is_god", | 181 | m_ParcelOwnerIsGod = Util.GetConfigVarFromSections<bool>(config, "parcel_owner_is_god", |
182 | new string[] { "Startup", "Permissions" }, true); | 182 | new string[] { "Startup", "Permissions" }, false); |
183 | 183 | ||
184 | m_SimpleBuildPermissions = Util.GetConfigVarFromSections<bool>(config, "simple_build_permissions", | 184 | m_SimpleBuildPermissions = Util.GetConfigVarFromSections<bool>(config, "simple_build_permissions", |
185 | new string[] { "Startup", "Permissions" }, false); | 185 | new string[] { "Startup", "Permissions" }, false); |
diff --git a/OpenSim/Region/Framework/Scenes/Scene.cs b/OpenSim/Region/Framework/Scenes/Scene.cs index 5799cd4..ec74297 100755 --- a/OpenSim/Region/Framework/Scenes/Scene.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.cs | |||
@@ -296,6 +296,12 @@ namespace OpenSim.Region.Framework.Scenes | |||
296 | get { return m_maxDrawDistance; } | 296 | get { return m_maxDrawDistance; } |
297 | } | 297 | } |
298 | 298 | ||
299 | protected float m_maxRegionViewDistance = 255f; | ||
300 | public float MaxRegionViewDistance | ||
301 | { | ||
302 | get { return m_maxRegionViewDistance; } | ||
303 | } | ||
304 | |||
299 | private List<string> m_AllowedViewers = new List<string>(); | 305 | private List<string> m_AllowedViewers = new List<string>(); |
300 | private List<string> m_BannedViewers = new List<string>(); | 306 | private List<string> m_BannedViewers = new List<string>(); |
301 | 307 | ||
@@ -972,12 +978,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
972 | 978 | ||
973 | m_defaultDrawDistance = startupConfig.GetFloat("DefaultDrawDistance", m_defaultDrawDistance); | 979 | m_defaultDrawDistance = startupConfig.GetFloat("DefaultDrawDistance", m_defaultDrawDistance); |
974 | m_maxDrawDistance = startupConfig.GetFloat("MaxDrawDistance", m_maxDrawDistance); | 980 | m_maxDrawDistance = startupConfig.GetFloat("MaxDrawDistance", m_maxDrawDistance); |
981 | m_maxRegionViewDistance = startupConfig.GetFloat("MaxRegionsViewDistance", m_maxRegionViewDistance); | ||
975 | 982 | ||
976 | LegacySitOffsets = startupConfig.GetBoolean("LegacyOpenSimSitOffsets", LegacySitOffsets); | 983 | LegacySitOffsets = startupConfig.GetBoolean("LegacyOpenSimSitOffsets", LegacySitOffsets); |
977 | 984 | ||
978 | if (m_defaultDrawDistance > m_maxDrawDistance) | 985 | if (m_defaultDrawDistance > m_maxDrawDistance) |
979 | m_defaultDrawDistance = m_maxDrawDistance; | 986 | m_defaultDrawDistance = m_maxDrawDistance; |
980 | 987 | ||
988 | if (m_maxRegionViewDistance > m_maxDrawDistance) | ||
989 | m_maxRegionViewDistance = m_maxDrawDistance; | ||
990 | |||
981 | UseBackup = startupConfig.GetBoolean("UseSceneBackup", UseBackup); | 991 | UseBackup = startupConfig.GetBoolean("UseSceneBackup", UseBackup); |
982 | if (!UseBackup) | 992 | if (!UseBackup) |
983 | m_log.InfoFormat("[SCENE]: Backup has been disabled for {0}", RegionInfo.RegionName); | 993 | m_log.InfoFormat("[SCENE]: Backup has been disabled for {0}", RegionInfo.RegionName); |
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 142d643..b281e5f 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -583,6 +583,14 @@ namespace OpenSim.Region.Framework.Scenes | |||
583 | } | 583 | } |
584 | } | 584 | } |
585 | 585 | ||
586 | public float RegionViewDistance | ||
587 | { | ||
588 | get | ||
589 | { | ||
590 | return Util.Clamp(m_drawDistance, 32f, m_scene.MaxRegionViewDistance); | ||
591 | } | ||
592 | } | ||
593 | |||
586 | public bool AllowMovement { get; set; } | 594 | public bool AllowMovement { get; set; } |
587 | 595 | ||
588 | private bool m_setAlwaysRun; | 596 | private bool m_setAlwaysRun; |
@@ -3557,6 +3565,16 @@ namespace OpenSim.Region.Framework.Scenes | |||
3557 | if (Appearance.AvatarSize != m_lastSize) | 3565 | if (Appearance.AvatarSize != m_lastSize) |
3558 | SendAvatarDataToAllAgents(); | 3566 | SendAvatarDataToAllAgents(); |
3559 | 3567 | ||
3568 | // Send terse position update if not sitting and position, velocity, or rotation | ||
3569 | // has changed significantly from last sent update | ||
3570 | if (!IsSatOnObject && ( | ||
3571 | !Rotation.ApproxEquals(m_lastRotation, ROTATION_TOLERANCE) | ||
3572 | || !Velocity.ApproxEquals(m_lastVelocity, VELOCITY_TOLERANCE) | ||
3573 | || !m_pos.ApproxEquals(m_lastPosition, POSITION_LARGETOLERANCE) | ||
3574 | || (!m_pos.ApproxEquals(m_lastPosition, POSITION_SMALLTOLERANCE) && Velocity.LengthSquared() < LOWVELOCITYSQ ) | ||
3575 | ) ) | ||
3576 | { | ||
3577 | /* | ||
3560 | if (!IsSatOnObject) | 3578 | if (!IsSatOnObject) |
3561 | { | 3579 | { |
3562 | // this does need to be more complex later | 3580 | // this does need to be more complex later |
@@ -3580,8 +3598,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
3580 | && vel.LengthSquared() < LOWVELOCITYSQ | 3598 | && vel.LengthSquared() < LOWVELOCITYSQ |
3581 | )) | 3599 | )) |
3582 | { | 3600 | { |
3601 | */ | ||
3583 | SendTerseUpdateToAllClients(); | 3602 | SendTerseUpdateToAllClients(); |
3584 | } | 3603 | // } |
3585 | } | 3604 | } |
3586 | CheckForSignificantMovement(); | 3605 | CheckForSignificantMovement(); |
3587 | } | 3606 | } |
@@ -4199,7 +4218,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4199 | 4218 | ||
4200 | // m_log.Debug("---> x: " + x + "; newx:" + newRegionX + "; Abs:" + (int)Math.Abs((int)(x - newRegionX))); | 4219 | // m_log.Debug("---> x: " + x + "; newx:" + newRegionX + "; Abs:" + (int)Math.Abs((int)(x - newRegionX))); |
4201 | // m_log.Debug("---> y: " + y + "; newy:" + newRegionY + "; Abs:" + (int)Math.Abs((int)(y - newRegionY))); | 4220 | // m_log.Debug("---> y: " + y + "; newy:" + newRegionY + "; Abs:" + (int)Math.Abs((int)(y - newRegionY))); |
4202 | if (Util.IsOutsideView(DrawDistance, x, newRegionX, y, newRegionY, | 4221 | if (Util.IsOutsideView(RegionViewDistance, x, newRegionX, y, newRegionY, |
4203 | regInfo.sizeX, regInfo.sizeY, newRegionSizeX, newRegionSizeY)) | 4222 | regInfo.sizeX, regInfo.sizeY, newRegionSizeX, newRegionSizeY)) |
4204 | { | 4223 | { |
4205 | byebyeRegions.Add(handle); | 4224 | byebyeRegions.Add(handle); |
@@ -4210,7 +4229,7 @@ namespace OpenSim.Region.Framework.Scenes | |||
4210 | } | 4229 | } |
4211 | else | 4230 | else |
4212 | { | 4231 | { |
4213 | if (Util.IsOutsideView(DrawDistance, x, newRegionX, y, newRegionY, | 4232 | if (Util.IsOutsideView(RegionViewDistance, x, newRegionX, y, newRegionY, |
4214 | (int)Constants.RegionSize, (int)Constants.RegionSize, newRegionSizeX, newRegionSizeY)) | 4233 | (int)Constants.RegionSize, (int)Constants.RegionSize, newRegionSizeX, newRegionSizeY)) |
4215 | { | 4234 | { |
4216 | byebyeRegions.Add(handle); | 4235 | byebyeRegions.Add(handle); |
@@ -5773,8 +5792,8 @@ namespace OpenSim.Region.Framework.Scenes | |||
5773 | return true; | 5792 | return true; |
5774 | 5793 | ||
5775 | // respect region owner and managers | 5794 | // respect region owner and managers |
5776 | if(m_scene.RegionInfo.EstateSettings.IsEstateManagerOrOwner(m_uuid)) | 5795 | // if(m_scene.RegionInfo.EstateSettings.IsEstateManagerOrOwner(m_uuid)) |
5777 | return true; | 5796 | // return true; |
5778 | 5797 | ||
5779 | if (!m_scene.RegionInfo.EstateSettings.AllowDirectTeleport) | 5798 | if (!m_scene.RegionInfo.EstateSettings.AllowDirectTeleport) |
5780 | { | 5799 | { |
@@ -5804,8 +5823,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
5804 | || (m_teleportFlags & adicionalLandPointFlags) != 0) | 5823 | || (m_teleportFlags & adicionalLandPointFlags) != 0) |
5805 | { | 5824 | { |
5806 | if (land.LandData.LandingType == (byte)LandingType.LandingPoint && | 5825 | if (land.LandData.LandingType == (byte)LandingType.LandingPoint && |
5807 | land.LandData.UserLocation != Vector3.Zero && | 5826 | land.LandData.UserLocation != Vector3.Zero ) |
5808 | land.LandData.OwnerID != m_uuid ) | 5827 | // && |
5828 | // land.LandData.OwnerID != m_uuid ) | ||
5809 | { | 5829 | { |
5810 | pos = land.LandData.UserLocation; | 5830 | pos = land.LandData.UserLocation; |
5811 | if(land.LandData.UserLookAt != Vector3.Zero) | 5831 | if(land.LandData.UserLookAt != Vector3.Zero) |
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs b/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs index 12ffacb..79ee00f 100755 --- a/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSActorAvatarMove.cs | |||
@@ -47,10 +47,9 @@ public class BSActorAvatarMove : BSActor | |||
47 | // The amount the step up is applying. Used to smooth stair walking. | 47 | // The amount the step up is applying. Used to smooth stair walking. |
48 | float m_lastStepUp; | 48 | float m_lastStepUp; |
49 | 49 | ||
50 | // Jumping happens over several frames. If use applies up force while colliding, start the | 50 | // There are times the velocity is set but we don't want to inforce stationary until the |
51 | // jump and allow the jump to continue for this number of frames. | 51 | // real velocity drops. |
52 | int m_jumpFrames = 0; | 52 | bool m_waitingForLowVelocityForStationary = false; |
53 | float m_jumpVelocity = 0f; | ||
54 | 53 | ||
55 | public BSActorAvatarMove(BSScene physicsScene, BSPhysObject pObj, string actorName) | 54 | public BSActorAvatarMove(BSScene physicsScene, BSPhysObject pObj, string actorName) |
56 | : base(physicsScene, pObj, actorName) | 55 | : base(physicsScene, pObj, actorName) |
@@ -117,11 +116,19 @@ public class BSActorAvatarMove : BSActor | |||
117 | m_velocityMotor.SetTarget(targ); | 116 | m_velocityMotor.SetTarget(targ); |
118 | m_velocityMotor.SetCurrent(vel); | 117 | m_velocityMotor.SetCurrent(vel); |
119 | m_velocityMotor.Enabled = true; | 118 | m_velocityMotor.Enabled = true; |
119 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,SetVelocityAndTarget,vel={1}, targ={2}", | ||
120 | m_controllingPrim.LocalID, vel, targ); | ||
121 | m_waitingForLowVelocityForStationary = false; | ||
120 | } | 122 | } |
121 | }); | 123 | }); |
122 | } | 124 | } |
123 | 125 | ||
124 | // If a hover motor has not been created, create one and start the hovering. | 126 | public void SuppressStationayCheckUntilLowVelocity() |
127 | { | ||
128 | m_waitingForLowVelocityForStationary = true; | ||
129 | } | ||
130 | |||
131 | // If a movement motor has not been created, create one and start the hovering. | ||
125 | private void ActivateAvatarMove() | 132 | private void ActivateAvatarMove() |
126 | { | 133 | { |
127 | if (m_velocityMotor == null) | 134 | if (m_velocityMotor == null) |
@@ -133,13 +140,14 @@ public class BSActorAvatarMove : BSActor | |||
133 | 1f // efficiency | 140 | 1f // efficiency |
134 | ); | 141 | ); |
135 | m_velocityMotor.ErrorZeroThreshold = BSParam.AvatarStopZeroThreshold; | 142 | m_velocityMotor.ErrorZeroThreshold = BSParam.AvatarStopZeroThreshold; |
136 | // _velocityMotor.PhysicsScene = PhysicsScene; // DEBUG DEBUG so motor will output detail log messages. | 143 | // m_velocityMotor.PhysicsScene = m_controllingPrim.PhysScene; // DEBUG DEBUG so motor will output detail log messages. |
137 | SetVelocityAndTarget(m_controllingPrim.RawVelocity, m_controllingPrim.TargetVelocity, true /* inTaintTime */); | 144 | SetVelocityAndTarget(m_controllingPrim.RawVelocity, m_controllingPrim.TargetVelocity, true /* inTaintTime */); |
138 | 145 | ||
139 | m_physicsScene.BeforeStep += Mover; | 146 | m_physicsScene.BeforeStep += Mover; |
140 | m_controllingPrim.OnPreUpdateProperty += Process_OnPreUpdateProperty; | 147 | m_controllingPrim.OnPreUpdateProperty += Process_OnPreUpdateProperty; |
141 | 148 | ||
142 | m_walkingUpStairs = 0; | 149 | m_walkingUpStairs = 0; |
150 | m_waitingForLowVelocityForStationary = false; | ||
143 | } | 151 | } |
144 | } | 152 | } |
145 | 153 | ||
@@ -190,12 +198,15 @@ public class BSActorAvatarMove : BSActor | |||
190 | // if colliding with something stationary and we're not doing volume detect . | 198 | // if colliding with something stationary and we're not doing volume detect . |
191 | if (!m_controllingPrim.ColliderIsMoving && !m_controllingPrim.ColliderIsVolumeDetect) | 199 | if (!m_controllingPrim.ColliderIsMoving && !m_controllingPrim.ColliderIsVolumeDetect) |
192 | { | 200 | { |
193 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,totalForce={1}, vel={2}", /* DEBUG */ | 201 | if (m_waitingForLowVelocityForStationary) |
194 | m_controllingPrim.LocalID, m_physicsScene.PE.GetTotalForce(m_controllingPrim.PhysBody), m_controllingPrim.Velocity); /* DEBUG */ | 202 | { |
195 | // If velocity is very small, assume it is movement creep and suppress it. | 203 | // if waiting for velocity to drop and it has finally dropped, we can be stationary |
196 | // Applying push forces (Character.AddForce) should move the avatar and that is only seen here as velocity. | 204 | if (m_controllingPrim.RawVelocity.LengthSquared() < BSParam.AvatarStopZeroThresholdSquared) |
197 | if ( (m_controllingPrim.Velocity.LengthSquared() < BSParam.AvatarStopZeroThresholdSquared) | 205 | { |
198 | && (m_physicsScene.PE.GetTotalForce(m_controllingPrim.PhysBody).LengthSquared() < BSParam.AvatarStopZeroThresholdSquared) ) | 206 | m_waitingForLowVelocityForStationary = false; |
207 | } | ||
208 | } | ||
209 | if (!m_waitingForLowVelocityForStationary) | ||
199 | { | 210 | { |
200 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", m_controllingPrim.LocalID); | 211 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,zeroingMotion", m_controllingPrim.LocalID); |
201 | m_controllingPrim.IsStationary = true; | 212 | m_controllingPrim.IsStationary = true; |
@@ -203,8 +214,8 @@ public class BSActorAvatarMove : BSActor | |||
203 | } | 214 | } |
204 | else | 215 | else |
205 | { | 216 | { |
206 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,collidingWithStationary,not zeroing because velocity={1}", | 217 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,waitingForLowVel,rawvel={1}", |
207 | m_controllingPrim.LocalID, m_controllingPrim.Velocity); | 218 | m_controllingPrim.LocalID, m_controllingPrim.RawVelocity.Length()); |
208 | } | 219 | } |
209 | } | 220 | } |
210 | 221 | ||
@@ -250,50 +261,24 @@ public class BSActorAvatarMove : BSActor | |||
250 | m_physicsScene.PE.SetFriction(m_controllingPrim.PhysBody, m_controllingPrim.Friction); | 261 | m_physicsScene.PE.SetFriction(m_controllingPrim.PhysBody, m_controllingPrim.Friction); |
251 | } | 262 | } |
252 | 263 | ||
253 | // If not flying and not colliding, assume falling and keep the downward motion component. | 264 | // 'm_velocityMotor is used for walking, flying, and jumping and will thus have the correct values |
254 | // This check is done here for the next jump test. | 265 | // for Z. But in come cases it must be over-ridden. Like when falling or jumping. |
255 | if (!m_controllingPrim.Flying && !m_controllingPrim.IsColliding) | ||
256 | { | ||
257 | stepVelocity.Z = m_controllingPrim.RawVelocity.Z; | ||
258 | } | ||
259 | 266 | ||
260 | // Colliding and not flying with an upward force. The avatar must be trying to jump. | 267 | float realVelocityZ = m_controllingPrim.RawVelocity.Z; |
261 | if (!m_controllingPrim.Flying && m_controllingPrim.IsColliding && stepVelocity.Z > 0) | ||
262 | { | ||
263 | // We allow the upward force to happen for this many frames. | ||
264 | m_jumpFrames = BSParam.AvatarJumpFrames; | ||
265 | m_jumpVelocity = stepVelocity.Z; | ||
266 | } | ||
267 | 268 | ||
268 | // The case where the avatar is not colliding and is not flying is special. | 269 | // If not flying and falling, we over-ride the stepping motor so we can fall to the ground |
269 | // The avatar is either falling or jumping and the user can be applying force to the avatar | 270 | if (!m_controllingPrim.Flying && realVelocityZ < 0) |
270 | // (force in some direction or force up or down). | ||
271 | // If the avatar has negative Z velocity and is not colliding, presume we're falling and keep the velocity. | ||
272 | // If the user is trying to apply upward force but we're not colliding, assume the avatar | ||
273 | // is trying to jump and don't apply the upward force if not touching the ground any more. | ||
274 | if (!m_controllingPrim.Flying && !m_controllingPrim.IsColliding) | ||
275 | { | 271 | { |
276 | // If upward velocity is being applied, this must be a jump and only allow that to go on so long | 272 | // Can't fall faster than this |
277 | if (m_jumpFrames > 0) | 273 | if (realVelocityZ < BSParam.AvatarTerminalVelocity) |
278 | { | 274 | { |
279 | // Since not touching the ground, only apply upward force for so long. | 275 | realVelocityZ = BSParam.AvatarTerminalVelocity; |
280 | m_jumpFrames--; | ||
281 | stepVelocity.Z = m_jumpVelocity; | ||
282 | } | 276 | } |
283 | else | 277 | |
284 | { | 278 | stepVelocity.Z = realVelocityZ; |
285 | // Since we're not affected by anything, the avatar must be falling and we do not want that to be too fast. | ||
286 | if (m_controllingPrim.RawVelocity.Z < BSParam.AvatarTerminalVelocity) | ||
287 | { | ||
288 | stepVelocity.Z = BSParam.AvatarTerminalVelocity; | ||
289 | } | ||
290 | else | ||
291 | { | ||
292 | stepVelocity.Z = m_controllingPrim.RawVelocity.Z; | ||
293 | } | ||
294 | } | ||
295 | // DetailLog("{0},BSCharacter.MoveMotor,taint,overrideStepZWithWorldZ,stepVel={1}", LocalID, stepVelocity); | ||
296 | } | 279 | } |
280 | // m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,DEBUG,motorCurrent={1},realZ={2},flying={3},collid={4},jFrames={5}", | ||
281 | // m_controllingPrim.LocalID, m_velocityMotor.CurrentValue, realVelocityZ, m_controllingPrim.Flying, m_controllingPrim.IsColliding, m_jumpFrames); | ||
297 | 282 | ||
298 | //Alicia: Maintain minimum height when flying. | 283 | //Alicia: Maintain minimum height when flying. |
299 | // SL has a flying effect that keeps the avatar flying above the ground by some margin | 284 | // SL has a flying effect that keeps the avatar flying above the ground by some margin |
@@ -304,6 +289,8 @@ public class BSActorAvatarMove : BSActor | |||
304 | 289 | ||
305 | if( m_controllingPrim.Position.Z < hover_height) | 290 | if( m_controllingPrim.Position.Z < hover_height) |
306 | { | 291 | { |
292 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,addingUpforceForGroundMargin,height={1},hoverHeight={2}", | ||
293 | m_controllingPrim.LocalID, m_controllingPrim.Position.Z, hover_height); | ||
307 | stepVelocity.Z += BSParam.AvatarFlyingGroundUpForce; | 294 | stepVelocity.Z += BSParam.AvatarFlyingGroundUpForce; |
308 | } | 295 | } |
309 | } | 296 | } |
@@ -328,11 +315,7 @@ public class BSActorAvatarMove : BSActor | |||
328 | if (m_controllingPrim.IsStationary) | 315 | if (m_controllingPrim.IsStationary) |
329 | { | 316 | { |
330 | entprop.Position = m_controllingPrim.RawPosition; | 317 | entprop.Position = m_controllingPrim.RawPosition; |
331 | // Suppress small movement velocity | 318 | entprop.Velocity = OMV.Vector3.Zero; |
332 | if (entprop.Velocity.LengthSquared() < BSParam.AvatarStopZeroThresholdSquared) { | ||
333 | m_physicsScene.DetailLog("{0},BSCharacter.MoveMotor,OnPreUpdate,zeroing velocity={1}", m_controllingPrim.LocalID, entprop.Velocity); | ||
334 | entprop.Velocity = OMV.Vector3.Zero; | ||
335 | } | ||
336 | m_physicsScene.PE.SetTranslation(m_controllingPrim.PhysBody, entprop.Position, entprop.Rotation); | 319 | m_physicsScene.PE.SetTranslation(m_controllingPrim.PhysBody, entprop.Position, entprop.Rotation); |
337 | } | 320 | } |
338 | 321 | ||
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSActorMoveToTarget.cs b/OpenSim/Region/PhysicsModules/BulletS/BSActorMoveToTarget.cs index 3db8f2c..87cf972 100755 --- a/OpenSim/Region/PhysicsModules/BulletS/BSActorMoveToTarget.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSActorMoveToTarget.cs | |||
@@ -211,7 +211,7 @@ public class BSActorMoveToTarget : BSActor | |||
211 | // Add enough force to overcome the mass of the object | 211 | // Add enough force to overcome the mass of the object |
212 | addedForce *= m_controllingPrim.Mass; | 212 | addedForce *= m_controllingPrim.Mass; |
213 | 213 | ||
214 | m_controllingPrim.AddForce(addedForce, false /* pushForce */, true /* inTaintTime */); | 214 | m_controllingPrim.AddForce(true /* inTaintTime */, addedForce); |
215 | } | 215 | } |
216 | m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover3,move,fromPos={1},addedForce={2}", | 216 | m_physicsScene.DetailLog("{0},BSActorMoveToTarget.Mover3,move,fromPos={1},addedForce={2}", |
217 | m_controllingPrim.LocalID, origPosition, addedForce); | 217 | m_controllingPrim.LocalID, origPosition, addedForce); |
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSActorSetTorque.cs b/OpenSim/Region/PhysicsModules/BulletS/BSActorSetTorque.cs index a1cf4db..0261bcb 100755 --- a/OpenSim/Region/PhysicsModules/BulletS/BSActorSetTorque.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSActorSetTorque.cs | |||
@@ -127,7 +127,7 @@ public class BSActorSetTorque : BSActor | |||
127 | m_physicsScene.DetailLog("{0},BSActorSetTorque,preStep,force={1}", m_controllingPrim.LocalID, m_controllingPrim.RawTorque); | 127 | m_physicsScene.DetailLog("{0},BSActorSetTorque,preStep,force={1}", m_controllingPrim.LocalID, m_controllingPrim.RawTorque); |
128 | if (m_controllingPrim.PhysBody.HasPhysicalBody) | 128 | if (m_controllingPrim.PhysBody.HasPhysicalBody) |
129 | { | 129 | { |
130 | m_controllingPrim.AddAngularForce(m_controllingPrim.RawTorque, false, true); | 130 | m_controllingPrim.AddAngularForce(true /* inTaintTime */, m_controllingPrim.RawTorque); |
131 | m_controllingPrim.ActivateIfPhysical(false); | 131 | m_controllingPrim.ActivateIfPhysical(false); |
132 | } | 132 | } |
133 | 133 | ||
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs index ab9cc27..6d5589f 100644 --- a/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSCharacter.cs | |||
@@ -89,6 +89,7 @@ public sealed class BSCharacter : BSPhysObject | |||
89 | _buoyancy = ComputeBuoyancyFromFlying(isFlying); | 89 | _buoyancy = ComputeBuoyancyFromFlying(isFlying); |
90 | Friction = BSParam.AvatarStandingFriction; | 90 | Friction = BSParam.AvatarStandingFriction; |
91 | Density = BSParam.AvatarDensity; | 91 | Density = BSParam.AvatarDensity; |
92 | _isPhysical = true; | ||
92 | 93 | ||
93 | // Old versions of ScenePresence passed only the height. If width and/or depth are zero, | 94 | // Old versions of ScenePresence passed only the height. If width and/or depth are zero, |
94 | // replace with the default values. | 95 | // replace with the default values. |
@@ -457,7 +458,7 @@ public sealed class BSCharacter : BSPhysObject | |||
457 | get { return RawVelocity; } | 458 | get { return RawVelocity; } |
458 | set { | 459 | set { |
459 | RawVelocity = value; | 460 | RawVelocity = value; |
460 | OMV.Vector3 vel = RawVelocity; | 461 | OMV.Vector3 vel = RawVelocity; |
461 | 462 | ||
462 | DetailLog("{0}: set Velocity = {1}", LocalID, value); | 463 | DetailLog("{0}: set Velocity = {1}", LocalID, value); |
463 | 464 | ||
@@ -662,10 +663,10 @@ public sealed class BSCharacter : BSPhysObject | |||
662 | addForce *= Mass * BSParam.AvatarAddForcePushFactor; | 663 | addForce *= Mass * BSParam.AvatarAddForcePushFactor; |
663 | 664 | ||
664 | DetailLog("{0},BSCharacter.addForce,call,force={1},addForce={2},push={3},mass={4}", LocalID, force, addForce, pushforce, Mass); | 665 | DetailLog("{0},BSCharacter.addForce,call,force={1},addForce={2},push={3},mass={4}", LocalID, force, addForce, pushforce, Mass); |
665 | AddForce(addForce, pushforce, false); | 666 | AddForce(false, addForce); |
666 | } | 667 | } |
667 | 668 | ||
668 | public override void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { | 669 | public override void AddForce(bool inTaintTime, OMV.Vector3 force) { |
669 | if (force.IsFinite()) | 670 | if (force.IsFinite()) |
670 | { | 671 | { |
671 | OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); | 672 | OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); |
@@ -683,6 +684,10 @@ public sealed class BSCharacter : BSPhysObject | |||
683 | PhysScene.PE.ApplyCentralForce(PhysBody, addForce); | 684 | PhysScene.PE.ApplyCentralForce(PhysBody, addForce); |
684 | PhysScene.PE.Activate(PhysBody, true); | 685 | PhysScene.PE.Activate(PhysBody, true); |
685 | } | 686 | } |
687 | if (m_moveActor != null) | ||
688 | { | ||
689 | m_moveActor.SuppressStationayCheckUntilLowVelocity(); | ||
690 | } | ||
686 | }); | 691 | }); |
687 | } | 692 | } |
688 | else | 693 | else |
@@ -692,7 +697,7 @@ public sealed class BSCharacter : BSPhysObject | |||
692 | } | 697 | } |
693 | } | 698 | } |
694 | 699 | ||
695 | public override void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { | 700 | public override void AddAngularForce(bool inTaintTime, OMV.Vector3 force) { |
696 | } | 701 | } |
697 | public override void SetMomentum(OMV.Vector3 momentum) { | 702 | public override void SetMomentum(OMV.Vector3 momentum) { |
698 | } | 703 | } |
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSDynamics.cs b/OpenSim/Region/PhysicsModules/BulletS/BSDynamics.cs index 0fc5577..313c961 100644 --- a/OpenSim/Region/PhysicsModules/BulletS/BSDynamics.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSDynamics.cs | |||
@@ -768,7 +768,7 @@ namespace OpenSim.Region.PhysicsModule.BulletS | |||
768 | } | 768 | } |
769 | 769 | ||
770 | if ((m_knownChanged & m_knownChangedForce) != 0) | 770 | if ((m_knownChanged & m_knownChangedForce) != 0) |
771 | ControllingPrim.AddForce((Vector3)m_knownForce, false /*pushForce*/, true /*inTaintTime*/); | 771 | ControllingPrim.AddForce(false /* inTaintTime */, (Vector3)m_knownForce); |
772 | 772 | ||
773 | if ((m_knownChanged & m_knownChangedForceImpulse) != 0) | 773 | if ((m_knownChanged & m_knownChangedForceImpulse) != 0) |
774 | ControllingPrim.AddForceImpulse((Vector3)m_knownForceImpulse, false /*pushforce*/, true /*inTaintTime*/); | 774 | ControllingPrim.AddForceImpulse((Vector3)m_knownForceImpulse, false /*pushforce*/, true /*inTaintTime*/); |
@@ -784,7 +784,7 @@ namespace OpenSim.Region.PhysicsModule.BulletS | |||
784 | 784 | ||
785 | if ((m_knownChanged & m_knownChangedRotationalForce) != 0) | 785 | if ((m_knownChanged & m_knownChangedRotationalForce) != 0) |
786 | { | 786 | { |
787 | ControllingPrim.AddAngularForce((Vector3)m_knownRotationalForce, false /*pushForce*/, true /*inTaintTime*/); | 787 | ControllingPrim.AddAngularForce(true /* inTaintTime */, (Vector3)m_knownRotationalForce); |
788 | } | 788 | } |
789 | 789 | ||
790 | // If we set one of the values (ie, the physics engine didn't do it) we must force | 790 | // If we set one of the values (ie, the physics engine didn't do it) we must force |
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs b/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs index aea69d7..389a441 100755 --- a/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSParam.cs | |||
@@ -633,7 +633,7 @@ public static class BSParam | |||
633 | new ParameterDefn<float>("AvatarAddForcePushFactor", "BSCharacter.AddForce is multiplied by this and mass to be like other physics engines", | 633 | new ParameterDefn<float>("AvatarAddForcePushFactor", "BSCharacter.AddForce is multiplied by this and mass to be like other physics engines", |
634 | 0.315f ), | 634 | 0.315f ), |
635 | new ParameterDefn<float>("AvatarStopZeroThreshold", "Movement velocity below which avatar is assumed to be stopped", | 635 | new ParameterDefn<float>("AvatarStopZeroThreshold", "Movement velocity below which avatar is assumed to be stopped", |
636 | 0.1f, | 636 | 0.4f, |
637 | (s) => { return (float)AvatarStopZeroThreshold; }, | 637 | (s) => { return (float)AvatarStopZeroThreshold; }, |
638 | (s,v) => { AvatarStopZeroThreshold = v; AvatarStopZeroThresholdSquared = v * v; } ), | 638 | (s,v) => { AvatarStopZeroThreshold = v; AvatarStopZeroThresholdSquared = v * v; } ), |
639 | new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", | 639 | new ParameterDefn<float>("AvatarBelowGroundUpCorrectionMeters", "Meters to move avatar up if it seems to be below ground", |
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs b/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs index b50e4cc..a70d1b8 100755 --- a/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSPhysObject.cs | |||
@@ -245,10 +245,10 @@ public abstract class BSPhysObject : PhysicsActor | |||
245 | 245 | ||
246 | public override void AddAngularForce(OMV.Vector3 force, bool pushforce) | 246 | public override void AddAngularForce(OMV.Vector3 force, bool pushforce) |
247 | { | 247 | { |
248 | AddAngularForce(force, pushforce, false); | 248 | AddAngularForce(false, force); |
249 | } | 249 | } |
250 | public abstract void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime); | 250 | public abstract void AddAngularForce(bool inTaintTime, OMV.Vector3 force); |
251 | public abstract void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime); | 251 | public abstract void AddForce(bool inTaintTime, OMV.Vector3 force); |
252 | 252 | ||
253 | public abstract OMV.Vector3 ForceRotationalVelocity { get; set; } | 253 | public abstract OMV.Vector3 ForceRotationalVelocity { get; set; } |
254 | 254 | ||
@@ -505,17 +505,20 @@ public abstract class BSPhysObject : PhysicsActor | |||
505 | // Collision sound requires a velocity to know it should happen. This is a lot of computation for a little used feature. | 505 | // Collision sound requires a velocity to know it should happen. This is a lot of computation for a little used feature. |
506 | OMV.Vector3 relvel = OMV.Vector3.Zero; | 506 | OMV.Vector3 relvel = OMV.Vector3.Zero; |
507 | if (IsPhysical) | 507 | if (IsPhysical) |
508 | relvel = Velocity; | 508 | relvel = RawVelocity; |
509 | if (collidee != null && collidee.IsPhysical) | 509 | if (collidee != null && collidee.IsPhysical) |
510 | relvel -= collidee.Velocity; | 510 | relvel -= collidee.RawVelocity; |
511 | newContact.RelativeSpeed = OMV.Vector3.Dot(relvel, contactNormal); | 511 | newContact.RelativeSpeed = OMV.Vector3.Dot(relvel, contactNormal); |
512 | // DetailLog("{0},{1}.Collision.AddCollider,vel={2},contee.vel={3},relvel={4},relspeed={5}", | ||
513 | // LocalID, TypeName, RawVelocity, (collidee == null ? OMV.Vector3.Zero : collidee.RawVelocity), relvel, newContact.RelativeSpeed); | ||
512 | 514 | ||
513 | lock (PhysScene.CollisionLock) | 515 | lock (PhysScene.CollisionLock) |
514 | { | 516 | { |
515 | CollisionCollection.AddCollider(collideeLocalID, newContact); | 517 | CollisionCollection.AddCollider(collideeLocalID, newContact); |
516 | } | 518 | } |
517 | DetailLog("{0},{1}.Collision.AddCollider,call,with={2},point={3},normal={4},depth={5},colliderMoving={6}", | 519 | DetailLog("{0},{1}.Collision.AddCollider,call,with={2},point={3},normal={4},depth={5},speed={6},colliderMoving={7}", |
518 | LocalID, TypeName, collideeLocalID, contactPoint, contactNormal, pentrationDepth, ColliderIsMoving); | 520 | LocalID, TypeName, collideeLocalID, contactPoint, contactNormal, pentrationDepth, |
521 | newContact.RelativeSpeed, ColliderIsMoving); | ||
519 | 522 | ||
520 | ret = true; | 523 | ret = true; |
521 | } | 524 | } |
diff --git a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs index 1d552eb..fd9b834 100644 --- a/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs +++ b/OpenSim/Region/PhysicsModules/BulletS/BSPrim.cs | |||
@@ -394,7 +394,7 @@ public class BSPrim : BSPhysObject | |||
394 | // Apply upforce and overcome gravity. | 394 | // Apply upforce and overcome gravity. |
395 | OMV.Vector3 correctionForce = upForce - PhysScene.DefaultGravity; | 395 | OMV.Vector3 correctionForce = upForce - PhysScene.DefaultGravity; |
396 | DetailLog("{0},BSPrim.PositionSanityCheck,applyForce,pos={1},upForce={2},correctionForce={3}", LocalID, RawPosition, upForce, correctionForce); | 396 | DetailLog("{0},BSPrim.PositionSanityCheck,applyForce,pos={1},upForce={2},correctionForce={3}", LocalID, RawPosition, upForce, correctionForce); |
397 | AddForce(correctionForce, false, inTaintTime); | 397 | AddForce(inTaintTime, correctionForce); |
398 | ret = true; | 398 | ret = true; |
399 | } | 399 | } |
400 | } | 400 | } |
@@ -1249,14 +1249,18 @@ public class BSPrim : BSPhysObject | |||
1249 | // Per documentation, max force is limited. | 1249 | // Per documentation, max force is limited. |
1250 | OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); | 1250 | OMV.Vector3 addForce = Util.ClampV(force, BSParam.MaxAddForceMagnitude); |
1251 | 1251 | ||
1252 | // Since this force is being applied in only one step, make this a force per second. | 1252 | // Push forces seem to be scaled differently (follow pattern in ubODE) |
1253 | addForce /= PhysScene.LastTimeStep; | 1253 | if (!pushforce) { |
1254 | AddForce(addForce, pushforce, false /* inTaintTime */); | 1254 | // Since this force is being applied in only one step, make this a force per second. |
1255 | addForce /= PhysScene.LastTimeStep; | ||
1256 | } | ||
1257 | |||
1258 | AddForce(false /* inTaintTime */, addForce); | ||
1255 | } | 1259 | } |
1256 | 1260 | ||
1257 | // Applying a force just adds this to the total force on the object. | 1261 | // Applying a force just adds this to the total force on the object. |
1258 | // This added force will only last the next simulation tick. | 1262 | // This added force will only last the next simulation tick. |
1259 | public override void AddForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) { | 1263 | public override void AddForce(bool inTaintTime, OMV.Vector3 force) { |
1260 | // for an object, doesn't matter if force is a pushforce or not | 1264 | // for an object, doesn't matter if force is a pushforce or not |
1261 | if (IsPhysicallyActive) | 1265 | if (IsPhysicallyActive) |
1262 | { | 1266 | { |
@@ -1315,7 +1319,7 @@ public class BSPrim : BSPhysObject | |||
1315 | } | 1319 | } |
1316 | 1320 | ||
1317 | // BSPhysObject.AddAngularForce() | 1321 | // BSPhysObject.AddAngularForce() |
1318 | public override void AddAngularForce(OMV.Vector3 force, bool pushforce, bool inTaintTime) | 1322 | public override void AddAngularForce(bool inTaintTime, OMV.Vector3 force) |
1319 | { | 1323 | { |
1320 | if (force.IsFinite()) | 1324 | if (force.IsFinite()) |
1321 | { | 1325 | { |
diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 8f5dcef..f8c0506 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example | |||
@@ -400,9 +400,9 @@ | |||
400 | ;; Allow region managers to assume god powers in regions they manage | 400 | ;; Allow region managers to assume god powers in regions they manage |
401 | ; region_manager_is_god = false | 401 | ; region_manager_is_god = false |
402 | 402 | ||
403 | ;# {parcel_owner_is_god} {} {Allow parcel owner gods} {true false} true | 403 | ;# {parcel_owner_is_god} {} {Allow parcel owner gods} {true false} false |
404 | ;; Allow parcel owners to assume god powers in their parcels | 404 | ;; Allow parcel owners to assume god powers in their parcels |
405 | ; parcel_owner_is_god = true | 405 | ; parcel_owner_is_god = false |
406 | 406 | ||
407 | ;# {simple_build_permissions} {} {Allow building in parcel by access list (no groups)} {true false} false | 407 | ;# {simple_build_permissions} {} {Allow building in parcel by access list (no groups)} {true false} false |
408 | ;; More control over permissions | 408 | ;; More control over permissions |
diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index 84e029b..f09d2a1 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini | |||
@@ -161,13 +161,19 @@ | |||
161 | ; Warning! Don't use this with regions that have existing content!, This will likely break them | 161 | ; Warning! Don't use this with regions that have existing content!, This will likely break them |
162 | CombineContiguousRegions = false | 162 | CombineContiguousRegions = false |
163 | 163 | ||
164 | ; Extend the region's draw distance; 255m is the default which includes | 164 | ; the default view range. Viewers override this ( no major effect still ) |
165 | ; one neighbor on each side of the current region, 767m would go three | ||
166 | ; neighbors on each side for a total of 49 regions in view. Warning, unless | ||
167 | ; all the regions have the same drawdistance, you will end up with strange | ||
168 | ; effects because the agents that get closed may be inconsistent. | ||
169 | DefaultDrawDistance = 255.0 | 165 | DefaultDrawDistance = 255.0 |
170 | 166 | ||
167 | ; limit the maximum view range ( no effect still (does limit MaxRegionsViewDistance) ) | ||
168 | MaxDrawDistance = 512 | ||
169 | |||
170 | ; the maximum distance to tell a viewer to connect to a neighbour region, so it can be seen | ||
171 | ; (it is limited by MaxDrawDistance above) | ||
172 | ; less than 256 shows imediate neighbours; 512 also second imediate neighbours etc | ||
173 | ; more than 512m can cause viewers problems specially in case of dense regions. | ||
174 | ; curretly this distance is from current region borders. | ||
175 | MaxRegionsViewDistance = 255 | ||
176 | |||
171 | ; If you have only one region in an instance, or to avoid the many bugs | 177 | ; If you have only one region in an instance, or to avoid the many bugs |
172 | ; that you can trigger in modules by restarting a region, set this to | 178 | ; that you can trigger in modules by restarting a region, set this to |
173 | ; true to make the entire instance exit instead of restarting the region. | 179 | ; true to make the entire instance exit instead of restarting the region. |
@@ -412,7 +418,7 @@ | |||
412 | ; please note that this still doesn't duplicate SL, and is not intended to | 418 | ; please note that this still doesn't duplicate SL, and is not intended to |
413 | ;region_owner_is_god = true | 419 | ;region_owner_is_god = true |
414 | ;region_manager_is_god = false | 420 | ;region_manager_is_god = false |
415 | ;parcel_owner_is_god = true | 421 | ;parcel_owner_is_god = false |
416 | 422 | ||
417 | ; Control user types that are allowed to create new scripts | 423 | ; Control user types that are allowed to create new scripts |
418 | ; Only enforced if serviceside_object_permissions is true | 424 | ; Only enforced if serviceside_object_permissions is true |