diff options
author | UbitUmarov | 2014-08-12 18:42:18 +0100 |
---|---|---|
committer | UbitUmarov | 2014-08-12 18:42:18 +0100 |
commit | 4997a9e87a860e3c39c164bf8a4079ef4ff63089 (patch) | |
tree | 1a7140a0cab7f3deb3720440d82bd9dd478293d0 /OpenSim/Region/Framework/Scenes/ScenePresence.cs | |
parent | change XMLIrpgGroups attach to events, using the more correct (diff) | |
download | opensim-SC-4997a9e87a860e3c39c164bf8a4079ef4ff63089.zip opensim-SC-4997a9e87a860e3c39c164bf8a4079ef4ff63089.tar.gz opensim-SC-4997a9e87a860e3c39c164bf8a4079ef4ff63089.tar.bz2 opensim-SC-4997a9e87a860e3c39c164bf8a4079ef4ff63089.tar.xz |
fix VS creative indentation
Diffstat (limited to 'OpenSim/Region/Framework/Scenes/ScenePresence.cs')
-rw-r--r-- | OpenSim/Region/Framework/Scenes/ScenePresence.cs | 272 |
1 files changed, 136 insertions, 136 deletions
diff --git a/OpenSim/Region/Framework/Scenes/ScenePresence.cs b/OpenSim/Region/Framework/Scenes/ScenePresence.cs index 5387910..762dbd4 100644 --- a/OpenSim/Region/Framework/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Framework/Scenes/ScenePresence.cs | |||
@@ -1113,9 +1113,9 @@ namespace OpenSim.Region.Framework.Scenes | |||
1113 | 1113 | ||
1114 | //m_log.DebugFormat("[SCENE]: known regions in {0}: {1}", Scene.RegionInfo.RegionName, KnownChildRegionHandles.Count); | 1114 | //m_log.DebugFormat("[SCENE]: known regions in {0}: {1}", Scene.RegionInfo.RegionName, KnownChildRegionHandles.Count); |
1115 | 1115 | ||
1116 | // m_log.InfoFormat( | 1116 | // m_log.InfoFormat( |
1117 | // "[SCENE]: Upgrading child to root agent for {0} in {1}", | 1117 | // "[SCENE]: Upgrading child to root agent for {0} in {1}", |
1118 | // Name, m_scene.RegionInfo.RegionName); | 1118 | // Name, m_scene.RegionInfo.RegionName); |
1119 | 1119 | ||
1120 | if (ParentUUID != UUID.Zero) | 1120 | if (ParentUUID != UUID.Zero) |
1121 | { | 1121 | { |
@@ -1148,17 +1148,17 @@ namespace OpenSim.Region.Framework.Scenes | |||
1148 | // Must reset this here so that a teleport to a region next to an existing region does not keep the flag | 1148 | // Must reset this here so that a teleport to a region next to an existing region does not keep the flag |
1149 | // set and prevent the close of the connection on a subsequent re-teleport. | 1149 | // set and prevent the close of the connection on a subsequent re-teleport. |
1150 | // Should not be needed if we are not trying to tell this region to close | 1150 | // Should not be needed if we are not trying to tell this region to close |
1151 | // DoNotCloseAfterTeleport = false; | 1151 | // DoNotCloseAfterTeleport = false; |
1152 | 1152 | ||
1153 | IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); | 1153 | IGroupsModule gm = m_scene.RequestModuleInterface<IGroupsModule>(); |
1154 | if (gm != null) | 1154 | if (gm != null) |
1155 | Grouptitle = gm.GetGroupTitle(m_uuid); | 1155 | Grouptitle = gm.GetGroupTitle(m_uuid); |
1156 | 1156 | ||
1157 | RegionHandle = m_scene.RegionInfo.RegionHandle; | 1157 | RegionHandle = m_scene.RegionInfo.RegionHandle; |
1158 | 1158 | ||
1159 | m_scene.EventManager.TriggerSetRootAgentScene(m_uuid, m_scene); | 1159 | m_scene.EventManager.TriggerSetRootAgentScene(m_uuid, m_scene); |
1160 | 1160 | ||
1161 | /* this is now done by groups module on TriggerOnMakeRootAgent(this) below | 1161 | /* this should be done by groups module on TriggerOnMakeRootAgent(this) below |
1162 | at least XmlIRpcGroups | 1162 | at least XmlIRpcGroups |
1163 | UUID groupUUID = UUID.Zero; | 1163 | UUID groupUUID = UUID.Zero; |
1164 | string GroupName = string.Empty; | 1164 | string GroupName = string.Empty; |
@@ -1191,149 +1191,149 @@ namespace OpenSim.Region.Framework.Scenes | |||
1191 | } | 1191 | } |
1192 | // ------------------------------------ | 1192 | // ------------------------------------ |
1193 | */ | 1193 | */ |
1194 | if (ParentID == 0) | 1194 | if (ParentID == 0) |
1195 | { | 1195 | { |
1196 | // Moved this from SendInitialData to ensure that Appearance is initialized | 1196 | // Moved this from SendInitialData to ensure that Appearance is initialized |
1197 | // before the inventory is processed in MakeRootAgent. This fixes a race condition | 1197 | // before the inventory is processed in MakeRootAgent. This fixes a race condition |
1198 | // related to the handling of attachments | 1198 | // related to the handling of attachments |
1199 | 1199 | ||
1200 | if (m_scene.TestBorderCross(pos, Cardinals.E)) | 1200 | if (m_scene.TestBorderCross(pos, Cardinals.E)) |
1201 | { | 1201 | { |
1202 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.E); | 1202 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.E); |
1203 | pos.X = crossedBorder.BorderLine.Z - 1; | 1203 | pos.X = crossedBorder.BorderLine.Z - 1; |
1204 | } | 1204 | } |
1205 | 1205 | ||
1206 | if (m_scene.TestBorderCross(pos, Cardinals.N)) | 1206 | if (m_scene.TestBorderCross(pos, Cardinals.N)) |
1207 | { | 1207 | { |
1208 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.N); | 1208 | Border crossedBorder = m_scene.GetCrossedBorder(pos, Cardinals.N); |
1209 | pos.Y = crossedBorder.BorderLine.Z - 1; | 1209 | pos.Y = crossedBorder.BorderLine.Z - 1; |
1210 | } | 1210 | } |
1211 | 1211 | ||
1212 | CheckAndAdjustLandingPoint(ref pos); | 1212 | CheckAndAdjustLandingPoint(ref pos); |
1213 | 1213 | ||
1214 | if (pos.X < 0f || pos.Y < 0f || pos.Z < 0f) | 1214 | if (pos.X < 0f || pos.Y < 0f || pos.Z < 0f) |
1215 | { | 1215 | { |
1216 | m_log.WarnFormat( | 1216 | m_log.WarnFormat( |
1217 | "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Clamping", | 1217 | "[SCENE PRESENCE]: MakeRootAgent() was given an illegal position of {0} for avatar {1}, {2}. Clamping", |
1218 | pos, Name, UUID); | 1218 | pos, Name, UUID); |
1219 | 1219 | ||
1220 | if (pos.X < 0f) pos.X = 0f; | 1220 | if (pos.X < 0f) pos.X = 0f; |
1221 | if (pos.Y < 0f) pos.Y = 0f; | 1221 | if (pos.Y < 0f) pos.Y = 0f; |
1222 | if (pos.Z < 0f) pos.Z = 0f; | 1222 | if (pos.Z < 0f) pos.Z = 0f; |
1223 | } | 1223 | } |
1224 | 1224 | ||
1225 | float localAVHeight = 1.56f; | 1225 | float localAVHeight = 1.56f; |
1226 | if (Appearance.AvatarHeight > 0) | 1226 | if (Appearance.AvatarHeight > 0) |
1227 | localAVHeight = Appearance.AvatarHeight; | 1227 | localAVHeight = Appearance.AvatarHeight; |
1228 | 1228 | ||
1229 | float posZLimit = 0; | 1229 | float posZLimit = 0; |
1230 | 1230 | ||
1231 | if (pos.X < Constants.RegionSize && pos.Y < Constants.RegionSize) | 1231 | if (pos.X < Constants.RegionSize && pos.Y < Constants.RegionSize) |
1232 | posZLimit = (float)m_scene.Heightmap[(int)pos.X, (int)pos.Y]; | 1232 | posZLimit = (float)m_scene.Heightmap[(int)pos.X, (int)pos.Y]; |
1233 | |||
1234 | float newPosZ = posZLimit + localAVHeight / 2; | ||
1235 | if (posZLimit >= (pos.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ))) | ||
1236 | { | ||
1237 | pos.Z = newPosZ; | ||
1238 | } | ||
1239 | AbsolutePosition = pos; | ||
1240 | 1233 | ||
1241 | if (m_teleportFlags == TeleportFlags.Default) | 1234 | float newPosZ = posZLimit + localAVHeight / 2; |
1242 | { | 1235 | if (posZLimit >= (pos.Z - (localAVHeight / 2)) && !(Single.IsInfinity(newPosZ) || Single.IsNaN(newPosZ))) |
1243 | Vector3 vel = Velocity; | 1236 | { |
1244 | AddToPhysicalScene(isFlying); | 1237 | pos.Z = newPosZ; |
1245 | if (PhysicsActor != null) | 1238 | } |
1246 | PhysicsActor.SetMomentum(vel); | 1239 | AbsolutePosition = pos; |
1247 | } | ||
1248 | else | ||
1249 | AddToPhysicalScene(isFlying); | ||
1250 | 1240 | ||
1251 | // XXX: This is to trigger any secondary teleport needed for a megaregion when the user has teleported to a | 1241 | if (m_teleportFlags == TeleportFlags.Default) |
1252 | // location outside the 'root region' (the south-west 256x256 corner). This is the earlist we can do it | 1242 | { |
1253 | // since it requires a physics actor to be present. If it is left any later, then physics appears to reset | 1243 | Vector3 vel = Velocity; |
1254 | // the value to a negative position which does not trigger the border cross. | 1244 | AddToPhysicalScene(isFlying); |
1255 | // This may not be the best location for this. | 1245 | if (PhysicsActor != null) |
1256 | CheckForBorderCrossing(); | 1246 | PhysicsActor.SetMomentum(vel); |
1247 | } | ||
1248 | else | ||
1249 | AddToPhysicalScene(isFlying); | ||
1257 | 1250 | ||
1258 | if (ForceFly) | 1251 | // XXX: This is to trigger any secondary teleport needed for a megaregion when the user has teleported to a |
1259 | { | 1252 | // location outside the 'root region' (the south-west 256x256 corner). This is the earlist we can do it |
1260 | Flying = true; | 1253 | // since it requires a physics actor to be present. If it is left any later, then physics appears to reset |
1261 | } | 1254 | // the value to a negative position which does not trigger the border cross. |
1262 | else if (FlyDisabled) | 1255 | // This may not be the best location for this. |
1263 | { | 1256 | CheckForBorderCrossing(); |
1264 | Flying = false; | ||
1265 | } | ||
1266 | } | ||
1267 | // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying | ||
1268 | // avatar to return to the standing position in mid-air. On login it looks like this is being sent | ||
1269 | // elsewhere anyway | ||
1270 | // Animator.SendAnimPack(); | ||
1271 | |||
1272 | m_scene.SwapRootAgentCount(false); | ||
1273 | |||
1274 | // The initial login scene presence is already root when it gets here | ||
1275 | // and it has already rezzed the attachments and started their scripts. | ||
1276 | // We do the following only for non-login agents, because their scripts | ||
1277 | // haven't started yet. | ||
1278 | /* moved down | ||
1279 | if (PresenceType == PresenceType.Npc || (TeleportFlags & TeleportFlags.ViaLogin) != 0) | ||
1280 | { | ||
1281 | // Viewers which have a current outfit folder will actually rez their own attachments. However, | ||
1282 | // viewers without (e.g. v1 viewers) will not, so we still need to make this call. | ||
1283 | if (Scene.AttachmentsModule != null) | ||
1284 | Util.FireAndForget( | ||
1285 | o => | ||
1286 | { | ||
1287 | // if (PresenceType != PresenceType.Npc && Util.FireAndForgetMethod != FireAndForgetMethod.None) | ||
1288 | // System.Threading.Thread.Sleep(7000); | ||
1289 | |||
1290 | Scene.AttachmentsModule.RezAttachments(this); | ||
1291 | }); | ||
1292 | } | ||
1293 | else | ||
1294 | 1257 | ||
1295 | { | 1258 | if (ForceFly) |
1296 | // We need to restart scripts here so that they receive the correct changed events (CHANGED_TELEPORT | 1259 | { |
1297 | // and CHANGED_REGION) when the attachments have been rezzed in the new region. This cannot currently | 1260 | Flying = true; |
1298 | // be done in AttachmentsModule.CopyAttachments(AgentData ad, IScenePresence sp) itself since we are | 1261 | } |
1299 | // not transporting the required data. | 1262 | else if (FlyDisabled) |
1300 | // | 1263 | { |
1301 | // We need to restart scripts here so that they receive the correct changed events (CHANGED_TELEPORT | 1264 | Flying = false; |
1302 | // and CHANGED_REGION) when the attachments have been rezzed in the new region. This cannot currently | 1265 | } |
1303 | // be done in AttachmentsModule.CopyAttachments(AgentData ad, IScenePresence sp) itself since we are | 1266 | } |
1304 | // not transporting the required data. | 1267 | // Don't send an animation pack here, since on a region crossing this will sometimes cause a flying |
1305 | // | 1268 | // avatar to return to the standing position in mid-air. On login it looks like this is being sent |
1306 | // We must take a copy of the attachments list here (rather than locking) to avoid a deadlock where a script in one of | 1269 | // elsewhere anyway |
1307 | // the attachments may start processing an event (which locks ScriptInstance.m_Script) that then calls a method here | 1270 | // Animator.SendAnimPack(); |
1308 | // which needs to lock m_attachments. ResumeScripts() needs to take a ScriptInstance.m_Script lock to try to unset the Suspend status. | ||
1309 | // | ||
1310 | // FIXME: In theory, this deadlock should not arise since scripts should not be processing events until ResumeScripts(). | ||
1311 | // But XEngine starts all scripts unsuspended. Starting them suspended will not currently work because script rezzing | ||
1312 | // is placed in an asynchronous queue in XEngine and so the ResumeScripts() call will almost certainly execute before the | ||
1313 | // script is rezzed. This means the ResumeScripts() does absolutely nothing when using XEngine. | ||
1314 | // | ||
1315 | // One cannot simply iterate over attachments in a fire and forget thread because this would no longer | ||
1316 | // be locked, allowing race conditions if other code changes the attachments list. | ||
1317 | |||
1318 | List<SceneObjectGroup> attachments = GetAttachments(); | ||
1319 | |||
1320 | if (attachments.Count > 0) | ||
1321 | { | ||
1322 | m_log.DebugFormat( | ||
1323 | "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name); | ||
1324 | 1271 | ||
1325 | // Resume scripts this possible should also be moved down after sending the avatar to viewer ? | 1272 | m_scene.SwapRootAgentCount(false); |
1326 | foreach (SceneObjectGroup sog in attachments) | 1273 | |
1327 | { | 1274 | // The initial login scene presence is already root when it gets here |
1328 | // sending attachments before the avatar ? | 1275 | // and it has already rezzed the attachments and started their scripts. |
1329 | // moved to completemovement where it already was | 1276 | // We do the following only for non-login agents, because their scripts |
1330 | // sog.ScheduleGroupForFullUpdate(); | 1277 | // haven't started yet. |
1331 | sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource()); | 1278 | /* moved down |
1332 | sog.ResumeScripts(); | 1279 | if (PresenceType == PresenceType.Npc || (TeleportFlags & TeleportFlags.ViaLogin) != 0) |
1333 | } | 1280 | { |
1334 | } | 1281 | // Viewers which have a current outfit folder will actually rez their own attachments. However, |
1335 | } | 1282 | // viewers without (e.g. v1 viewers) will not, so we still need to make this call. |
1336 | */ | 1283 | if (Scene.AttachmentsModule != null) |
1284 | Util.FireAndForget( | ||
1285 | o => | ||
1286 | { | ||
1287 | // if (PresenceType != PresenceType.Npc && Util.FireAndForgetMethod != FireAndForgetMethod.None) | ||
1288 | // System.Threading.Thread.Sleep(7000); | ||
1289 | |||
1290 | Scene.AttachmentsModule.RezAttachments(this); | ||
1291 | }); | ||
1292 | } | ||
1293 | else | ||
1294 | |||
1295 | { | ||
1296 | // We need to restart scripts here so that they receive the correct changed events (CHANGED_TELEPORT | ||
1297 | // and CHANGED_REGION) when the attachments have been rezzed in the new region. This cannot currently | ||
1298 | // be done in AttachmentsModule.CopyAttachments(AgentData ad, IScenePresence sp) itself since we are | ||
1299 | // not transporting the required data. | ||
1300 | // | ||
1301 | // We need to restart scripts here so that they receive the correct changed events (CHANGED_TELEPORT | ||
1302 | // and CHANGED_REGION) when the attachments have been rezzed in the new region. This cannot currently | ||
1303 | // be done in AttachmentsModule.CopyAttachments(AgentData ad, IScenePresence sp) itself since we are | ||
1304 | // not transporting the required data. | ||
1305 | // | ||
1306 | // We must take a copy of the attachments list here (rather than locking) to avoid a deadlock where a script in one of | ||
1307 | // the attachments may start processing an event (which locks ScriptInstance.m_Script) that then calls a method here | ||
1308 | // which needs to lock m_attachments. ResumeScripts() needs to take a ScriptInstance.m_Script lock to try to unset the Suspend status. | ||
1309 | // | ||
1310 | // FIXME: In theory, this deadlock should not arise since scripts should not be processing events until ResumeScripts(). | ||
1311 | // But XEngine starts all scripts unsuspended. Starting them suspended will not currently work because script rezzing | ||
1312 | // is placed in an asynchronous queue in XEngine and so the ResumeScripts() call will almost certainly execute before the | ||
1313 | // script is rezzed. This means the ResumeScripts() does absolutely nothing when using XEngine. | ||
1314 | // | ||
1315 | // One cannot simply iterate over attachments in a fire and forget thread because this would no longer | ||
1316 | // be locked, allowing race conditions if other code changes the attachments list. | ||
1317 | |||
1318 | List<SceneObjectGroup> attachments = GetAttachments(); | ||
1319 | |||
1320 | if (attachments.Count > 0) | ||
1321 | { | ||
1322 | m_log.DebugFormat( | ||
1323 | "[SCENE PRESENCE]: Restarting scripts in attachments for {0} in {1}", Name, Scene.Name); | ||
1324 | |||
1325 | // Resume scripts this possible should also be moved down after sending the avatar to viewer ? | ||
1326 | foreach (SceneObjectGroup sog in attachments) | ||
1327 | { | ||
1328 | // sending attachments before the avatar ? | ||
1329 | // moved to completemovement where it already was | ||
1330 | // sog.ScheduleGroupForFullUpdate(); | ||
1331 | sog.RootPart.ParentGroup.CreateScriptInstances(0, false, m_scene.DefaultScriptEngine, GetStateSource()); | ||
1332 | sog.ResumeScripts(); | ||
1333 | } | ||
1334 | } | ||
1335 | } | ||
1336 | */ | ||
1337 | /* | 1337 | /* |
1338 | SendAvatarDataToAllAgents(); | 1338 | SendAvatarDataToAllAgents(); |
1339 | 1339 | ||