diff options
Diffstat (limited to 'OpenSim/Region')
-rw-r--r-- | OpenSim/Region/Application/OpenSimMain.cs | 3 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Modules/TextureDownloadModule.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/Environment/PermissionManager.cs | 14 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/InnerScene.cs | 30 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 19 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 88 | ||||
-rw-r--r-- | OpenSim/Region/Examples/SimpleApp/MyWorld.cs | 4 | ||||
-rw-r--r-- | OpenSim/Region/Examples/SimpleApp/Program.cs | 3 |
8 files changed, 99 insertions, 64 deletions
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index c1df86c..ce2b856 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs | |||
@@ -366,9 +366,10 @@ namespace OpenSim | |||
366 | protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, | 366 | protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, |
367 | AgentCircuitManager circuitManager) | 367 | AgentCircuitManager circuitManager) |
368 | { | 368 | { |
369 | PermissionManager permissionManager = new PermissionManager(); | ||
369 | SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); | 370 | SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); |
370 | return | 371 | return |
371 | new Scene(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, storageManager, m_httpServer, | 372 | new Scene(regionInfo, circuitManager, permissionManager, m_commsManager, sceneGridService, m_assetCache, storageManager, m_httpServer, |
372 | m_moduleLoader, m_dumpAssetsToFile, m_physicalPrim); | 373 | m_moduleLoader, m_dumpAssetsToFile, m_physicalPrim); |
373 | } | 374 | } |
374 | 375 | ||
diff --git a/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs b/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs index 01a55fb..87d6231 100644 --- a/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs +++ b/OpenSim/Region/Environment/Modules/TextureDownloadModule.cs | |||
@@ -36,7 +36,7 @@ using OpenSim.Region.Environment.Scenes; | |||
36 | 36 | ||
37 | namespace OpenSim.Region.Environment.Modules | 37 | namespace OpenSim.Region.Environment.Modules |
38 | { | 38 | { |
39 | //this is first attempt to start breaking the mess thats called the assetcache up. | 39 | //this is a first attempt, to start breaking the mess thats called the assetcache up. |
40 | // basically this should be the texture sending (to clients) code moved out of assetcache | 40 | // basically this should be the texture sending (to clients) code moved out of assetcache |
41 | //and some small clean up | 41 | //and some small clean up |
42 | // but on first tests it didn't seem to work very well so is currently not in use. | 42 | // but on first tests it didn't seem to work very well so is currently not in use. |
diff --git a/OpenSim/Region/Environment/PermissionManager.cs b/OpenSim/Region/Environment/PermissionManager.cs index 560ecf3..412c6e7 100644 --- a/OpenSim/Region/Environment/PermissionManager.cs +++ b/OpenSim/Region/Environment/PermissionManager.cs | |||
@@ -48,12 +48,20 @@ namespace OpenSim.Region.Environment | |||
48 | set { m_bypassPermissions = value; } | 48 | set { m_bypassPermissions = value; } |
49 | } | 49 | } |
50 | 50 | ||
51 | public PermissionManager() | ||
52 | { | ||
53 | } | ||
51 | 54 | ||
52 | public PermissionManager(Scene scene) | 55 | public PermissionManager(Scene scene) |
53 | { | 56 | { |
54 | m_scene = scene; | 57 | m_scene = scene; |
55 | } | 58 | } |
56 | 59 | ||
60 | public void Initialise(Scene scene) | ||
61 | { | ||
62 | m_scene = scene; | ||
63 | } | ||
64 | |||
57 | protected virtual void SendPermissionError(LLUUID user, string reason) | 65 | protected virtual void SendPermissionError(LLUUID user, string reason) |
58 | { | 66 | { |
59 | m_scene.EventManager.TriggerPermissionError(user, reason); | 67 | m_scene.EventManager.TriggerPermissionError(user, reason); |
@@ -188,6 +196,12 @@ namespace OpenSim.Region.Environment | |||
188 | return GenericObjectPermission(user, obj); | 196 | return GenericObjectPermission(user, obj); |
189 | } | 197 | } |
190 | 198 | ||
199 | public virtual bool CanCopyObject(LLUUID user, LLUUID obj) | ||
200 | { | ||
201 | return true; | ||
202 | // return GenericObjectPermission(user, obj); | ||
203 | } | ||
204 | |||
191 | #endregion | 205 | #endregion |
192 | 206 | ||
193 | #region Communication Permissions | 207 | #region Communication Permissions |
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index 1625e80..1f3bc95 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs | |||
@@ -119,7 +119,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
119 | { | 119 | { |
120 | if (((SceneObjectGroup)obj).LocalId == localID) | 120 | if (((SceneObjectGroup)obj).LocalId == localID) |
121 | { | 121 | { |
122 | m_parentScene.RemoveEntity((SceneObjectGroup)obj); | 122 | m_parentScene.RemoveEntity((SceneObjectGroup)obj); |
123 | return; | 123 | return; |
124 | } | 124 | } |
125 | } | 125 | } |
@@ -553,7 +553,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
553 | parenPrim.LinkToGroup(sceneObj); | 553 | parenPrim.LinkToGroup(sceneObj); |
554 | } | 554 | } |
555 | } | 555 | } |
556 | 556 | ||
557 | /// <summary> | 557 | /// <summary> |
558 | /// Delink a linkset | 558 | /// Delink a linkset |
559 | /// </summary> | 559 | /// </summary> |
@@ -568,7 +568,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
568 | // XXX I'm anticipating that building this dictionary once is more efficient than | 568 | // XXX I'm anticipating that building this dictionary once is more efficient than |
569 | // repeated scanning of the Entity.Values for a large number of primIds. However, it might | 569 | // repeated scanning of the Entity.Values for a large number of primIds. However, it might |
570 | // be more efficient yet to keep this dictionary permanently on hand. | 570 | // be more efficient yet to keep this dictionary permanently on hand. |
571 | Dictionary<uint, SceneObjectGroup> sceneObjects = new Dictionary<uint, SceneObjectGroup>(); | 571 | Dictionary<uint, SceneObjectGroup> sceneObjects = new Dictionary<uint, SceneObjectGroup>(); |
572 | foreach (EntityBase ent in Entities.Values) | 572 | foreach (EntityBase ent in Entities.Values) |
573 | { | 573 | { |
574 | if (ent is SceneObjectGroup) | 574 | if (ent is SceneObjectGroup) |
@@ -576,17 +576,17 @@ namespace OpenSim.Region.Environment.Scenes | |||
576 | SceneObjectGroup obj = (SceneObjectGroup)ent; | 576 | SceneObjectGroup obj = (SceneObjectGroup)ent; |
577 | sceneObjects.Add(obj.LocalId, obj); | 577 | sceneObjects.Add(obj.LocalId, obj); |
578 | } | 578 | } |
579 | } | 579 | } |
580 | 580 | ||
581 | // Find the root prim among the prim ids we've been given | 581 | // Find the root prim among the prim ids we've been given |
582 | for (int i = 0; i < primIds.Count; i++) | 582 | for (int i = 0; i < primIds.Count; i++) |
583 | { | 583 | { |
584 | if (sceneObjects.ContainsKey(primIds[i])) | 584 | if (sceneObjects.ContainsKey(primIds[i])) |
585 | { | 585 | { |
586 | parenPrim = sceneObjects[primIds[i]]; | 586 | parenPrim = sceneObjects[primIds[i]]; |
587 | primIds.RemoveAt(i); | 587 | primIds.RemoveAt(i); |
588 | break; | 588 | break; |
589 | } | 589 | } |
590 | } | 590 | } |
591 | 591 | ||
592 | if (parenPrim != null) | 592 | if (parenPrim != null) |
@@ -594,7 +594,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
594 | foreach (uint childPrimId in primIds) | 594 | foreach (uint childPrimId in primIds) |
595 | { | 595 | { |
596 | parenPrim.DelinkFromGroup(childPrimId); | 596 | parenPrim.DelinkFromGroup(childPrimId); |
597 | } | 597 | } |
598 | } | 598 | } |
599 | else | 599 | else |
600 | { | 600 | { |
@@ -627,19 +627,21 @@ namespace OpenSim.Region.Environment.Scenes | |||
627 | 627 | ||
628 | if (originPrim != null) | 628 | if (originPrim != null) |
629 | { | 629 | { |
630 | SceneObjectGroup copy = originPrim.Copy(AgentID, GroupID); | 630 | if (PermissionsMngr.CanCopyObject(AgentID, originPrim.UUID)) |
631 | copy.AbsolutePosition = copy.AbsolutePosition + offset; | 631 | { |
632 | Entities.Add(copy.UUID, copy); | 632 | SceneObjectGroup copy = originPrim.Copy(AgentID, GroupID); |
633 | 633 | copy.AbsolutePosition = copy.AbsolutePosition + offset; | |
634 | copy.ScheduleGroupForFullUpdate(); | 634 | Entities.Add(copy.UUID, copy); |
635 | 635 | ||
636 | copy.ScheduleGroupForFullUpdate(); | ||
637 | } | ||
636 | } | 638 | } |
637 | else | 639 | else |
638 | { | 640 | { |
639 | MainLog.Instance.Warn("client", "Attempted to duplicate nonexistant prim"); | 641 | MainLog.Instance.Warn("client", "Attempted to duplicate nonexistant prim"); |
640 | } | 642 | } |
641 | } | ||
642 | 643 | ||
644 | } | ||
643 | 645 | ||
644 | #endregion | 646 | #endregion |
645 | } | 647 | } |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 2c765a3..1400e60 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -195,7 +195,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
195 | 195 | ||
196 | #region Constructors | 196 | #region Constructors |
197 | 197 | ||
198 | public Scene(RegionInfo regInfo, AgentCircuitManager authen, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, | 198 | public Scene(RegionInfo regInfo, AgentCircuitManager authen, PermissionManager permissionManager, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, |
199 | AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, | 199 | AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, |
200 | ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim) | 200 | ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim) |
201 | { | 201 | { |
@@ -217,15 +217,14 @@ namespace OpenSim.Region.Environment.Scenes | |||
217 | m_LandManager = new LandManager(this, m_regInfo); | 217 | m_LandManager = new LandManager(this, m_regInfo); |
218 | m_estateManager = new EstateManager(this, m_regInfo); | 218 | m_estateManager = new EstateManager(this, m_regInfo); |
219 | m_eventManager = new EventManager(); | 219 | m_eventManager = new EventManager(); |
220 | m_permissionManager = new PermissionManager(this); | 220 | |
221 | m_permissionManager = permissionManager; | ||
222 | m_permissionManager.Initialise(this); | ||
221 | 223 | ||
222 | m_innerScene = new InnerScene(this, m_regInfo, m_permissionManager); | 224 | m_innerScene = new InnerScene(this, m_regInfo, m_permissionManager); |
223 | m_sceneXmlLoader = new SceneXmlLoader(this, m_innerScene, m_regInfo); | 225 | m_sceneXmlLoader = new SceneXmlLoader(this, m_innerScene, m_regInfo); |
224 | 226 | ||
225 | m_eventManager.OnParcelPrimCountAdd += | 227 | RegisterDefaultSceneEvents(); |
226 | m_LandManager.addPrimToLandPrimCounts; | ||
227 | |||
228 | m_eventManager.OnPermissionError += SendPermissionAlert; | ||
229 | 228 | ||
230 | MainLog.Instance.Verbose("Creating new entitities instance"); | 229 | MainLog.Instance.Verbose("Creating new entitities instance"); |
231 | Entities = new Dictionary<LLUUID, EntityBase>(); | 230 | Entities = new Dictionary<LLUUID, EntityBase>(); |
@@ -244,6 +243,13 @@ namespace OpenSim.Region.Environment.Scenes | |||
244 | #endregion | 243 | #endregion |
245 | 244 | ||
246 | #region Startup / Close Methods | 245 | #region Startup / Close Methods |
246 | |||
247 | protected virtual void RegisterDefaultSceneEvents() | ||
248 | { | ||
249 | m_eventManager.OnParcelPrimCountAdd += m_LandManager.addPrimToLandPrimCounts; | ||
250 | m_eventManager.OnPermissionError += SendPermissionAlert; | ||
251 | } | ||
252 | |||
247 | public override void Close() | 253 | public override void Close() |
248 | { | 254 | { |
249 | ForEachScenePresence(delegate(ScenePresence avatar) | 255 | ForEachScenePresence(delegate(ScenePresence avatar) |
@@ -504,6 +510,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
504 | } | 510 | } |
505 | 511 | ||
506 | CreateTerrainTexture(); | 512 | CreateTerrainTexture(); |
513 | CommsManager.GridService.RegisterRegion(RegionInfo); //hack to update the terrain texture in grid mode so it shows on world map | ||
507 | } | 514 | } |
508 | catch (Exception e) | 515 | catch (Exception e) |
509 | { | 516 | { |
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 67b375a..b6daad6 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -147,6 +147,13 @@ namespace OpenSim.Region.Environment.Scenes | |||
147 | get { return m_lastname; } | 147 | get { return m_lastname; } |
148 | } | 148 | } |
149 | 149 | ||
150 | protected bool m_allowMovement = true; | ||
151 | public bool AllowMovement | ||
152 | { | ||
153 | get { return m_allowMovement; } | ||
154 | set { m_allowMovement = value; } | ||
155 | } | ||
156 | |||
150 | private readonly IClientAPI m_controllingClient; | 157 | private readonly IClientAPI m_controllingClient; |
151 | protected PhysicsActor m_physicsActor; | 158 | protected PhysicsActor m_physicsActor; |
152 | 159 | ||
@@ -528,58 +535,61 @@ namespace OpenSim.Region.Environment.Scenes | |||
528 | // Console.WriteLine("DEBUG: HandleAgentUpdate: null PhysicsActor!"); | 535 | // Console.WriteLine("DEBUG: HandleAgentUpdate: null PhysicsActor!"); |
529 | return; | 536 | return; |
530 | } | 537 | } |
531 | |||
532 | int i = 0; | ||
533 | bool update_movementflag = false; | ||
534 | bool update_rotation = false; | ||
535 | bool DCFlagKeyPressed = false; | ||
536 | Vector3 agent_control_v3 = new Vector3(0, 0, 0); | ||
537 | Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | ||
538 | bool oldflying = PhysicsActor.Flying; | ||
539 | |||
540 | 538 | ||
541 | PhysicsActor.Flying = ((flags & (uint) MainAvatar.ControlFlags.AGENT_CONTROL_FLY) != 0); | 539 | if (m_allowMovement) |
542 | if (PhysicsActor.Flying != oldflying) | ||
543 | { | 540 | { |
544 | update_movementflag = true; | 541 | int i = 0; |
545 | } | 542 | bool update_movementflag = false; |
543 | bool update_rotation = false; | ||
544 | bool DCFlagKeyPressed = false; | ||
545 | Vector3 agent_control_v3 = new Vector3(0, 0, 0); | ||
546 | Quaternion q = new Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); | ||
547 | bool oldflying = PhysicsActor.Flying; | ||
546 | 548 | ||
547 | if (q != m_bodyRot) | ||
548 | { | ||
549 | m_bodyRot = q; | ||
550 | update_rotation = true; | ||
551 | } | ||
552 | 549 | ||
553 | if (m_parentID == 0) | 550 | PhysicsActor.Flying = ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_FLY) != 0); |
554 | { | 551 | if (PhysicsActor.Flying != oldflying) |
555 | foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof (Dir_ControlFlags))) | ||
556 | { | 552 | { |
557 | if ((flags & (uint) DCF) != 0) | 553 | update_movementflag = true; |
554 | } | ||
555 | |||
556 | if (q != m_bodyRot) | ||
557 | { | ||
558 | m_bodyRot = q; | ||
559 | update_rotation = true; | ||
560 | } | ||
561 | |||
562 | if (m_parentID == 0) | ||
563 | { | ||
564 | foreach (Dir_ControlFlags DCF in Enum.GetValues(typeof(Dir_ControlFlags))) | ||
558 | { | 565 | { |
559 | DCFlagKeyPressed = true; | 566 | if ((flags & (uint)DCF) != 0) |
560 | agent_control_v3 += Dir_Vectors[i]; | ||
561 | if ((m_movementflag & (uint) DCF) == 0) | ||
562 | { | 567 | { |
563 | m_movementflag += (byte) (uint) DCF; | 568 | DCFlagKeyPressed = true; |
564 | update_movementflag = true; | 569 | agent_control_v3 += Dir_Vectors[i]; |
570 | if ((m_movementflag & (uint)DCF) == 0) | ||
571 | { | ||
572 | m_movementflag += (byte)(uint)DCF; | ||
573 | update_movementflag = true; | ||
574 | } | ||
565 | } | 575 | } |
566 | } | 576 | else |
567 | else | ||
568 | { | ||
569 | if ((m_movementflag & (uint) DCF) != 0) | ||
570 | { | 577 | { |
571 | m_movementflag -= (byte) (uint) DCF; | 578 | if ((m_movementflag & (uint)DCF) != 0) |
572 | update_movementflag = true; | 579 | { |
580 | m_movementflag -= (byte)(uint)DCF; | ||
581 | update_movementflag = true; | ||
582 | } | ||
573 | } | 583 | } |
584 | i++; | ||
574 | } | 585 | } |
575 | i++; | ||
576 | } | 586 | } |
577 | } | ||
578 | 587 | ||
579 | if ((update_movementflag) || (update_rotation && DCFlagKeyPressed)) | 588 | if ((update_movementflag) || (update_rotation && DCFlagKeyPressed)) |
580 | { | 589 | { |
581 | AddNewMovement(agent_control_v3, q); | 590 | AddNewMovement(agent_control_v3, q); |
582 | UpdateMovementAnimations(update_movementflag); | 591 | UpdateMovementAnimations(update_movementflag); |
592 | } | ||
583 | } | 593 | } |
584 | 594 | ||
585 | } | 595 | } |
diff --git a/OpenSim/Region/Examples/SimpleApp/MyWorld.cs b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs index ae2f5ad..8cfbf27 100644 --- a/OpenSim/Region/Examples/SimpleApp/MyWorld.cs +++ b/OpenSim/Region/Examples/SimpleApp/MyWorld.cs | |||
@@ -42,10 +42,10 @@ namespace SimpleApp | |||
42 | { | 42 | { |
43 | private List<ScenePresence> m_avatars; | 43 | private List<ScenePresence> m_avatars; |
44 | 44 | ||
45 | public MyWorld(RegionInfo regionInfo, AgentCircuitManager authen, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, | 45 | public MyWorld(RegionInfo regionInfo, AgentCircuitManager authen, PermissionManager permissionManager, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, |
46 | AssetCache assetCach, StorageManager storeMan, BaseHttpServer httpServer, | 46 | AssetCache assetCach, StorageManager storeMan, BaseHttpServer httpServer, |
47 | ModuleLoader moduleLoader, bool physicalPrim) | 47 | ModuleLoader moduleLoader, bool physicalPrim) |
48 | : base(regionInfo, authen, commsMan, sceneGridService, assetCach, storeMan, httpServer, moduleLoader, false, true) | 48 | : base(regionInfo, authen, permissionManager, commsMan, sceneGridService, assetCach, storeMan, httpServer, moduleLoader, false, true) |
49 | { | 49 | { |
50 | m_avatars = new List<Avatar>(); | 50 | m_avatars = new List<Avatar>(); |
51 | } | 51 | } |
diff --git a/OpenSim/Region/Examples/SimpleApp/Program.cs b/OpenSim/Region/Examples/SimpleApp/Program.cs index bd88e61..10b6258 100644 --- a/OpenSim/Region/Examples/SimpleApp/Program.cs +++ b/OpenSim/Region/Examples/SimpleApp/Program.cs | |||
@@ -169,9 +169,10 @@ namespace SimpleApp | |||
169 | protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, | 169 | protected override Scene CreateScene(RegionInfo regionInfo, StorageManager storageManager, |
170 | AgentCircuitManager circuitManager) | 170 | AgentCircuitManager circuitManager) |
171 | { | 171 | { |
172 | PermissionManager permissionManager = new PermissionManager(); | ||
172 | SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); | 173 | SceneCommunicationService sceneGridService = new SceneCommunicationService(m_commsManager); |
173 | return | 174 | return |
174 | new MyWorld(regionInfo, circuitManager, m_commsManager, sceneGridService, m_assetCache, storageManager, m_httpServer, | 175 | new MyWorld(regionInfo, circuitManager, permissionManager, m_commsManager, sceneGridService, m_assetCache, storageManager, m_httpServer, |
175 | new ModuleLoader(m_log, m_config), true); | 176 | new ModuleLoader(m_log, m_config), true); |
176 | } | 177 | } |
177 | 178 | ||