diff options
Diffstat (limited to 'OpenSim/Region/Environment')
-rw-r--r-- | OpenSim/Region/Environment/ModuleLoader.cs | 3 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Modules/DynamicTextureModule.cs | 1 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/Scene.cs | 8 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | 5 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/ScenePresence.cs | 12 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs | 167 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Types/UpdateQueue.cs | 21 |
7 files changed, 211 insertions, 6 deletions
diff --git a/OpenSim/Region/Environment/ModuleLoader.cs b/OpenSim/Region/Environment/ModuleLoader.cs index e8e7bc2..be3384b 100644 --- a/OpenSim/Region/Environment/ModuleLoader.cs +++ b/OpenSim/Region/Environment/ModuleLoader.cs | |||
@@ -44,6 +44,9 @@ namespace OpenSim.Region.Environment | |||
44 | LoadedModules.Add(avatarProfiles); | 44 | LoadedModules.Add(avatarProfiles); |
45 | 45 | ||
46 | this.LoadRegionModule("OpenSim.Region.ExtensionsScriptModule.dll", "ExtensionsScriptingModule", scene); | 46 | this.LoadRegionModule("OpenSim.Region.ExtensionsScriptModule.dll", "ExtensionsScriptingModule", scene); |
47 | |||
48 | string lslPath = System.IO.Path.Combine("ScriptEngines", "OpenSim.Region.ScriptEngine.DotNetEngine.dll"); | ||
49 | this.LoadRegionModule(lslPath, "LSLScriptingModule", scene); | ||
47 | } | 50 | } |
48 | 51 | ||
49 | public void LoadDefaultSharedModules(string exceptModules) | 52 | public void LoadDefaultSharedModules(string exceptModules) |
diff --git a/OpenSim/Region/Environment/Modules/DynamicTextureModule.cs b/OpenSim/Region/Environment/Modules/DynamicTextureModule.cs index 9fbd68e..8223919 100644 --- a/OpenSim/Region/Environment/Modules/DynamicTextureModule.cs +++ b/OpenSim/Region/Environment/Modules/DynamicTextureModule.cs | |||
@@ -5,7 +5,6 @@ using System.Threading; | |||
5 | using System.IO; | 5 | using System.IO; |
6 | using System.Collections.Generic; | 6 | using System.Collections.Generic; |
7 | using libsecondlife; | 7 | using libsecondlife; |
8 | using OpenJPEGNet; | ||
9 | using OpenSim.Region.Environment.Scenes; | 8 | using OpenSim.Region.Environment.Scenes; |
10 | using OpenSim.Region.Environment.Interfaces; | 9 | using OpenSim.Region.Environment.Interfaces; |
11 | using OpenSim.Framework.Interfaces; | 10 | using OpenSim.Framework.Interfaces; |
diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 4151074..1ce75e0 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs | |||
@@ -44,6 +44,7 @@ using OpenSim.Framework.Communications.Caches; | |||
44 | using OpenSim.Region.Environment.LandManagement; | 44 | using OpenSim.Region.Environment.LandManagement; |
45 | using OpenSim.Region.Environment; | 45 | using OpenSim.Region.Environment; |
46 | using OpenSim.Region.Environment.Interfaces; | 46 | using OpenSim.Region.Environment.Interfaces; |
47 | using OpenSim.Region.Environment.Types; | ||
47 | using OpenSim.Region.Terrain; | 48 | using OpenSim.Region.Terrain; |
48 | using OpenSim.Framework.Data; | 49 | using OpenSim.Framework.Data; |
49 | using Caps = OpenSim.Region.Capabilities.Caps; | 50 | using Caps = OpenSim.Region.Capabilities.Caps; |
@@ -72,6 +73,8 @@ namespace OpenSim.Region.Environment.Scenes | |||
72 | private int m_timePhase = 24; | 73 | private int m_timePhase = 24; |
73 | private int m_timeUpdateCount; | 74 | private int m_timeUpdateCount; |
74 | 75 | ||
76 | public BasicQuadTreeNode QuadTree; | ||
77 | |||
75 | private Mutex updateLock; | 78 | private Mutex updateLock; |
76 | 79 | ||
77 | protected ModuleLoader m_moduleLoader; | 80 | protected ModuleLoader m_moduleLoader; |
@@ -178,6 +181,10 @@ namespace OpenSim.Region.Environment.Scenes | |||
178 | 181 | ||
179 | m_eventManager.OnPermissionError += SendPermissionAlert; | 182 | m_eventManager.OnPermissionError += SendPermissionAlert; |
180 | 183 | ||
184 | QuadTree = new BasicQuadTreeNode(null, 0, 0, 256, 256); | ||
185 | QuadTree.Subdivide(); | ||
186 | QuadTree.Subdivide(); | ||
187 | |||
181 | MainLog.Instance.Verbose("Creating new entitities instance"); | 188 | MainLog.Instance.Verbose("Creating new entitities instance"); |
182 | Entities = new Dictionary<LLUUID, EntityBase>(); | 189 | Entities = new Dictionary<LLUUID, EntityBase>(); |
183 | Avatars = new Dictionary<LLUUID, ScenePresence>(); | 190 | Avatars = new Dictionary<LLUUID, ScenePresence>(); |
@@ -596,6 +603,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
596 | { | 603 | { |
597 | if (!Entities.ContainsKey(sceneObject.UUID)) | 604 | if (!Entities.ContainsKey(sceneObject.UUID)) |
598 | { | 605 | { |
606 | QuadTree.AddObject(sceneObject); | ||
599 | Entities.Add(sceneObject.UUID, sceneObject); | 607 | Entities.Add(sceneObject.UUID, sceneObject); |
600 | } | 608 | } |
601 | } | 609 | } |
diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs index dec017e..9e207c8 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectPart.cs | |||
@@ -43,6 +43,9 @@ namespace OpenSim.Region.Environment.Scenes | |||
43 | 43 | ||
44 | protected byte[] m_particleSystem = new byte[0]; | 44 | protected byte[] m_particleSystem = new byte[0]; |
45 | 45 | ||
46 | public uint TimeStampFull = 0; | ||
47 | public uint TimeStampTerse = 0; | ||
48 | |||
46 | protected SceneObjectGroup m_parentGroup; | 49 | protected SceneObjectGroup m_parentGroup; |
47 | 50 | ||
48 | /// <summary> | 51 | /// <summary> |
@@ -366,6 +369,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
366 | { | 369 | { |
367 | m_parentGroup.HasChanged = true; | 370 | m_parentGroup.HasChanged = true; |
368 | } | 371 | } |
372 | this.TimeStampFull =(uint) Util.UnixTimeSinceEpoch(); | ||
369 | m_updateFlag = 2; | 373 | m_updateFlag = 2; |
370 | } | 374 | } |
371 | 375 | ||
@@ -380,6 +384,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
380 | { | 384 | { |
381 | m_parentGroup.HasChanged = true; | 385 | m_parentGroup.HasChanged = true; |
382 | } | 386 | } |
387 | this.TimeStampTerse = (uint)Util.UnixTimeSinceEpoch(); | ||
383 | m_updateFlag = 1; | 388 | m_updateFlag = 1; |
384 | } | 389 | } |
385 | } | 390 | } |
diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 285c691..7b7c595 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs | |||
@@ -88,11 +88,13 @@ namespace OpenSim.Region.Environment.Scenes | |||
88 | public delegate void SignificantClientMovement(IClientAPI remote_client); | 88 | public delegate void SignificantClientMovement(IClientAPI remote_client); |
89 | public event SignificantClientMovement OnSignificantClientMovement; | 89 | public event SignificantClientMovement OnSignificantClientMovement; |
90 | 90 | ||
91 | public List<SceneObjectGroup> InterestList = new List<SceneObjectGroup>(); | ||
92 | |||
91 | // private Queue<SceneObjectGroup> m_fullGroupUpdates = new Queue<SceneObjectGroup>(); | 93 | // private Queue<SceneObjectGroup> m_fullGroupUpdates = new Queue<SceneObjectGroup>(); |
92 | // private Queue<SceneObjectGroup> m_terseGroupUpdates = new Queue<SceneObjectGroup>(); | 94 | // private Queue<SceneObjectGroup> m_terseGroupUpdates = new Queue<SceneObjectGroup>(); |
93 | 95 | ||
94 | private Queue<SceneObjectPart> m_fullPartUpdates = new Queue<SceneObjectPart>(); | 96 | private Queue<SceneObjectPart> m_fullPartUpdates = new Queue<SceneObjectPart>(); |
95 | private Queue<SceneObjectPart> m_teserPartUpdates = new Queue<SceneObjectPart>(); | 97 | private Queue<SceneObjectPart> m_tersePartUpdates = new Queue<SceneObjectPart>(); |
96 | 98 | ||
97 | #region Properties | 99 | #region Properties |
98 | /// <summary> | 100 | /// <summary> |
@@ -201,7 +203,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
201 | 203 | ||
202 | public void AddTersePart(SceneObjectPart part) | 204 | public void AddTersePart(SceneObjectPart part) |
203 | { | 205 | { |
204 | m_teserPartUpdates.Enqueue(part); | 206 | m_tersePartUpdates.Enqueue(part); |
205 | } | 207 | } |
206 | 208 | ||
207 | public void AddFullPart(SceneObjectPart part) | 209 | public void AddFullPart(SceneObjectPart part) |
@@ -211,18 +213,18 @@ namespace OpenSim.Region.Environment.Scenes | |||
211 | 213 | ||
212 | public void SendPrimUpdates() | 214 | public void SendPrimUpdates() |
213 | { | 215 | { |
214 | if (m_teserPartUpdates.Count > 0) | 216 | if (m_tersePartUpdates.Count > 0) |
215 | { | 217 | { |
216 | bool terse = true; | 218 | bool terse = true; |
217 | int terseCount = 0; | 219 | int terseCount = 0; |
218 | 220 | ||
219 | while (terse) | 221 | while (terse) |
220 | { | 222 | { |
221 | SceneObjectPart part = m_teserPartUpdates.Dequeue(); | 223 | SceneObjectPart part = m_tersePartUpdates.Dequeue(); |
222 | part.SendTerseUpdate(this.ControllingClient); | 224 | part.SendTerseUpdate(this.ControllingClient); |
223 | terseCount++; | 225 | terseCount++; |
224 | 226 | ||
225 | if ((m_teserPartUpdates.Count < 1) |(terseCount > 30)) | 227 | if ((m_tersePartUpdates.Count < 1) |(terseCount > 30)) |
226 | { | 228 | { |
227 | terse = false; | 229 | terse = false; |
228 | } | 230 | } |
diff --git a/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs new file mode 100644 index 0000000..c7b0524 --- /dev/null +++ b/OpenSim/Region/Environment/Types/BasicQuadTreeNode.cs | |||
@@ -0,0 +1,167 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Region.Environment.Scenes; | ||
5 | |||
6 | namespace OpenSim.Region.Environment.Types | ||
7 | { | ||
8 | public class BasicQuadTreeNode | ||
9 | { | ||
10 | private List<SceneObjectGroup> m_objects = new List<SceneObjectGroup>(); | ||
11 | private BasicQuadTreeNode[] m_childNodes = null; | ||
12 | private BasicQuadTreeNode m_parent = null; | ||
13 | |||
14 | private short m_leftX; | ||
15 | private short m_leftY; | ||
16 | private short m_width; | ||
17 | private short m_height; | ||
18 | |||
19 | public BasicQuadTreeNode(BasicQuadTreeNode parent, short leftX, short leftY, short width, short height) | ||
20 | { | ||
21 | m_parent = parent; | ||
22 | m_leftX = leftX; | ||
23 | m_leftY = leftY; | ||
24 | m_width = width; | ||
25 | m_height = height; | ||
26 | } | ||
27 | |||
28 | public void AddObject(SceneObjectGroup obj) | ||
29 | { | ||
30 | if (m_childNodes == null) | ||
31 | { | ||
32 | if (!m_objects.Contains(obj)) | ||
33 | { | ||
34 | m_objects.Add(obj); | ||
35 | } | ||
36 | } | ||
37 | else | ||
38 | { | ||
39 | if (obj.AbsolutePosition.X < (m_leftX + (m_width / 2))) | ||
40 | { | ||
41 | if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) | ||
42 | { | ||
43 | m_childNodes[0].AddObject(obj); | ||
44 | } | ||
45 | else | ||
46 | { | ||
47 | m_childNodes[2].AddObject(obj); | ||
48 | } | ||
49 | } | ||
50 | else | ||
51 | { | ||
52 | if (obj.AbsolutePosition.Y < (m_leftY + (m_height / 2))) | ||
53 | { | ||
54 | m_childNodes[1].AddObject(obj); | ||
55 | } | ||
56 | else | ||
57 | { | ||
58 | m_childNodes[3].AddObject(obj); | ||
59 | } | ||
60 | } | ||
61 | } | ||
62 | } | ||
63 | |||
64 | public void Subdivide() | ||
65 | { | ||
66 | if (m_childNodes == null) | ||
67 | { | ||
68 | m_childNodes = new BasicQuadTreeNode[4]; | ||
69 | m_childNodes[0] = new BasicQuadTreeNode(this, m_leftX, m_leftY,(short) (m_width / 2), (short)( m_height / 2)); | ||
70 | m_childNodes[1] = new BasicQuadTreeNode(this,(short)( m_leftX + (m_width / 2)), m_leftY,(short)( m_width / 2),(short) (m_height / 2)); | ||
71 | m_childNodes[2] = new BasicQuadTreeNode(this, m_leftX, (short)( m_leftY + (m_height / 2)), (short)(m_width / 2),(short)( m_height / 2)); | ||
72 | m_childNodes[3] = new BasicQuadTreeNode(this, (short)( m_leftX + (m_width / 2)),(short)( m_height + (m_height / 2)),(short)( m_width / 2), (short)(m_height / 2)); | ||
73 | } | ||
74 | else | ||
75 | { | ||
76 | for (int i = 0; i < m_childNodes.Length; i++) | ||
77 | { | ||
78 | m_childNodes[i].Subdivide(); | ||
79 | } | ||
80 | } | ||
81 | } | ||
82 | |||
83 | public List<SceneObjectGroup> GetObjectsFrom(int x, int y) | ||
84 | { | ||
85 | if (m_childNodes == null) | ||
86 | { | ||
87 | return m_objects; | ||
88 | } | ||
89 | else | ||
90 | { | ||
91 | if (x < (m_leftX + (m_width / 2))) | ||
92 | { | ||
93 | if (y < (m_leftY + (m_height / 2))) | ||
94 | { | ||
95 | return m_childNodes[0].GetObjectsFrom(x, y); | ||
96 | } | ||
97 | else | ||
98 | { | ||
99 | return m_childNodes[2].GetObjectsFrom(x, y); | ||
100 | } | ||
101 | } | ||
102 | else | ||
103 | { | ||
104 | if (y < (m_leftY + (m_height / 2))) | ||
105 | { | ||
106 | return m_childNodes[1].GetObjectsFrom(x, y); | ||
107 | } | ||
108 | else | ||
109 | { | ||
110 | return m_childNodes[3].GetObjectsFrom(x, y); | ||
111 | } | ||
112 | } | ||
113 | } | ||
114 | } | ||
115 | |||
116 | public void Update() | ||
117 | { | ||
118 | if (m_childNodes != null) | ||
119 | { | ||
120 | for (int i = 0; i < 4; i++) | ||
121 | { | ||
122 | m_childNodes[i].Update(); | ||
123 | } | ||
124 | } | ||
125 | else | ||
126 | { | ||
127 | List<SceneObjectGroup> outBounds = new List<SceneObjectGroup>(); | ||
128 | foreach (SceneObjectGroup group in m_objects) | ||
129 | { | ||
130 | if (((group.AbsolutePosition.X > m_leftX) && (group.AbsolutePosition.X < (m_leftX + m_width))) && ((group.AbsolutePosition.Y > m_leftY) && (group.AbsolutePosition.Y < (m_leftY + m_height)))) | ||
131 | { | ||
132 | //still in bounds | ||
133 | } | ||
134 | else | ||
135 | { | ||
136 | outBounds.Add(group); | ||
137 | } | ||
138 | } | ||
139 | |||
140 | foreach (SceneObjectGroup removee in outBounds) | ||
141 | { | ||
142 | m_objects.Remove(removee); | ||
143 | if (m_parent != null) | ||
144 | { | ||
145 | m_parent.PassUp(removee); | ||
146 | } | ||
147 | } | ||
148 | outBounds.Clear(); | ||
149 | } | ||
150 | } | ||
151 | |||
152 | public void PassUp(SceneObjectGroup group) | ||
153 | { | ||
154 | if (((group.AbsolutePosition.X > m_leftX) && (group.AbsolutePosition.X < (m_leftX + m_width))) && ((group.AbsolutePosition.Y > m_leftY) && (group.AbsolutePosition.Y < (m_leftY + m_height)))) | ||
155 | { | ||
156 | this.AddObject(group); | ||
157 | } | ||
158 | else | ||
159 | { | ||
160 | if (m_parent != null) | ||
161 | { | ||
162 | m_parent.PassUp(group); | ||
163 | } | ||
164 | } | ||
165 | } | ||
166 | } | ||
167 | } | ||
diff --git a/OpenSim/Region/Environment/Types/UpdateQueue.cs b/OpenSim/Region/Environment/Types/UpdateQueue.cs new file mode 100644 index 0000000..d7eb6ee --- /dev/null +++ b/OpenSim/Region/Environment/Types/UpdateQueue.cs | |||
@@ -0,0 +1,21 @@ | |||
1 | using System; | ||
2 | using System.Collections.Generic; | ||
3 | using System.Text; | ||
4 | using OpenSim.Region.Environment.Scenes; | ||
5 | using libsecondlife; | ||
6 | |||
7 | namespace OpenSim.Region.Environment.Types | ||
8 | { | ||
9 | public class UpdateQueue | ||
10 | { | ||
11 | private Queue<SceneObjectPart> m_queue; | ||
12 | |||
13 | private List<LLUUID> m_ids; | ||
14 | |||
15 | public UpdateQueue() | ||
16 | { | ||
17 | m_queue = new Queue<SceneObjectPart>(); | ||
18 | m_ids = new List<LLUUID>(); | ||
19 | } | ||
20 | } | ||
21 | } | ||