aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/OpenSim.Region/Scenes
diff options
context:
space:
mode:
authorlbsa712007-06-29 13:51:21 +0000
committerlbsa712007-06-29 13:51:21 +0000
commitf6deaf8a65693d022f58961a007f2492c9ac97fa (patch)
tree7428eccc93a3f64f46e08d7269bc337f3d26d8a8 /OpenSim/OpenSim.Region/Scenes
parentDeleted some files that are no longer in use. (I am sure I deleted these yest... (diff)
parent*Hopefully fixed the empty dialog box error on client when logging in on sand... (diff)
downloadopensim-SC-f6deaf8a65693d022f58961a007f2492c9ac97fa.zip
opensim-SC-f6deaf8a65693d022f58961a007f2492c9ac97fa.tar.gz
opensim-SC-f6deaf8a65693d022f58961a007f2492c9ac97fa.tar.bz2
opensim-SC-f6deaf8a65693d022f58961a007f2492c9ac97fa.tar.xz
Switched in NameSpaceChanges
Diffstat (limited to 'OpenSim/OpenSim.Region/Scenes')
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Entity.cs193
-rw-r--r--OpenSim/OpenSim.Region/Scenes/IScenePresenceBody.cs19
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Primitive.cs582
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs305
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Scene.Scripting.cs184
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Scene.cs781
-rw-r--r--OpenSim/OpenSim.Region/Scenes/SceneBase.cs200
-rw-r--r--OpenSim/OpenSim.Region/Scenes/SceneEvents.cs79
-rw-r--r--OpenSim/OpenSim.Region/Scenes/SceneObject.cs128
-rw-r--r--OpenSim/OpenSim.Region/Scenes/ScenePresence.Animations.cs76
-rw-r--r--OpenSim/OpenSim.Region/Scenes/ScenePresence.Body.cs90
-rw-r--r--OpenSim/OpenSim.Region/Scenes/ScenePresence.cs525
-rw-r--r--OpenSim/OpenSim.Region/Scenes/scripting/Engines/CSharpScriptEngine.cs104
-rw-r--r--OpenSim/OpenSim.Region/Scenes/scripting/Engines/JScriptEngine.cs104
-rw-r--r--OpenSim/OpenSim.Region/Scenes/scripting/Engines/JSharpScriptEngine.cs104
-rw-r--r--OpenSim/OpenSim.Region/Scenes/scripting/Script.cs71
-rw-r--r--OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs58
-rw-r--r--OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs99
18 files changed, 0 insertions, 3702 deletions
diff --git a/OpenSim/OpenSim.Region/Scenes/Entity.cs b/OpenSim/OpenSim.Region/Scenes/Entity.cs
deleted file mode 100644
index 77f8854..0000000
--- a/OpenSim/OpenSim.Region/Scenes/Entity.cs
+++ /dev/null
@@ -1,193 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31using Axiom.MathLib;
32using OpenSim.Physics.Manager;
33using libsecondlife;
34
35namespace OpenSim.Region.Scenes
36{
37 public abstract class Entity
38 {
39 public libsecondlife.LLUUID uuid;
40 public Quaternion rotation;
41 protected List<Entity> children;
42
43 protected PhysicsActor _physActor;
44 protected Scene m_world;
45 protected string m_name;
46
47 /// <summary>
48 ///
49 /// </summary>
50 public virtual string Name
51 {
52 get { return m_name; }
53 }
54
55 protected LLVector3 m_pos;
56 /// <summary>
57 ///
58 /// </summary>
59 public virtual LLVector3 Pos
60 {
61 get
62 {
63 if (this._physActor != null)
64 {
65 m_pos.X = _physActor.Position.X;
66 m_pos.Y = _physActor.Position.Y;
67 m_pos.Z = _physActor.Position.Z;
68 }
69
70 return m_pos;
71 }
72 set
73 {
74 if (this._physActor != null)
75 {
76 try
77 {
78 lock (this.m_world.SyncRoot)
79 {
80
81 this._physActor.Position = new PhysicsVector(value.X, value.Y, value.Z);
82 }
83 }
84 catch (Exception e)
85 {
86 Console.WriteLine(e.Message);
87 }
88 }
89
90 m_pos = value;
91 }
92 }
93
94 public LLVector3 velocity;
95
96 /// <summary>
97 ///
98 /// </summary>
99 public virtual LLVector3 Velocity
100 {
101 get
102 {
103 if (this._physActor != null)
104 {
105 velocity.X = _physActor.Velocity.X;
106 velocity.Y = _physActor.Velocity.Y;
107 velocity.Z = _physActor.Velocity.Z;
108 }
109
110 return velocity;
111 }
112 set
113 {
114 if (this._physActor != null)
115 {
116 try
117 {
118 lock (this.m_world.SyncRoot)
119 {
120
121 this._physActor.Velocity = new PhysicsVector(value.X, value.Y, value.Z);
122 }
123 }
124 catch (Exception e)
125 {
126 Console.WriteLine(e.Message);
127 }
128 }
129
130 velocity = value;
131 }
132 }
133
134 protected uint m_localId;
135
136 public uint LocalId
137 {
138 get { return m_localId; }
139 }
140
141 /// <summary>
142 /// Creates a new Entity (should not occur on it's own)
143 /// </summary>
144 public Entity()
145 {
146 uuid = new libsecondlife.LLUUID();
147
148 m_pos = new LLVector3();
149 velocity = new LLVector3();
150 rotation = new Quaternion();
151 m_name = "(basic entity)";
152 children = new List<Entity>();
153 }
154
155 /// <summary>
156 ///
157 /// </summary>
158 public virtual void updateMovement()
159 {
160 foreach (Entity child in children)
161 {
162 child.updateMovement();
163 }
164 }
165
166 /// <summary>
167 /// Performs any updates that need to be done at each frame. This function is overridable from it's children.
168 /// </summary>
169 public virtual void update() {
170 // Do any per-frame updates needed that are applicable to every type of entity
171 foreach (Entity child in children)
172 {
173 child.update();
174 }
175 }
176
177 /// <summary>
178 /// Called at a set interval to inform entities that they should back themsleves up to the DB
179 /// </summary>
180 public virtual void BackUp()
181 {
182
183 }
184
185 /// <summary>
186 /// Infoms the entity that the land (heightmap) has changed
187 /// </summary>
188 public virtual void LandRenegerated()
189 {
190
191 }
192 }
193}
diff --git a/OpenSim/OpenSim.Region/Scenes/IScenePresenceBody.cs b/OpenSim/OpenSim.Region/Scenes/IScenePresenceBody.cs
deleted file mode 100644
index 65077e6..0000000
--- a/OpenSim/OpenSim.Region/Scenes/IScenePresenceBody.cs
+++ /dev/null
@@ -1,19 +0,0 @@
1using System;
2using System.Collections.Generic;
3using System.Text;
4using libsecondlife;
5using libsecondlife.Packets;
6using OpenSim.Physics.Manager;
7using OpenSim.Framework.Interfaces;
8using OpenSim.Framework.Types;
9
10namespace OpenSim.Region.Scenes
11{
12 public interface IScenePresenceBody
13 {
14 void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation);
15 void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam);
16 void SendOurAppearance(IClientAPI OurClient);
17 void SendAppearanceToOtherAgent(ScenePresence avatarInfo);
18 }
19}
diff --git a/OpenSim/OpenSim.Region/Scenes/Primitive.cs b/OpenSim/OpenSim.Region/Scenes/Primitive.cs
deleted file mode 100644
index e04c711..0000000
--- a/OpenSim/OpenSim.Region/Scenes/Primitive.cs
+++ /dev/null
@@ -1,582 +0,0 @@
1
2/*
3* Copyright (c) Contributors, http://www.openmetaverse.org/
4* See CONTRIBUTORS.TXT for a full list of copyright holders.
5*
6* Redistribution and use in source and binary forms, with or without
7* modification, are permitted provided that the following conditions are met:
8* * Redistributions of source code must retain the above copyright
9* notice, this list of conditions and the following disclaimer.
10* * Redistributions in binary form must reproduce the above copyright
11* notice, this list of conditions and the following disclaimer in the
12* documentation and/or other materials provided with the distribution.
13* * Neither the name of the OpenSim Project nor the
14* names of its contributors may be used to endorse or promote products
15* derived from this software without specific prior written permission.
16*
17* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
18* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
21* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27*
28*/
29using System;
30using System.Collections.Generic;
31using System.Text;
32using libsecondlife;
33using libsecondlife.Packets;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Physics.Manager;
36using OpenSim.Framework.Types;
37using OpenSim.Framework.Inventory;
38
39namespace OpenSim.Region.Scenes
40{
41 public class Primitive : Entity
42 {
43 internal PrimData primData;
44 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
45 // private Dictionary<uint, IClientAPI> m_clientThreads;
46 private ulong m_regionHandle;
47 private const uint FULL_MASK_PERMISSIONS = 2147483647;
48 private bool physicsEnabled = false;
49 private byte updateFlag = 0;
50 private uint flags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456 + 128;
51
52 private Dictionary<LLUUID, InventoryItem> inventoryItems;
53
54 #region Properties
55
56 public LLVector3 Scale
57 {
58 set
59 {
60 this.primData.Scale = value;
61 //this.dirtyFlag = true;
62 }
63 get
64 {
65 return this.primData.Scale;
66 }
67 }
68
69 public PhysicsActor PhysActor
70 {
71 set
72 {
73 this._physActor = value;
74 }
75 }
76
77 public override LLVector3 Pos
78 {
79 get
80 {
81 return base.Pos;
82 }
83 set
84 {
85 base.Pos = value;
86 }
87 }
88 #endregion
89
90 /// <summary>
91 ///
92 /// </summary>
93 /// <param name="clientThreads"></param>
94 /// <param name="regionHandle"></param>
95 /// <param name="world"></param>
96 public Primitive( ulong regionHandle, Scene world)
97 {
98 // m_clientThreads = clientThreads;
99 m_regionHandle = regionHandle;
100 m_world = world;
101 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
102 }
103
104 /// <summary>
105 ///
106 /// </summary>
107 /// <param name="regionHandle"></param>
108 /// <param name="world"></param>
109 /// <param name="addPacket"></param>
110 /// <param name="ownerID"></param>
111 /// <param name="localID"></param>
112 public Primitive(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
113 {
114 // m_clientThreads = clientThreads;
115 m_regionHandle = regionHandle;
116 m_world = world;
117 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
118 this.CreateFromPacket(addPacket, ownerID, localID);
119 }
120
121 /// <summary>
122 ///
123 /// </summary>
124 /// <param name="clientThreads"></param>
125 /// <param name="regionHandle"></param>
126 /// <param name="world"></param>
127 /// <param name="owner"></param>
128 /// <param name="fullID"></param>
129 /// <param name="localID"></param>
130 public Primitive( ulong regionHandle, Scene world, LLUUID owner, LLUUID fullID, uint localID)
131 {
132 // m_clientThreads = clientThreads;
133 m_regionHandle = regionHandle;
134 m_world = world;
135 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
136 this.primData = new PrimData();
137 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
138 this.primData.OwnerID = owner;
139 this.primData.FullID = this.uuid = fullID;
140 this.primData.LocalID = m_localId = localID;
141 }
142
143 /// <summary>
144 /// Constructor to create a default cube
145 /// </summary>
146 /// <param name="clientThreads"></param>
147 /// <param name="regionHandle"></param>
148 /// <param name="world"></param>
149 /// <param name="owner"></param>
150 /// <param name="localID"></param>
151 /// <param name="position"></param>
152 public Primitive( ulong regionHandle, Scene world, LLUUID owner, uint localID, LLVector3 position)
153 {
154 //m_clientThreads = clientThreads;
155 m_regionHandle = regionHandle;
156 m_world = world;
157 inventoryItems = new Dictionary<LLUUID, InventoryItem>();
158 this.primData = PrimData.DefaultCube();
159 this.primData.OwnerID = owner;
160 this.primData.LocalID = m_localId = localID;
161 this.Pos = this.primData.Position = position;
162
163 this.updateFlag = 1;
164 }
165
166 /// <summary>
167 ///
168 /// </summary>
169 /// <returns></returns>
170 public byte[] GetByteArray()
171 {
172 byte[] result = null;
173 List<byte[]> dataArrays = new List<byte[]>();
174 dataArrays.Add(primData.ToBytes());
175 foreach (Entity child in children)
176 {
177 if (child is OpenSim.Region.Scenes.Primitive)
178 {
179 dataArrays.Add(((OpenSim.Region.Scenes.Primitive)child).GetByteArray());
180 }
181 }
182 byte[] primstart = Helpers.StringToField("<Prim>");
183 byte[] primend = Helpers.StringToField("</Prim>");
184 int totalLength = primstart.Length + primend.Length;
185 for (int i = 0; i < dataArrays.Count; i++)
186 {
187 totalLength += dataArrays[i].Length;
188 }
189
190 result = new byte[totalLength];
191 int arraypos = 0;
192 Array.Copy(primstart, 0, result, 0, primstart.Length);
193 arraypos += primstart.Length;
194 for (int i = 0; i < dataArrays.Count; i++)
195 {
196 Array.Copy(dataArrays[i], 0, result, arraypos, dataArrays[i].Length);
197 arraypos += dataArrays[i].Length;
198 }
199 Array.Copy(primend, 0, result, arraypos, primend.Length);
200
201 return result;
202 }
203
204 #region Overridden Methods
205
206 /// <summary>
207 ///
208 /// </summary>
209 public override void update()
210 {
211 if (this.updateFlag == 1) // is a new prim just been created/reloaded
212 {
213 this.SendFullUpdateToAllClients();
214 this.updateFlag = 0;
215 }
216 if (this.updateFlag == 2) //some change has been made so update the clients
217 {
218 this.SendTerseUpdateToALLClients();
219 this.updateFlag = 0;
220 }
221 }
222
223 /// <summary>
224 ///
225 /// </summary>
226 public override void BackUp()
227 {
228
229 }
230
231 #endregion
232
233 #region Packet handlers
234
235 /// <summary>
236 ///
237 /// </summary>
238 /// <param name="pos"></param>
239 public void UpdatePosition(LLVector3 pos)
240 {
241 this.Pos = new LLVector3(pos.X, pos.Y, pos.Z);
242 this.updateFlag = 2;
243 }
244
245 /// <summary>
246 ///
247 /// </summary>
248 /// <param name="addPacket"></param>
249 public void UpdateShape(ObjectShapePacket.ObjectDataBlock updatePacket)
250 {
251 this.primData.PathBegin = updatePacket.PathBegin;
252 this.primData.PathEnd = updatePacket.PathEnd;
253 this.primData.PathScaleX = updatePacket.PathScaleX;
254 this.primData.PathScaleY = updatePacket.PathScaleY;
255 this.primData.PathShearX = updatePacket.PathShearX;
256 this.primData.PathShearY = updatePacket.PathShearY;
257 this.primData.PathSkew = updatePacket.PathSkew;
258 this.primData.ProfileBegin = updatePacket.ProfileBegin;
259 this.primData.ProfileEnd = updatePacket.ProfileEnd;
260 this.primData.PathCurve = updatePacket.PathCurve;
261 this.primData.ProfileCurve = updatePacket.ProfileCurve;
262 this.primData.ProfileHollow = updatePacket.ProfileHollow;
263 this.primData.PathRadiusOffset = updatePacket.PathRadiusOffset;
264 this.primData.PathRevolutions = updatePacket.PathRevolutions;
265 this.primData.PathTaperX = updatePacket.PathTaperX;
266 this.primData.PathTaperY = updatePacket.PathTaperY;
267 this.primData.PathTwist = updatePacket.PathTwist;
268 this.primData.PathTwistBegin = updatePacket.PathTwistBegin;
269 }
270
271 /// <summary>
272 ///
273 /// </summary>
274 /// <param name="tex"></param>
275 public void UpdateTexture(byte[] tex)
276 {
277 this.primData.TextureEntry = tex;
278 }
279
280 /// <summary>
281 ///
282 /// </summary>
283 /// <param name="pack"></param>
284 public void UpdateObjectFlags(ObjectFlagUpdatePacket pack)
285 {
286
287 }
288
289 /// <summary>
290 ///
291 /// </summary>
292 /// <param name="prim"></param>
293 public void AssignToParent(Primitive prim)
294 {
295
296 }
297
298 #endregion
299
300 # region Inventory Methods
301 /// <summary>
302 ///
303 /// </summary>
304 /// <param name="item"></param>
305 /// <returns></returns>
306 public bool AddToInventory(InventoryItem item)
307 {
308 return false;
309 }
310
311 /// <summary>
312 ///
313 /// </summary>
314 /// <param name="itemID"></param>
315 /// <returns></returns>
316 public InventoryItem RemoveFromInventory(LLUUID itemID)
317 {
318 return null;
319 }
320
321 /// <summary>
322 ///
323 /// </summary>
324 /// <param name="simClient"></param>
325 /// <param name="packet"></param>
326 public void RequestInventoryInfo(IClientAPI simClient, RequestTaskInventoryPacket packet)
327 {
328
329 }
330
331 /// <summary>
332 ///
333 /// </summary>
334 /// <param name="simClient"></param>
335 /// <param name="xferID"></param>
336 public void RequestXferInventory(IClientAPI simClient, ulong xferID)
337 {
338 //will only currently work if the total size of the inventory data array is under about 1000 bytes
339 SendXferPacketPacket send = new SendXferPacketPacket();
340
341 send.XferID.ID = xferID;
342 send.XferID.Packet = 1 + 2147483648;
343 send.DataPacket.Data = this.ConvertInventoryToBytes();
344
345 simClient.OutPacket(send);
346 }
347
348 /// <summary>
349 ///
350 /// </summary>
351 /// <returns></returns>
352 public byte[] ConvertInventoryToBytes()
353 {
354 System.Text.Encoding enc = System.Text.Encoding.ASCII;
355 byte[] result = new byte[0];
356 List<byte[]> inventoryData = new List<byte[]>();
357 int totallength = 0;
358 foreach (InventoryItem invItem in inventoryItems.Values)
359 {
360 byte[] data = enc.GetBytes(invItem.ExportString());
361 inventoryData.Add(data);
362 totallength += data.Length;
363 }
364 //TODO: copy arrays into the single result array
365
366 return result;
367 }
368
369 /// <summary>
370 ///
371 /// </summary>
372 /// <param name="data"></param>
373 public void CreateInventoryFromBytes(byte[] data)
374 {
375
376 }
377
378 #endregion
379
380 #region Update viewers Methods
381
382 /// <summary>
383 ///
384 /// </summary>
385 /// <param name="remoteClient"></param>
386 public void SendFullUpdateForAllChildren(IClientAPI remoteClient)
387 {
388 this.SendFullUpdateToClient(remoteClient);
389 for (int i = 0; i < this.children.Count; i++)
390 {
391 if (this.children[i] is Primitive)
392 {
393 ((Primitive)this.children[i]).SendFullUpdateForAllChildren(remoteClient);
394 }
395 }
396 }
397
398 /// <summary>
399 ///
400 /// </summary>
401 /// <param name="remoteClient"></param>
402 public void SendFullUpdateToClient(IClientAPI remoteClient)
403 {
404 LLVector3 lPos;
405 if (this._physActor != null && this.physicsEnabled)
406 {
407 PhysicsVector pPos = this._physActor.Position;
408 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
409 }
410 else
411 {
412 lPos = this.Pos;
413 }
414
415 remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.primData, lPos, new LLUUID("00000000-0000-0000-9999-000000000005"), this.flags);
416 }
417
418 /// <summary>
419 ///
420 /// </summary>
421 public void SendFullUpdateToAllClients()
422 {
423 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
424 for (int i = 0; i < avatars.Count; i++)
425 {
426 this.SendFullUpdateToClient(avatars[i].ControllingClient);
427 }
428 }
429
430 /// <summary>
431 ///
432 /// </summary>
433 /// <param name="RemoteClient"></param>
434 public void SendTerseUpdateToClient(IClientAPI RemoteClient)
435 {
436 LLVector3 lPos;
437 Axiom.MathLib.Quaternion lRot;
438 if (this._physActor != null && this.physicsEnabled) //is this needed ? doesn't the property fields do this for us?
439 {
440 PhysicsVector pPos = this._physActor.Position;
441 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
442 lRot = this._physActor.Orientation;
443 }
444 else
445 {
446 lPos = this.Pos;
447 lRot = this.rotation;
448 }
449 LLQuaternion mRot = new LLQuaternion(lRot.x, lRot.y, lRot.z, lRot.w);
450 RemoteClient.SendPrimTerseUpdate(this.m_regionHandle, 64096, this.LocalId, lPos, mRot);
451 }
452
453 /// <summary>
454 ///
455 /// </summary>
456 public void SendTerseUpdateToALLClients()
457 {
458 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
459 for (int i = 0; i < avatars.Count; i++)
460 {
461 this.SendTerseUpdateToClient(avatars[i].ControllingClient);
462 }
463 }
464
465 #endregion
466
467 #region Create Methods
468
469 /// <summary>
470 ///
471 /// </summary>
472 /// <param name="addPacket"></param>
473 /// <param name="ownerID"></param>
474 /// <param name="localID"></param>
475 public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID ownerID, uint localID)
476 {
477 PrimData PData = new PrimData();
478 this.primData = PData;
479 this.primData.CreationDate = (Int32)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds;
480
481 PData.OwnerID = ownerID;
482 PData.PCode = addPacket.ObjectData.PCode;
483 PData.PathBegin = addPacket.ObjectData.PathBegin;
484 PData.PathEnd = addPacket.ObjectData.PathEnd;
485 PData.PathScaleX = addPacket.ObjectData.PathScaleX;
486 PData.PathScaleY = addPacket.ObjectData.PathScaleY;
487 PData.PathShearX = addPacket.ObjectData.PathShearX;
488 PData.PathShearY = addPacket.ObjectData.PathShearY;
489 PData.PathSkew = addPacket.ObjectData.PathSkew;
490 PData.ProfileBegin = addPacket.ObjectData.ProfileBegin;
491 PData.ProfileEnd = addPacket.ObjectData.ProfileEnd;
492 PData.Scale = addPacket.ObjectData.Scale;
493 PData.PathCurve = addPacket.ObjectData.PathCurve;
494 PData.ProfileCurve = addPacket.ObjectData.ProfileCurve;
495 PData.ParentID = 0;
496 PData.ProfileHollow = addPacket.ObjectData.ProfileHollow;
497 PData.PathRadiusOffset = addPacket.ObjectData.PathRadiusOffset;
498 PData.PathRevolutions = addPacket.ObjectData.PathRevolutions;
499 PData.PathTaperX = addPacket.ObjectData.PathTaperX;
500 PData.PathTaperY = addPacket.ObjectData.PathTaperY;
501 PData.PathTwist = addPacket.ObjectData.PathTwist;
502 PData.PathTwistBegin = addPacket.ObjectData.PathTwistBegin;
503 LLVector3 pos1 = addPacket.ObjectData.RayEnd;
504 this.primData.FullID = this.uuid = LLUUID.Random();
505 this.primData.LocalID = m_localId = (uint)(localID);
506 this.primData.Position = this.Pos = pos1;
507
508 this.updateFlag = 1;
509 }
510
511 /// <summary>
512 ///
513 /// </summary>
514 /// <param name="data"></param>
515 public void CreateFromBytes(byte[] data)
516 {
517
518 }
519
520 /// <summary>
521 ///
522 /// </summary>
523 /// <param name="primData"></param>
524 public void CreateFromPrimData(PrimData primData)
525 {
526 this.CreateFromPrimData(primData, primData.Position, primData.LocalID, false);
527 }
528
529 /// <summary>
530 ///
531 /// </summary>
532 /// <param name="primData"></param>
533 /// <param name="posi"></param>
534 /// <param name="localID"></param>
535 /// <param name="newprim"></param>
536 public void CreateFromPrimData(PrimData primData, LLVector3 posi, uint localID, bool newprim)
537 {
538
539 }
540
541 public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
542 {
543 // Console.WriteLine("moving prim to new location " + pos.X + " , " + pos.Y + " , " + pos.Z);
544 this.Pos = pos;
545 this.SendTerseUpdateToALLClients();
546 }
547
548 public void GetProperites(IClientAPI client)
549 {
550 //needs changing
551 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
552 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
553 proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
554 proper.ObjectData[0].ItemID = LLUUID.Zero;
555 proper.ObjectData[0].CreationDate = (ulong)primData.CreationDate;
556 proper.ObjectData[0].CreatorID = primData.OwnerID;
557 proper.ObjectData[0].FolderID = LLUUID.Zero;
558 proper.ObjectData[0].FromTaskID = LLUUID.Zero;
559 proper.ObjectData[0].GroupID = LLUUID.Zero;
560 proper.ObjectData[0].InventorySerial = 0;
561 proper.ObjectData[0].LastOwnerID = LLUUID.Zero;
562 proper.ObjectData[0].ObjectID = this.uuid;
563 proper.ObjectData[0].OwnerID = primData.OwnerID;
564 proper.ObjectData[0].TouchName = new byte[0];
565 proper.ObjectData[0].TextureID = new byte[0];
566 proper.ObjectData[0].SitName = new byte[0];
567 proper.ObjectData[0].Name = new byte[0];
568 proper.ObjectData[0].Description = new byte[0];
569 proper.ObjectData[0].OwnerMask = primData.OwnerMask;
570 proper.ObjectData[0].NextOwnerMask = primData.NextOwnerMask;
571 proper.ObjectData[0].GroupMask = primData.GroupMask;
572 proper.ObjectData[0].EveryoneMask = primData.EveryoneMask;
573 proper.ObjectData[0].BaseMask = primData.BaseMask;
574
575 client.OutPacket(proper);
576
577 }
578
579 #endregion
580
581 }
582}
diff --git a/OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs b/OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs
deleted file mode 100644
index d1a2717..0000000
--- a/OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs
+++ /dev/null
@@ -1,305 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31using libsecondlife;
32using libsecondlife.Packets;
33using OpenSim.Physics.Manager;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Types;
36using OpenSim.Framework.Inventory;
37using OpenSim.Framework.Utilities;
38
39namespace OpenSim.Region.Scenes
40{
41 public partial class Scene
42 {
43 /// <summary>
44 /// Modifies terrain using the specified information
45 /// </summary>
46 /// <param name="height">The height at which the user started modifying the terrain</param>
47 /// <param name="seconds">The number of seconds the modify button was pressed</param>
48 /// <param name="brushsize">The size of the brush used</param>
49 /// <param name="action">The action to be performed</param>
50 /// <param name="north">Distance from the north border where the cursor is located</param>
51 /// <param name="west">Distance from the west border where the cursor is located</param>
52 public void ModifyTerrain(float height, float seconds, byte brushsize, byte action, float north, float west)
53 {
54 // Shiny.
55 double size = (double)(1 << brushsize);
56
57 switch (action)
58 {
59 case 0:
60 // flatten terrain
61 Terrain.flatten(north, west, size, (double)seconds / 100.0);
62 RegenerateTerrain(true, (int)north, (int)west);
63 break;
64 case 1:
65 // raise terrain
66 Terrain.raise(north, west, size, (double)seconds / 100.0);
67 RegenerateTerrain(true, (int)north, (int)west);
68 break;
69 case 2:
70 //lower terrain
71 Terrain.lower(north, west, size, (double)seconds / 100.0);
72 RegenerateTerrain(true, (int)north, (int)west);
73 break;
74 case 3:
75 // smooth terrain
76 Terrain.smooth(north, west, size, (double)seconds / 100.0);
77 RegenerateTerrain(true, (int)north, (int)west);
78 break;
79 case 4:
80 // noise
81 Terrain.noise(north, west, size, (double)seconds / 100.0);
82 RegenerateTerrain(true, (int)north, (int)west);
83 break;
84 case 5:
85 // revert
86 Terrain.revert(north, west, size, (double)seconds / 100.0);
87 RegenerateTerrain(true, (int)north, (int)west);
88 break;
89
90 // CLIENT EXTENSIONS GO HERE
91 case 128:
92 // erode-thermal
93 break;
94 case 129:
95 // erode-aerobic
96 break;
97 case 130:
98 // erode-hydraulic
99 break;
100 }
101 return;
102 }
103
104 /// <summary>
105 ///
106 /// </summary>
107 /// <param name="message"></param>
108 /// <param name="type"></param>
109 /// <param name="fromPos"></param>
110 /// <param name="fromName"></param>
111 /// <param name="fromAgentID"></param>
112 public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID)
113 {
114 Console.WriteLine("Chat message");
115 ScenePresence avatar = null;
116 foreach (IClientAPI client in m_clientThreads.Values)
117 {
118 int dis = -1000;
119 if (this.Avatars.ContainsKey(client.AgentId))
120 {
121
122 avatar = this.Avatars[client.AgentId];
123 // int dis = Util.fast_distance2d((int)(client.ClientAvatar.Pos.X - simClient.ClientAvatar.Pos.X), (int)(client.ClientAvatar.Pos.Y - simClient.ClientAvatar.Pos.Y));
124 dis= (int)avatar.Pos.GetDistanceTo(fromPos);
125 Console.WriteLine("found avatar at " +dis);
126
127 }
128
129 switch (type)
130 {
131 case 0: // Whisper
132 if ((dis < 10) && (dis > -10))
133 {
134 //should change so the message is sent through the avatar rather than direct to the ClientView
135 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
136 }
137 break;
138 case 1: // Say
139 if ((dis < 30) && (dis > -30))
140 {
141 Console.WriteLine("sending chat");
142 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
143 }
144 break;
145 case 2: // Shout
146 if ((dis < 100) && (dis > -100))
147 {
148 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
149 }
150 break;
151
152 case 0xff: // Broadcast
153 client.SendChatMessage(message, type, fromPos, fromName, fromAgentID);
154 break;
155 }
156
157 }
158 }
159
160 /// <summary>
161 ///
162 /// </summary>
163 /// <param name="primAsset"></param>
164 /// <param name="pos"></param>
165 public void RezObject(AssetBase primAsset, LLVector3 pos)
166 {
167
168 }
169
170 /// <summary>
171 ///
172 /// </summary>
173 /// <param name="packet"></param>
174 /// <param name="simClient"></param>
175 public void DeRezObject(Packet packet, IClientAPI simClient)
176 {
177
178 }
179
180 /// <summary>
181 ///
182 /// </summary>
183 /// <param name="remoteClient"></param>
184 public void SendAvatarsToClient(IClientAPI remoteClient)
185 {
186
187 }
188
189 /// <summary>
190 ///
191 /// </summary>
192 /// <param name="parentPrim"></param>
193 /// <param name="childPrims"></param>
194 public void LinkObjects(uint parentPrim, List<uint> childPrims)
195 {
196
197
198 }
199
200 /// <summary>
201 ///
202 /// </summary>
203 /// <param name="primLocalID"></param>
204 /// <param name="shapeBlock"></param>
205 public void UpdatePrimShape(uint primLocalID, ObjectShapePacket.ObjectDataBlock shapeBlock)
206 {
207
208 }
209
210 /// <summary>
211 ///
212 /// </summary>
213 /// <param name="primLocalID"></param>
214 /// <param name="remoteClient"></param>
215 public void SelectPrim(uint primLocalID, IClientAPI remoteClient)
216 {
217 foreach (Entity ent in Entities.Values)
218 {
219 if (ent.LocalId == primLocalID)
220 {
221 ((OpenSim.Region.Scenes.Primitive)ent).GetProperites(remoteClient);
222 break;
223 }
224 }
225 }
226
227 public void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient)
228 {
229 if (this.Entities.ContainsKey(objectID))
230 {
231 ((Primitive)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient);
232 }
233 }
234
235 /// <summary>
236 ///
237 /// </summary>
238 /// <param name="localID"></param>
239 /// <param name="packet"></param>
240 /// <param name="remoteClient"></param>
241 public void UpdatePrimFlags(uint localID, Packet packet, IClientAPI remoteClient)
242 {
243
244 }
245
246 /// <summary>
247 ///
248 /// </summary>
249 /// <param name="localID"></param>
250 /// <param name="texture"></param>
251 /// <param name="remoteClient"></param>
252 public void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient)
253 {
254
255 }
256
257 /// <summary>
258 ///
259 /// </summary>
260 /// <param name="localID"></param>
261 /// <param name="pos"></param>
262 /// <param name="remoteClient"></param>
263 public void UpdatePrimPosition(uint localID, LLVector3 pos, IClientAPI remoteClient)
264 {
265 foreach (Entity ent in Entities.Values)
266 {
267 if (ent.LocalId == localID)
268 {
269 ((OpenSim.Region.Scenes.Primitive)ent).UpdatePosition(pos);
270 break;
271 }
272 }
273 }
274
275 /// <summary>
276 ///
277 /// </summary>
278 /// <param name="localID"></param>
279 /// <param name="rot"></param>
280 /// <param name="remoteClient"></param>
281 public void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient)
282 {
283
284 }
285
286 /// <summary>
287 ///
288 /// </summary>
289 /// <param name="localID"></param>
290 /// <param name="scale"></param>
291 /// <param name="remoteClient"></param>
292 public void UpdatePrimScale(uint localID, LLVector3 scale, IClientAPI remoteClient)
293 {
294 }
295
296 /// <summary>
297 /// Sends prims to a client
298 /// </summary>
299 /// <param name="RemoteClient">Client to send to</param>
300 public void GetInitialPrims(IClientAPI RemoteClient)
301 {
302
303 }
304 }
305}
diff --git a/OpenSim/OpenSim.Region/Scenes/Scene.Scripting.cs b/OpenSim/OpenSim.Region/Scenes/Scene.Scripting.cs
deleted file mode 100644
index 7b53388..0000000
--- a/OpenSim/OpenSim.Region/Scenes/Scene.Scripting.cs
+++ /dev/null
@@ -1,184 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31using System.IO;
32using System.Reflection;
33using OpenSim.Framework;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Types;
36using libsecondlife;
37
38namespace OpenSim.Region.Scenes
39{
40 public partial class Scene
41 {
42 private Dictionary<string, IScriptEngine> scriptEngines = new Dictionary<string, IScriptEngine>();
43
44 /// <summary>
45 ///
46 /// </summary>
47 private void LoadScriptEngines()
48 {
49 this.LoadScriptPlugins();
50 }
51
52 /// <summary>
53 ///
54 /// </summary>
55 public void LoadScriptPlugins()
56 {
57 string path = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "ScriptEngines");
58 string[] pluginFiles = Directory.GetFiles(path, "*.dll");
59
60
61 for (int i = 0; i < pluginFiles.Length; i++)
62 {
63 this.AddPlugin(pluginFiles[i]);
64 }
65 }
66
67 /// <summary>
68 ///
69 /// </summary>
70 /// <param name="FileName"></param>
71 private void AddPlugin(string FileName)
72 {
73 Assembly pluginAssembly = Assembly.LoadFrom(FileName);
74
75 foreach (Type pluginType in pluginAssembly.GetTypes())
76 {
77 if (pluginType.IsPublic)
78 {
79 if (!pluginType.IsAbstract)
80 {
81 Type typeInterface = pluginType.GetInterface("IScriptEngine", true);
82
83 if (typeInterface != null)
84 {
85 IScriptEngine plug = (IScriptEngine)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
86 plug.Init(this);
87 this.scriptEngines.Add(plug.GetName(), plug);
88
89 }
90
91 typeInterface = null;
92 }
93 }
94 }
95
96 pluginAssembly = null;
97 }
98
99 /// <summary>
100 ///
101 /// </summary>
102 /// <param name="scriptType"></param>
103 /// <param name="scriptName"></param>
104 /// <param name="script"></param>
105 /// <param name="ent"></param>
106 public void LoadScript(string scriptType, string scriptName, string script, Entity ent)
107 {
108 if(this.scriptEngines.ContainsKey(scriptType))
109 {
110 this.scriptEngines[scriptType].LoadScript(script, scriptName, ent.LocalId);
111 }
112 }
113
114 #region IScriptAPI Methods
115
116 /// <summary>
117 ///
118 /// </summary>
119 /// <param name="localID"></param>
120 /// <returns></returns>
121 public LLVector3 GetEntityPosition(uint localID)
122 {
123 LLVector3 res = new LLVector3();
124 // Console.WriteLine("script- getting entity " + localID + " position");
125 foreach (Entity entity in this.Entities.Values)
126 {
127 if (entity.LocalId == localID)
128 {
129 res.X = entity.Pos.X;
130 res.Y = entity.Pos.Y;
131 res.Z = entity.Pos.Z;
132 }
133 }
134 return res;
135 }
136
137 /// <summary>
138 ///
139 /// </summary>
140 /// <param name="localID"></param>
141 /// <param name="x"></param>
142 /// <param name="y"></param>
143 /// <param name="z"></param>
144 public void SetEntityPosition(uint localID, float x , float y, float z)
145 {
146 foreach (Entity entity in this.Entities.Values)
147 {
148 if (entity.LocalId == localID && entity is Primitive)
149 {
150 LLVector3 pos = entity.Pos;
151 pos.X = x;
152 pos.Y = y;
153 Primitive prim = entity as Primitive;
154 // Of course, we really should have asked the physEngine if this is possible, and if not, returned false.
155 //prim.UpdatePosition(pos);
156 // Console.WriteLine("script- setting entity " + localID + " positon");
157 }
158 }
159
160 }
161
162 /// <summary>
163 ///
164 /// </summary>
165 /// <returns></returns>
166 public uint GetRandomAvatarID()
167 {
168 //Console.WriteLine("script- getting random avatar id");
169 uint res = 0;
170 foreach (Entity entity in this.Entities.Values)
171 {
172 if (entity is ScenePresence)
173 {
174 res = entity.LocalId;
175 }
176 }
177 return res;
178 }
179
180 #endregion
181
182
183 }
184}
diff --git a/OpenSim/OpenSim.Region/Scenes/Scene.cs b/OpenSim/OpenSim.Region/Scenes/Scene.cs
deleted file mode 100644
index f7d90fa..0000000
--- a/OpenSim/OpenSim.Region/Scenes/Scene.cs
+++ /dev/null
@@ -1,781 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using libsecondlife;
30using libsecondlife.Packets;
31using System.Collections.Generic;
32using System.Text;
33using System.Reflection;
34using System.IO;
35using System.Threading;
36using System.Timers;
37using OpenSim.Physics.Manager;
38using OpenSim.Framework.Interfaces;
39using OpenSim.Framework.Types;
40using OpenSim.Framework.Inventory;
41using OpenSim.Framework;
42using OpenSim.Terrain;
43using OpenGrid.Framework.Communications;
44using OpenSim.Caches;
45using OpenSim.Region;
46using OpenSim.Servers;
47using OpenSim.Scripting;
48
49namespace OpenSim.Region.Scenes
50{
51 public delegate bool FilterAvatarList(ScenePresence avatar);
52
53 public partial class Scene : SceneBase, ILocalStorageReceiver, IScriptAPI
54 {
55 protected System.Timers.Timer m_heartbeatTimer = new System.Timers.Timer();
56 protected Dictionary<libsecondlife.LLUUID, ScenePresence> Avatars;
57 protected Dictionary<libsecondlife.LLUUID, Primitive> Prims;
58 private PhysicsScene phyScene;
59 private float timeStep = 0.1f;
60 private Random Rand = new Random();
61 private uint _primCount = 702000;
62 private int storageCount;
63 private Mutex updateLock;
64
65 protected AuthenticateSessionsBase authenticateHandler;
66 protected RegionCommsListener regionCommsHost;
67 protected CommunicationsManager commsManager;
68
69 protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>();
70 protected BaseHttpServer httpListener;
71
72 public ParcelManager parcelManager;
73 public EstateManager estateManager;
74 public EventManager eventManager;
75 public ScriptManager scriptManager;
76
77 #region Properties
78 /// <summary>
79 ///
80 /// </summary>
81 public PhysicsScene PhysScene
82 {
83 set
84 {
85 this.phyScene = value;
86 }
87 get
88 {
89 return (this.phyScene);
90 }
91 }
92
93 #endregion
94
95 #region Constructors
96 /// <summary>
97 /// Creates a new World class, and a region to go with it.
98 /// </summary>
99 /// <param name="clientThreads">Dictionary to contain client threads</param>
100 /// <param name="regionHandle">Region Handle for this region</param>
101 /// <param name="regionName">Region Name for this region</param>
102 public Scene(Dictionary<uint, IClientAPI> clientThreads, RegionInfo regInfo, AuthenticateSessionsBase authen, CommunicationsManager commsMan, AssetCache assetCach, BaseHttpServer httpServer)
103 {
104 try
105 {
106 updateLock = new Mutex(false);
107 this.authenticateHandler = authen;
108 this.commsManager = commsMan;
109 this.assetCache = assetCach;
110 m_clientThreads = clientThreads;
111 m_regInfo = regInfo;
112 m_regionHandle = m_regInfo.RegionHandle;
113 m_regionName = m_regInfo.RegionName;
114 this.m_datastore = m_regInfo.DataStore;
115 this.RegisterRegionWithComms();
116
117 parcelManager = new ParcelManager(this, this.m_regInfo);
118 estateManager = new EstateManager(this, this.m_regInfo);
119 scriptManager = new ScriptManager(this);
120 eventManager = new EventManager();
121
122 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs - creating new entitities instance");
123 Entities = new Dictionary<libsecondlife.LLUUID, Entity>();
124 Avatars = new Dictionary<LLUUID, ScenePresence>();
125 Prims = new Dictionary<LLUUID, Primitive>();
126
127 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs - creating LandMap");
128 Terrain = new TerrainEngine();
129
130 ScenePresence.LoadAnims();
131 this.httpListener = httpServer;
132
133 }
134 catch (Exception e)
135 {
136 OpenSim.Framework.Console.MainLog.Instance.Error( "World.cs: Constructor failed with exception " + e.ToString());
137 }
138 }
139 #endregion
140
141 /// <summary>
142 ///
143 /// </summary>
144 public void StartTimer()
145 {
146 m_heartbeatTimer.Enabled = true;
147 m_heartbeatTimer.Interval = 100;
148 m_heartbeatTimer.Elapsed += new ElapsedEventHandler(this.Heartbeat);
149 }
150
151
152 #region Update Methods
153
154
155 /// <summary>
156 /// Performs per-frame updates regularly
157 /// </summary>
158 /// <param name="sender"></param>
159 /// <param name="e"></param>
160 void Heartbeat(object sender, System.EventArgs e)
161 {
162 this.Update();
163 }
164
165 /// <summary>
166 /// Performs per-frame updates on the world, this should be the central world loop
167 /// </summary>
168 public override void Update()
169 {
170 updateLock.WaitOne();
171 try
172 {
173 if (this.phyScene.IsThreaded)
174 {
175 this.phyScene.GetResults();
176
177 }
178
179 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
180 {
181 Entities[UUID].updateMovement();
182 }
183
184 lock (this.m_syncRoot)
185 {
186 this.phyScene.Simulate(timeStep);
187 }
188
189 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
190 {
191 Entities[UUID].update();
192 }
193
194 // General purpose event manager
195 eventManager.TriggerOnFrame();
196
197 //backup world data
198 this.storageCount++;
199 if (storageCount > 1200) //set to how often you want to backup
200 {
201 this.Backup();
202 storageCount = 0;
203 }
204 }
205 catch (Exception e)
206 {
207 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: Update() - Failed with exception " + e.ToString());
208 }
209 updateLock.ReleaseMutex();
210
211 }
212
213 /// <summary>
214 ///
215 /// </summary>
216 /// <returns></returns>
217 public bool Backup()
218 {
219 /*
220 try
221 {
222 // Terrain backup routines
223 if (Terrain.tainted > 0)
224 {
225 Terrain.tainted = 0;
226 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: Backup() - Terrain tainted, saving.");
227 localStorage.SaveMap(Terrain.getHeights1D());
228 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: Backup() - Terrain saved, informing Physics.");
229 lock (this.m_syncRoot)
230 {
231 phyScene.SetTerrain(Terrain.getHeights1D());
232 }
233 }
234
235 // Primitive backup routines
236 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: Backup() - Backing up Primitives");
237 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
238 {
239 Entities[UUID].BackUp();
240 }
241
242 //Parcel backup routines
243 ParcelData[] parcels = new ParcelData[parcelManager.parcelList.Count];
244 int i = 0;
245 foreach (OpenSim.Region.Parcel parcel in parcelManager.parcelList.Values)
246 {
247 parcels[i] = parcel.parcelData;
248 i++;
249 }
250 localStorage.SaveParcels(parcels);
251
252 // Backup successful
253 return true;
254 }
255 catch (Exception e)
256 {
257 // Backup failed
258 OpenSim.Framework.Console.MainLog.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, "World.cs: Backup() - Backup Failed with exception " + e.ToString());
259 return false;
260 }
261 */
262 return true;
263 }
264 #endregion
265
266 #region Regenerate Terrain
267
268 /// <summary>
269 /// Rebuilds the terrain using a procedural algorithm
270 /// </summary>
271 public void RegenerateTerrain()
272 {
273 try
274 {
275 Terrain.hills();
276
277 lock (this.m_syncRoot)
278 {
279 this.phyScene.SetTerrain(Terrain.getHeights1D());
280 }
281 this.localStorage.SaveMap(this.Terrain.getHeights1D());
282
283 foreach (IClientAPI client in m_clientThreads.Values)
284 {
285 this.SendLayerData(client);
286 }
287
288 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
289 {
290 Entities[UUID].LandRenegerated();
291 }
292 }
293 catch (Exception e)
294 {
295 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
296 }
297 }
298
299 /// <summary>
300 /// Rebuilds the terrain using a 2D float array
301 /// </summary>
302 /// <param name="newMap">256,256 float array containing heights</param>
303 public void RegenerateTerrain(float[,] newMap)
304 {
305 try
306 {
307 this.Terrain.setHeights2D(newMap);
308 lock (this.m_syncRoot)
309 {
310 this.phyScene.SetTerrain(this.Terrain.getHeights1D());
311 }
312 this.localStorage.SaveMap(this.Terrain.getHeights1D());
313
314 foreach (IClientAPI client in m_clientThreads.Values)
315 {
316 this.SendLayerData(client);
317 }
318
319 foreach (libsecondlife.LLUUID UUID in Entities.Keys)
320 {
321 Entities[UUID].LandRenegerated();
322 }
323 }
324 catch (Exception e)
325 {
326 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
327 }
328 }
329
330 /// <summary>
331 /// Rebuilds the terrain assuming changes occured at a specified point[?]
332 /// </summary>
333 /// <param name="changes">???</param>
334 /// <param name="pointx">???</param>
335 /// <param name="pointy">???</param>
336 public void RegenerateTerrain(bool changes, int pointx, int pointy)
337 {
338 try
339 {
340 if (changes)
341 {
342 /* Dont save here, rely on tainting system instead */
343
344 foreach (IClientAPI client in m_clientThreads.Values)
345 {
346 this.SendLayerData(pointx, pointy, client);
347 }
348 }
349 }
350 catch (Exception e)
351 {
352 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: RegenerateTerrain() - Failed with exception " + e.ToString());
353 }
354 }
355
356 #endregion
357
358 #region Load Terrain
359 /// <summary>
360 /// Loads the World heightmap
361 /// </summary>
362 ///
363 public override void LoadWorldMap()
364 {
365 try
366 {
367 float[] map = this.localStorage.LoadWorld();
368 if (map == null)
369 {
370 if (string.IsNullOrEmpty(this.m_regInfo.estateSettings.terrainFile))
371 {
372 Console.WriteLine("No default terrain, procedurally generating...");
373 this.Terrain.hills();
374
375 this.localStorage.SaveMap(this.Terrain.getHeights1D());
376 }
377 else
378 {
379 try
380 {
381 this.Terrain.loadFromFileF32(this.m_regInfo.estateSettings.terrainFile);
382 this.Terrain *= this.m_regInfo.estateSettings.terrainMultiplier;
383 }
384 catch
385 {
386 Console.WriteLine("Unable to load default terrain, procedurally generating instead...");
387 Terrain.hills();
388 }
389 this.localStorage.SaveMap(this.Terrain.getHeights1D());
390 }
391 }
392 else
393 {
394 this.Terrain.setHeights1D(map);
395 }
396
397 CreateTerrainTexture();
398
399 }
400 catch (Exception e)
401 {
402 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadWorldMap() - Failed with exception " + e.ToString());
403 }
404 }
405
406 /// <summary>
407 ///
408 /// </summary>
409 private void CreateTerrainTexture()
410 {
411 //create a texture asset of the terrain
412 byte[] data = this.Terrain.exportJpegImage("defaultstripe.png");
413 this.m_regInfo.estateSettings.terrainImageID = LLUUID.Random();
414 AssetBase asset = new AssetBase();
415 asset.FullID = this.m_regInfo.estateSettings.terrainImageID;
416 asset.Data = data;
417 asset.Name = "terrainImage";
418 asset.Type = 0;
419 this.assetCache.AddAsset(asset);
420 }
421 #endregion
422
423 #region Primitives Methods
424
425
426 /// <summary>
427 /// Loads the World's objects
428 /// </summary>
429 public void LoadPrimsFromStorage()
430 {
431 try
432 {
433 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs: LoadPrimsFromStorage() - Loading primitives");
434 this.localStorage.LoadPrimitives(this);
435 }
436 catch (Exception e)
437 {
438 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadPrimsFromStorage() - Failed with exception " + e.ToString());
439 }
440 }
441
442 /// <summary>
443 /// Loads a specific object from storage
444 /// </summary>
445 /// <param name="prim">The object to load</param>
446 public void PrimFromStorage(PrimData prim)
447 {
448
449 }
450
451 /// <summary>
452 ///
453 /// </summary>
454 /// <param name="addPacket"></param>
455 /// <param name="agentClient"></param>
456 public void AddNewPrim(Packet addPacket, IClientAPI agentClient)
457 {
458 AddNewPrim((ObjectAddPacket)addPacket, agentClient.AgentId);
459 }
460
461 /// <summary>
462 ///
463 /// </summary>
464 /// <param name="addPacket"></param>
465 /// <param name="ownerID"></param>
466 public void AddNewPrim(ObjectAddPacket addPacket, LLUUID ownerID)
467 {
468 try
469 {
470 Primitive prim = new Primitive(m_regionHandle, this, addPacket, ownerID, this._primCount);
471
472 this.Entities.Add(prim.uuid, prim);
473 this._primCount++;
474
475 // Trigger event for listeners
476 eventManager.TriggerOnNewPrimitive(prim);
477 }
478 catch (Exception e)
479 {
480 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: AddNewPrim() - Failed with exception " + e.ToString());
481 }
482 }
483
484 #endregion
485
486 #region Add/Remove Avatar Methods
487
488 /// <summary>
489 ///
490 /// </summary>
491 /// <param name="remoteClient"></param
492 /// <param name="agentID"></param>
493 /// <param name="child"></param>
494 public override void AddNewClient(IClientAPI remoteClient, LLUUID agentID, bool child)
495 {
496 remoteClient.OnRegionHandShakeReply += this.SendLayerData;
497 //remoteClient.OnRequestWearables += new GenericCall(this.GetInitialPrims);
498 remoteClient.OnChatFromViewer += this.SimChat;
499 remoteClient.OnRequestWearables += this.InformClientOfNeighbours;
500 remoteClient.OnAddPrim += this.AddNewPrim;
501 remoteClient.OnUpdatePrimPosition += this.UpdatePrimPosition;
502 remoteClient.OnRequestMapBlocks += this.RequestMapBlocks;
503 remoteClient.OnTeleportLocationRequest += this.RequestTeleportLocation;
504 //remoteClient.OnObjectSelect += this.SelectPrim;
505 remoteClient.OnGrapUpdate += this.MoveObject;
506
507 /* remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest);
508 remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest);
509 remoteClient.OnParcelJoinRequest += new ParcelJoinRequest(parcelManager.handleParcelJoinRequest);
510 remoteClient.OnParcelPropertiesUpdateRequest += new ParcelPropertiesUpdateRequest(parcelManager.handleParcelPropertiesUpdateRequest);
511 remoteClient.OnEstateOwnerMessage += new EstateOwnerMessageRequest(estateManager.handleEstateOwnerMessage);
512 */
513
514 ScenePresence newAvatar = null;
515 try
516 {
517
518 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs:AddViewerAgent() - Creating new avatar for remote viewer agent");
519 newAvatar = new ScenePresence(remoteClient, this, this.m_regInfo);
520 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs:AddViewerAgent() - Adding new avatar to world");
521 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs:AddViewerAgent() - Starting RegionHandshake ");
522
523 //newAvatar.SendRegionHandshake();
524 this.estateManager.sendRegionHandshake(remoteClient);
525
526 PhysicsVector pVec = new PhysicsVector(newAvatar.Pos.X, newAvatar.Pos.Y, newAvatar.Pos.Z);
527 lock (this.m_syncRoot)
528 {
529 newAvatar.PhysActor = this.phyScene.AddAvatar(pVec);
530 }
531
532 lock (Entities)
533 {
534 if (!Entities.ContainsKey(agentID))
535 {
536 this.Entities.Add(agentID, newAvatar);
537 }
538 else
539 {
540 Entities[agentID] = newAvatar;
541 }
542 }
543 lock (Avatars)
544 {
545 if (Avatars.ContainsKey(agentID))
546 {
547 Avatars[agentID] = newAvatar;
548 }
549 else
550 {
551 this.Avatars.Add(agentID, newAvatar);
552 }
553 }
554 }
555 catch (Exception e)
556 {
557 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: AddViewerAgent() - Failed with exception " + e.ToString());
558 }
559 return;
560 }
561
562
563
564 /// <summary>
565 ///
566 /// </summary>
567 /// <param name="agentID"></param>
568 public override void RemoveClient(LLUUID agentID)
569 {
570 eventManager.TriggerOnRemovePresence(agentID);
571
572 return;
573 }
574 #endregion
575
576 #region Request Avatars List Methods
577 //The idea is to have a group of method that return a list of avatars meeting some requirement
578 // ie it could be all Avatars within a certain range of the calling prim/avatar.
579
580 /// <summary>
581 /// Request a List of all Avatars in this World
582 /// </summary>
583 /// <returns></returns>
584 public List<ScenePresence> RequestAvatarList()
585 {
586 List<ScenePresence> result = new List<ScenePresence>();
587
588 foreach (ScenePresence avatar in Avatars.Values)
589 {
590 result.Add(avatar);
591 }
592
593 return result;
594 }
595
596 /// <summary>
597 /// Request a filtered list of Avatars in this World
598 /// </summary>
599 /// <returns></returns>
600 public List<ScenePresence> RequestAvatarList(FilterAvatarList filter)
601 {
602 List<ScenePresence> result = new List<ScenePresence>();
603
604 foreach (ScenePresence avatar in Avatars.Values)
605 {
606 if (filter(avatar))
607 {
608 result.Add(avatar);
609 }
610 }
611
612 return result;
613 }
614
615 /// <summary>
616 /// Request a Avatar by UUID
617 /// </summary>
618 /// <param name="avatarID"></param>
619 /// <returns></returns>
620 public ScenePresence RequestAvatar(LLUUID avatarID)
621 {
622 if (this.Avatars.ContainsKey(avatarID))
623 {
624 return Avatars[avatarID];
625 }
626 return null;
627 }
628 #endregion
629
630
631 #region RegionCommsHost
632
633 /// <summary>
634 ///
635 /// </summary>
636 public void RegisterRegionWithComms()
637 {
638 GridInfo gridSettings = new GridInfo();
639 this.regionCommsHost = this.commsManager.GridServer.RegisterRegion(this.m_regInfo,gridSettings);
640 if (this.regionCommsHost != null)
641 {
642 this.regionCommsHost.OnExpectUser += new ExpectUserDelegate(this.NewUserConnection);
643 this.regionCommsHost.OnAvatarCrossingIntoRegion += new AgentCrossing(this.AgentCrossing);
644 }
645 }
646
647 /// <summary>
648 ///
649 /// </summary>
650 /// <param name="regionHandle"></param>
651 /// <param name="agent"></param>
652 public void NewUserConnection(ulong regionHandle, AgentCircuitData agent)
653 {
654 // Console.WriteLine("World.cs - add new user connection");
655 //should just check that its meant for this region
656 if (regionHandle == this.m_regInfo.RegionHandle)
657 {
658 if (agent.CapsPath != "")
659 {
660 //Console.WriteLine("new user, so creating caps handler for it");
661 Caps cap = new Caps(this.assetCache, httpListener, this.m_regInfo.CommsIPListenAddr, 9000, agent.CapsPath, agent.AgentID);
662 cap.RegisterHandlers();
663 this.capsHandlers.Add(agent.AgentID, cap);
664 }
665 this.authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
666 }
667 }
668
669 public void AgentCrossing(ulong regionHandle, libsecondlife.LLUUID agentID, libsecondlife.LLVector3 position)
670 {
671 if (regionHandle == this.m_regInfo.RegionHandle)
672 {
673 if (this.Avatars.ContainsKey(agentID))
674 {
675 this.Avatars[agentID].MakeAvatar(position);
676 }
677 }
678 }
679
680 /// <summary>
681 ///
682 /// </summary>
683 public void InformClientOfNeighbours(IClientAPI remoteClient)
684 {
685 // Console.WriteLine("informing client of neighbouring regions");
686 List<RegionInfo> neighbours = this.commsManager.GridServer.RequestNeighbours(this.m_regInfo);
687
688 //Console.WriteLine("we have " + neighbours.Count + " neighbouring regions");
689 if (neighbours != null)
690 {
691 for (int i = 0; i < neighbours.Count; i++)
692 {
693 // Console.WriteLine("sending neighbours data");
694 AgentCircuitData agent = remoteClient.RequestClientInfo();
695 agent.BaseFolder = LLUUID.Zero;
696 agent.InventoryFolder = LLUUID.Zero;
697 agent.startpos = new LLVector3(128, 128, 70);
698 agent.child = true;
699 this.commsManager.InterRegion.InformRegionOfChildAgent(neighbours[i].RegionHandle, agent);
700 remoteClient.InformClientOfNeighbour(neighbours[i].RegionHandle, System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr), (ushort)neighbours[i].CommsIPListenPort);
701 //this.capsHandlers[remoteClient.AgentId].CreateEstablishAgentComms("", System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr) + ":" + neighbours[i].CommsIPListenPort);
702 }
703 }
704 }
705
706 /// <summary>
707 ///
708 /// </summary>
709 /// <param name="regionHandle"></param>
710 /// <returns></returns>
711 public RegionInfo RequestNeighbouringRegionInfo(ulong regionHandle)
712 {
713 return this.commsManager.GridServer.RequestNeighbourInfo(regionHandle);
714 }
715
716 /// <summary>
717 ///
718 /// </summary>
719 /// <param name="minX"></param>
720 /// <param name="minY"></param>
721 /// <param name="maxX"></param>
722 /// <param name="maxY"></param>
723 public void RequestMapBlocks(IClientAPI remoteClient, int minX, int minY, int maxX, int maxY)
724 {
725 List<MapBlockData> mapBlocks;
726 mapBlocks = this.commsManager.GridServer.RequestNeighbourMapBlocks(minX, minY, maxX, maxY);
727 remoteClient.SendMapBlock(mapBlocks);
728 }
729
730 /// <summary>
731 ///
732 /// </summary>
733 /// <param name="remoteClient"></param>
734 /// <param name="RegionHandle"></param>
735 /// <param name="position"></param>
736 /// <param name="lookAt"></param>
737 /// <param name="flags"></param>
738 public void RequestTeleportLocation(IClientAPI remoteClient, ulong regionHandle, LLVector3 position, LLVector3 lookAt, uint flags)
739 {
740 if (regionHandle == this.m_regionHandle)
741 {
742 if (this.Avatars.ContainsKey(remoteClient.AgentId))
743 {
744 remoteClient.SendTeleportLocationStart();
745 remoteClient.SendLocalTeleport(position, lookAt, flags);
746 this.Avatars[remoteClient.AgentId].Teleport(position);
747 }
748 }
749 else
750 {
751 RegionInfo reg = this.RequestNeighbouringRegionInfo(regionHandle);
752 if (reg != null)
753 {
754 remoteClient.SendTeleportLocationStart();
755 AgentCircuitData agent = remoteClient.RequestClientInfo();
756 agent.BaseFolder = LLUUID.Zero;
757 agent.InventoryFolder = LLUUID.Zero;
758 agent.startpos = new LLVector3(128, 128, 70);
759 agent.child = true;
760 this.commsManager.InterRegion.InformRegionOfChildAgent(regionHandle, agent);
761 this.commsManager.InterRegion.ExpectAvatarCrossing(regionHandle, remoteClient.AgentId, position);
762 remoteClient.SendRegionTeleport(regionHandle, 13, reg.CommsIPListenAddr, (ushort)reg.CommsIPListenPort, 4, (1 << 4));
763 }
764 //remoteClient.SendTeleportCancel();
765 }
766 }
767
768 /// <summary>
769 ///
770 /// </summary>
771 /// <param name="regionhandle"></param>
772 /// <param name="agentID"></param>
773 /// <param name="position"></param>
774 public bool InformNeighbourOfCrossing(ulong regionhandle, LLUUID agentID, LLVector3 position)
775 {
776 return this.commsManager.InterRegion.ExpectAvatarCrossing(regionhandle, agentID, position);
777 }
778
779 #endregion
780 }
781}
diff --git a/OpenSim/OpenSim.Region/Scenes/SceneBase.cs b/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
deleted file mode 100644
index 5275fcf..0000000
--- a/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
+++ /dev/null
@@ -1,200 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using libsecondlife;
30using libsecondlife.Packets;
31using System.Collections.Generic;
32using System.Text;
33using System.Reflection;
34using System.IO;
35using System.Threading;
36using OpenSim.Physics.Manager;
37using OpenSim.Framework.Interfaces;
38using OpenSim.Framework.Types;
39using OpenSim.Framework.Inventory;
40using OpenSim.Terrain;
41using OpenSim.Caches;
42
43namespace OpenSim.Region.Scenes
44{
45 public abstract class SceneBase : IWorld
46 {
47 public Dictionary<libsecondlife.LLUUID, Entity> Entities;
48 protected Dictionary<uint, IClientAPI> m_clientThreads;
49 protected ulong m_regionHandle;
50 protected string m_regionName;
51 protected RegionInfo m_regInfo;
52
53 public TerrainEngine Terrain;
54
55 public string m_datastore;
56 public ILocalStorage localStorage;
57
58 protected object m_syncRoot = new object();
59 private uint m_nextLocalId = 8880000;
60 protected AssetCache assetCache;
61
62 #region Update Methods
63 /// <summary>
64 /// Normally called once every frame/tick to let the world preform anything required (like running the physics simulation)
65 /// </summary>
66 public abstract void Update();
67
68 #endregion
69
70 #region Terrain Methods
71
72 /// <summary>
73 /// Loads the World heightmap
74 /// </summary>
75 public abstract void LoadWorldMap();
76
77 /// <summary>
78 /// Loads a new storage subsystem from a named library
79 /// </summary>
80 /// <param name="dllName">Storage Library</param>
81 /// <returns>Successful or not</returns>
82 public bool LoadStorageDLL(string dllName)
83 {
84 try
85 {
86 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
87 ILocalStorage store = null;
88
89 foreach (Type pluginType in pluginAssembly.GetTypes())
90 {
91 if (pluginType.IsPublic)
92 {
93 if (!pluginType.IsAbstract)
94 {
95 Type typeInterface = pluginType.GetInterface("ILocalStorage", true);
96
97 if (typeInterface != null)
98 {
99 ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
100 store = plug;
101
102 store.Initialise(this.m_datastore);
103 break;
104 }
105
106 typeInterface = null;
107 }
108 }
109 }
110 pluginAssembly = null;
111 this.localStorage = store;
112 return (store == null);
113 }
114 catch (Exception e)
115 {
116 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadStorageDLL() - Failed with exception " + e.ToString());
117 return false;
118 }
119 }
120
121
122 /// <summary>
123 /// Send the region heightmap to the client
124 /// </summary>
125 /// <param name="RemoteClient">Client to send to</param>
126 public virtual void SendLayerData(IClientAPI RemoteClient)
127 {
128 RemoteClient.SendLayerData(Terrain.getHeights1D());
129 }
130
131 /// <summary>
132 /// Sends a specified patch to a client
133 /// </summary>
134 /// <param name="px">Patch coordinate (x) 0..16</param>
135 /// <param name="py">Patch coordinate (y) 0..16</param>
136 /// <param name="RemoteClient">The client to send to</param>
137 public virtual void SendLayerData(int px, int py, IClientAPI RemoteClient)
138 {
139 RemoteClient.SendLayerData(px, py, Terrain.getHeights1D());
140 }
141
142 #endregion
143
144 #region Add/Remove Agent/Avatar
145 /// <summary>
146 ///
147 /// </summary>
148 /// <param name="remoteClient"></param>
149 /// <param name="agentID"></param>
150 /// <param name="child"></param>
151 public abstract void AddNewClient(IClientAPI remoteClient, LLUUID agentID, bool child);
152
153 /// <summary>
154 ///
155 /// </summary>
156 /// <param name="agentID"></param>
157 public abstract void RemoveClient(LLUUID agentID);
158
159 #endregion
160
161 /// <summary>
162 ///
163 /// </summary>
164 /// <returns></returns>
165 public virtual RegionInfo RegionInfo
166 {
167 get { return this.m_regInfo; }
168 }
169
170 public object SyncRoot
171 {
172 get { return m_syncRoot; }
173 }
174
175 public uint NextLocalId
176 {
177 get { return m_nextLocalId++; }
178 }
179
180 #region Shutdown
181 /// <summary>
182 /// Tidy before shutdown
183 /// </summary>
184 public virtual void Close()
185 {
186 try
187 {
188 this.localStorage.ShutDown();
189 }
190 catch (Exception e)
191 {
192 OpenSim.Framework.Console.MainLog.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, "World.cs: Close() - Failed with exception " + e.ToString());
193 }
194 }
195
196 #endregion
197
198
199 }
200}
diff --git a/OpenSim/OpenSim.Region/Scenes/SceneEvents.cs b/OpenSim/OpenSim.Region/Scenes/SceneEvents.cs
deleted file mode 100644
index 4b39e51..0000000
--- a/OpenSim/OpenSim.Region/Scenes/SceneEvents.cs
+++ /dev/null
@@ -1,79 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32namespace OpenSim.Region.Scenes
33{
34 /// <summary>
35 /// A class for triggering remote scene events.
36 /// </summary>
37 public class EventManager
38 {
39 public delegate void OnFrameDelegate();
40 public event OnFrameDelegate OnFrame;
41
42 public delegate void OnNewPresenceDelegate(ScenePresence presence);
43 public event OnNewPresenceDelegate OnNewPresence;
44
45 public delegate void OnNewPrimitiveDelegate(Primitive prim);
46 public event OnNewPrimitiveDelegate OnNewPrimitive;
47
48 public delegate void OnRemovePresenceDelegate(libsecondlife.LLUUID uuid);
49 public event OnRemovePresenceDelegate OnRemovePresence;
50
51 public void TriggerOnFrame()
52 {
53 if (OnFrame != null)
54 {
55 OnFrame();
56 }
57 }
58
59 public void TriggerOnNewPrimitive(Primitive prim)
60 {
61 if (OnNewPrimitive != null)
62 OnNewPrimitive(prim);
63 }
64
65 public void TriggerOnNewPresence(ScenePresence presence)
66 {
67 if (OnNewPresence != null)
68 OnNewPresence(presence);
69 }
70
71 public void TriggerOnRemovePresence(libsecondlife.LLUUID uuid)
72 {
73 if (OnRemovePresence != null)
74 {
75 OnRemovePresence(uuid);
76 }
77 }
78 }
79}
diff --git a/OpenSim/OpenSim.Region/Scenes/SceneObject.cs b/OpenSim/OpenSim.Region/Scenes/SceneObject.cs
deleted file mode 100644
index 5df87bf..0000000
--- a/OpenSim/OpenSim.Region/Scenes/SceneObject.cs
+++ /dev/null
@@ -1,128 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31using libsecondlife;
32using libsecondlife.Packets;
33using OpenSim.Framework.Interfaces;
34using OpenSim.Physics.Manager;
35using OpenSim.Framework.Types;
36using OpenSim.Framework.Inventory;
37
38namespace OpenSim.Region.Scenes
39{
40 public class SceneObject : Entity
41 {
42 private LLUUID rootUUID;
43 //private Dictionary<LLUUID, Primitive> ChildPrimitives = new Dictionary<LLUUID, Primitive>();
44 protected Primitive rootPrimitive;
45 private Scene m_world;
46 protected ulong regionHandle;
47
48 /// <summary>
49 ///
50 /// </summary>
51 public SceneObject()
52 {
53
54 }
55
56 /// <summary>
57 ///
58 /// </summary>
59 /// <param name="addPacket"></param>
60 /// <param name="agentID"></param>
61 /// <param name="localID"></param>
62 public void CreateFromPacket(ObjectAddPacket addPacket, LLUUID agentID, uint localID)
63 {
64 this.rootPrimitive = new Primitive( this.regionHandle, this.m_world, addPacket, agentID, localID);
65 }
66
67 /// <summary>
68 ///
69 /// </summary>
70 /// <param name="data"></param>
71 public void CreateFromBytes(byte[] data)
72 {
73
74 }
75
76 /// <summary>
77 ///
78 /// </summary>
79 public override void update()
80 {
81
82 }
83
84 /// <summary>
85 ///
86 /// </summary>
87 public override void BackUp()
88 {
89
90 }
91
92 /// <summary>
93 ///
94 /// </summary>
95 /// <param name="client"></param>
96 public void GetProperites(IClientAPI client)
97 {
98 //needs changing
99 ObjectPropertiesPacket proper = new ObjectPropertiesPacket();
100 proper.ObjectData = new ObjectPropertiesPacket.ObjectDataBlock[1];
101 proper.ObjectData[0] = new ObjectPropertiesPacket.ObjectDataBlock();
102 proper.ObjectData[0].ItemID = LLUUID.Zero;
103 proper.ObjectData[0].CreationDate = (ulong)this.rootPrimitive.primData.CreationDate;
104 proper.ObjectData[0].CreatorID = this.rootPrimitive.primData.OwnerID;
105 proper.ObjectData[0].FolderID = LLUUID.Zero;
106 proper.ObjectData[0].FromTaskID = LLUUID.Zero;
107 proper.ObjectData[0].GroupID = LLUUID.Zero;
108 proper.ObjectData[0].InventorySerial = 0;
109 proper.ObjectData[0].LastOwnerID = LLUUID.Zero;
110 proper.ObjectData[0].ObjectID = this.uuid;
111 proper.ObjectData[0].OwnerID = this.rootPrimitive.primData.OwnerID;
112 proper.ObjectData[0].TouchName = new byte[0];
113 proper.ObjectData[0].TextureID = new byte[0];
114 proper.ObjectData[0].SitName = new byte[0];
115 proper.ObjectData[0].Name = new byte[0];
116 proper.ObjectData[0].Description = new byte[0];
117 proper.ObjectData[0].OwnerMask = this.rootPrimitive.primData.OwnerMask;
118 proper.ObjectData[0].NextOwnerMask = this.rootPrimitive.primData.NextOwnerMask;
119 proper.ObjectData[0].GroupMask = this.rootPrimitive.primData.GroupMask;
120 proper.ObjectData[0].EveryoneMask = this.rootPrimitive.primData.EveryoneMask;
121 proper.ObjectData[0].BaseMask = this.rootPrimitive.primData.BaseMask;
122
123 client.OutPacket(proper);
124
125 }
126
127 }
128}
diff --git a/OpenSim/OpenSim.Region/Scenes/ScenePresence.Animations.cs b/OpenSim/OpenSim.Region/Scenes/ScenePresence.Animations.cs
deleted file mode 100644
index f0a8721..0000000
--- a/OpenSim/OpenSim.Region/Scenes/ScenePresence.Animations.cs
+++ /dev/null
@@ -1,76 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31using libsecondlife;
32using System.Xml;
33
34namespace OpenSim.Region.Scenes
35{
36 partial class ScenePresence
37 {
38 public class AvatarAnimations
39 {
40
41 public Dictionary<string, LLUUID> AnimsLLUUID = new Dictionary<string, LLUUID>();
42 public Dictionary<LLUUID, string> AnimsNames = new Dictionary<LLUUID, string>();
43
44 public AvatarAnimations()
45 {
46 }
47
48 public void LoadAnims()
49 {
50 //OpenSim.Framework.Console.MainLog.Instance.Verbose("Avatar.cs:LoadAnims() - Loading avatar animations");
51 XmlTextReader reader = new XmlTextReader("data/avataranimations.xml");
52
53 XmlDocument doc = new XmlDocument();
54 doc.Load(reader);
55 foreach (XmlNode nod in doc.DocumentElement.ChildNodes)
56 {
57
58 if (nod.Attributes["name"] != null)
59 {
60 AnimsLLUUID.Add(nod.Attributes["name"].Value, nod.InnerText);
61 }
62
63 }
64
65 reader.Close();
66
67 // OpenSim.Framework.Console.MainLog.Instance.Verbose("Loaded " + AnimsLLUUID.Count.ToString() + " animation(s)");
68
69 foreach (KeyValuePair<string, LLUUID> kp in OpenSim.Region.Scenes.ScenePresence.Animations.AnimsLLUUID)
70 {
71 AnimsNames.Add(kp.Value, kp.Key);
72 }
73 }
74 }
75 }
76}
diff --git a/OpenSim/OpenSim.Region/Scenes/ScenePresence.Body.cs b/OpenSim/OpenSim.Region/Scenes/ScenePresence.Body.cs
deleted file mode 100644
index d21b11f..0000000
--- a/OpenSim/OpenSim.Region/Scenes/ScenePresence.Body.cs
+++ /dev/null
@@ -1,90 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31using libsecondlife;
32using libsecondlife.Packets;
33using OpenSim.Physics.Manager;
34using OpenSim.Framework.Interfaces;
35using OpenSim.Framework.Types;
36
37namespace OpenSim.Region.Scenes
38{
39 partial class ScenePresence
40 {
41 public class Avatar : IScenePresenceBody
42 {
43 public Avatar()
44 {
45
46 }
47
48 public void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation)
49 {
50 }
51
52 public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam)
53 {
54 }
55
56 public void SendOurAppearance(IClientAPI OurClient)
57 {
58 }
59
60 public void SendAppearanceToOtherAgent(ScenePresence avatarInfo)
61 {
62 }
63 }
64
65 public class ChildAgent : IScenePresenceBody //is a ghost
66 {
67 public ChildAgent()
68 {
69
70 }
71
72 public void processMovement(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation)
73 {
74 }
75
76 public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam)
77 {
78 }
79
80 public void SendOurAppearance(IClientAPI OurClient)
81 {
82 }
83
84 public void SendAppearanceToOtherAgent(ScenePresence avatarInfo)
85 {
86 }
87 }
88 }
89
90}
diff --git a/OpenSim/OpenSim.Region/Scenes/ScenePresence.cs b/OpenSim/OpenSim.Region/Scenes/ScenePresence.cs
deleted file mode 100644
index 45d3fed..0000000
--- a/OpenSim/OpenSim.Region/Scenes/ScenePresence.cs
+++ /dev/null
@@ -1,525 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.IO;
31using System.Text;
32using libsecondlife;
33using libsecondlife.Packets;
34using OpenSim.Physics.Manager;
35using OpenSim.Framework.Inventory;
36using OpenSim.Framework.Interfaces;
37using OpenSim.Framework.Types;
38using Axiom.MathLib;
39
40namespace OpenSim.Region.Scenes
41{
42 public partial class ScenePresence : Entity
43 {
44 public static bool PhysicsEngineFlying = false;
45 public static AvatarAnimations Animations;
46 public static byte[] DefaultTexture;
47 public string firstname;
48 public string lastname;
49 public IClientAPI ControllingClient;
50 public LLUUID current_anim;
51 public int anim_seq;
52 private bool updateflag = false;
53 private byte movementflag = 0;
54 private List<NewForce> forcesList = new List<NewForce>();
55 private short _updateCount = 0;
56 private Axiom.MathLib.Quaternion bodyRot;
57 private LLObject.TextureEntry avatarAppearanceTexture = null;
58 private byte[] visualParams;
59 private AvatarWearable[] Wearables;
60 private LLVector3 positionLastFrame = new LLVector3(0, 0, 0);
61 private ulong m_regionHandle;
62 private bool childAgent = false;
63 private bool newForce = false;
64 private bool newAvatar = false;
65 private IScenePresenceBody m_body;
66
67 protected RegionInfo m_regionInfo;
68
69 #region Properties
70 /// <summary>
71 ///
72 /// </summary>
73 public PhysicsActor PhysActor
74 {
75 set
76 {
77 this._physActor = value;
78 }
79 get
80 {
81 return _physActor;
82 }
83 }
84 #endregion
85
86 #region Constructor(s)
87 /// <summary>
88 ///
89 /// </summary>
90 /// <param name="theClient"></param>
91 /// <param name="world"></param>
92 /// <param name="clientThreads"></param>
93 /// <param name="regionDat"></param>
94 public ScenePresence(IClientAPI theClient, Scene world, RegionInfo reginfo)
95 {
96
97 m_world = world;
98 this.uuid = theClient.AgentId;
99
100 m_regionInfo = reginfo;
101 m_regionHandle = reginfo.RegionHandle;
102 OpenSim.Framework.Console.MainLog.Instance.Verbose("Avatar.cs ");
103 ControllingClient = theClient;
104 this.firstname = ControllingClient.FirstName;
105 this.lastname = ControllingClient.LastName;
106 m_localId = m_world.NextLocalId;
107 Pos = ControllingClient.StartPos;
108 visualParams = new byte[218];
109 for (int i = 0; i < 218; i++)
110 {
111 visualParams[i] = 100;
112 }
113
114 Wearables = AvatarWearable.DefaultWearables;
115
116 this.avatarAppearanceTexture = new LLObject.TextureEntry(new LLUUID("00000000-0000-0000-5005-000000000005"));
117
118 //register for events
119 ControllingClient.OnRequestWearables += this.SendOurAppearance;
120 //ControllingClient.OnSetAppearance += new SetAppearance(this.SetAppearance);
121 ControllingClient.OnCompleteMovementToRegion += this.CompleteMovement;
122 ControllingClient.OnCompleteMovementToRegion += this.SendInitialData;
123 ControllingClient.OnAgentUpdate += this.HandleAgentUpdate;
124 // ControllingClient.OnStartAnim += new StartAnim(this.SendAnimPack);
125 // ControllingClient.OnChildAgentStatus += new StatusChange(this.ChildStatusChange);
126 //ControllingClient.OnStopMovement += new GenericCall2(this.StopMovement);
127
128 }
129 #endregion
130
131 #region Status Methods
132 /// <summary>
133 /// Not Used, most likely can be deleted
134 /// </summary>
135 /// <param name="status"></param>
136 public void ChildStatusChange(bool status)
137 {
138 this.childAgent = status;
139
140 if (this.childAgent == true)
141 {
142 this.Velocity = new LLVector3(0, 0, 0);
143 this.Pos = new LLVector3(128, 128, 70);
144
145 }
146 }
147
148 /// <summary>
149 ///
150 /// </summary>
151 /// <param name="pos"></param>
152 public void MakeAvatar(LLVector3 pos)
153 {
154 //this.childAvatar = false;
155 this.Pos = pos;
156 this.newAvatar = true;
157 this.childAgent = false;
158 }
159
160 protected void MakeChildAgent()
161 {
162 this.Velocity = new LLVector3(0, 0, 0);
163 this.Pos = new LLVector3(128, 128, 70);
164 this.childAgent = true;
165 }
166
167 /// <summary>
168 ///
169 /// </summary>
170 /// <param name="pos"></param>
171 public void Teleport(LLVector3 pos)
172 {
173 this.Pos = pos;
174 this.SendTerseUpdateToALLClients();
175 }
176
177 /// <summary>
178 ///
179 /// </summary>
180 public void StopMovement()
181 {
182
183 }
184 #endregion
185
186 #region Event Handlers
187 /// <summary>
188 ///
189 /// </summary>
190 /// <param name="texture"></param>
191 /// <param name="visualParam"></param>
192 public void SetAppearance(byte[] texture, AgentSetAppearancePacket.VisualParamBlock[] visualParam)
193 {
194
195 }
196
197 /// <summary>
198 /// Complete Avatar's movement into the region
199 /// </summary>
200 public void CompleteMovement()
201 {
202 LLVector3 look = this.Velocity;
203 if ((look.X == 0) && (look.Y == 0) && (look.Z == 0))
204 {
205 look = new LLVector3(0.99f, 0.042f, 0);
206 }
207 this.ControllingClient.MoveAgentIntoRegion(m_regionInfo, Pos, look);
208 if (this.childAgent)
209 {
210 this.childAgent = false;
211 }
212 }
213
214 /// <summary>
215 ///
216 /// </summary>
217 /// <param name="pack"></param>
218 public void HandleAgentUpdate(IClientAPI remoteClient, uint flags, LLQuaternion bodyRotation)
219 {
220 if ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_AT_POS) != 0)
221 {
222 Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z);
223 if (((movementflag & 1) == 0) || (q != this.bodyRot))
224 {
225 Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0);
226 this.AddNewMovement(v3, q);
227 movementflag = 1;
228 this.bodyRot = q;
229 }
230 }
231 else if ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_AT_NEG) != 0)
232 {
233 Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z);
234 if (((movementflag & 2) == 0) || (q != this.bodyRot))
235 {
236 Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(-1, 0, 0);
237 this.AddNewMovement(v3, q);
238 movementflag = 2;
239 this.bodyRot = q;
240 }
241 }
242 else
243 {
244 if ((movementflag) != 0)
245 {
246 NewForce newVelocity = new NewForce();
247 newVelocity.X = 0;
248 newVelocity.Y = 0;
249 newVelocity.Z = 0;
250 this.forcesList.Add(newVelocity);
251 movementflag = 0;
252 }
253 }
254
255 }
256
257 protected void AddNewMovement(Axiom.MathLib.Vector3 vec, Axiom.MathLib.Quaternion rotation)
258 {
259 NewForce newVelocity = new NewForce();
260 Axiom.MathLib.Vector3 direc = rotation * vec;
261 direc.Normalize();
262
263 direc = direc * ((0.03f) * 128f);
264 if (this._physActor.Flying)
265 direc *= 4;
266
267 newVelocity.X = direc.x;
268 newVelocity.Y = direc.y;
269 newVelocity.Z = direc.z;
270 this.forcesList.Add(newVelocity);
271 }
272
273 #endregion
274
275 #region Overridden Methods
276 /// <summary>
277 ///
278 /// </summary>
279 public override void LandRenegerated()
280 {
281
282 }
283
284 /// <summary>
285 ///
286 /// </summary>
287 public override void update()
288 {
289 if (this.childAgent == false)
290 {
291 if (this.newForce)
292 {
293 this.SendTerseUpdateToALLClients();
294 _updateCount = 0;
295 }
296 else if (movementflag != 0)
297 {
298 _updateCount++;
299 if (_updateCount > 3)
300 {
301 this.SendTerseUpdateToALLClients();
302 _updateCount = 0;
303 }
304 }
305
306 this.CheckForBorderCrossing();
307 }
308 }
309 #endregion
310
311 #region Update Client(s)
312 /// <summary>
313 ///
314 /// </summary>
315 /// <param name="RemoteClient"></param>
316 public void SendTerseUpdateToClient(IClientAPI RemoteClient)
317 {
318 LLVector3 pos = this.Pos;
319 LLVector3 vel = this.Velocity;
320 RemoteClient.SendAvatarTerseUpdate(this.m_regionHandle, 64096, this.LocalId, new LLVector3(pos.X, pos.Y, pos.Z), new LLVector3(vel.X, vel.Y, vel.Z));
321 }
322
323 /// <summary>
324 ///
325 /// </summary>
326 public void SendTerseUpdateToALLClients()
327 {
328 List<ScenePresence> avatars = this.m_world.RequestAvatarList();
329 for (int i = 0; i < avatars.Count; i++)
330 {
331 this.SendTerseUpdateToClient(avatars[i].ControllingClient);
332 }
333 }
334
335 /// <summary>
336 ///
337 /// </summary>
338 /// <param name="remoteAvatar"></param>
339 public void SendFullUpdateToOtherClient(ScenePresence remoteAvatar)
340 {
341 remoteAvatar.ControllingClient.SendAvatarData(m_regionInfo.RegionHandle, this.firstname, this.lastname, this.uuid, this.LocalId, this.Pos, DefaultTexture);
342 }
343
344 /// <summary>
345 ///
346 /// </summary>
347 public void SendInitialData()
348 {
349 this.ControllingClient.SendAvatarData(m_regionInfo.RegionHandle, this.firstname, this.lastname, this.uuid, this.LocalId, this.Pos, DefaultTexture);
350 if (this.newAvatar)
351 {
352 this.m_world.InformClientOfNeighbours(this.ControllingClient);
353 this.newAvatar = false;
354 }
355 }
356
357 /// <summary>
358 ///
359 /// </summary>
360 /// <param name="OurClient"></param>
361 public void SendOurAppearance(IClientAPI OurClient)
362 {
363 this.ControllingClient.SendWearables(this.Wearables);
364 }
365
366 /// <summary>
367 ///
368 /// </summary>
369 /// <param name="avatarInfo"></param>
370 public void SendAppearanceToOtherAgent(ScenePresence avatarInfo)
371 {
372
373 }
374
375 /// <summary>
376 ///
377 /// </summary>
378 /// <param name="animID"></param>
379 /// <param name="seq"></param>
380 public void SendAnimPack(LLUUID animID, int seq)
381 {
382
383
384 }
385
386 /// <summary>
387 ///
388 /// </summary>
389 public void SendAnimPack()
390 {
391
392 }
393 #endregion
394
395 #region Border Crossing Methods
396 /// <summary>
397 ///
398 /// </summary>
399 protected void CheckForBorderCrossing()
400 {
401 LLVector3 pos2 = this.Pos;
402 LLVector3 vel = this.Velocity;
403
404 float timeStep = 0.2f;
405 pos2.X = pos2.X + (vel.X * timeStep);
406 pos2.Y = pos2.Y + (vel.Y * timeStep);
407 pos2.Z = pos2.Z + (vel.Z * timeStep);
408
409 if ((pos2.X < 0) || (pos2.X > 256))
410 {
411 this.CrossToNewRegion();
412 }
413
414 if ((pos2.Y < 0) || (pos2.Y > 256))
415 {
416 this.CrossToNewRegion();
417 }
418 }
419
420 /// <summary>
421 ///
422 /// </summary>
423 protected void CrossToNewRegion()
424 {
425 LLVector3 pos = this.Pos;
426 LLVector3 newpos = new LLVector3(pos.X, pos.Y, pos.Z);
427 uint neighbourx = this.m_regionInfo.RegionLocX;
428 uint neighboury = this.m_regionInfo.RegionLocY;
429
430 if (pos.X < 2)
431 {
432 neighbourx -= 1;
433 newpos.X = 254;
434 }
435 if (pos.X > 253)
436 {
437 neighbourx += 1;
438 newpos.X = 1;
439 }
440 if (pos.Y < 2)
441 {
442 neighboury -= 1;
443 newpos.Y = 254;
444 }
445 if (pos.Y > 253)
446 {
447 neighboury += 1;
448 newpos.Y = 1;
449 }
450
451 LLVector3 vel = this.velocity;
452 ulong neighbourHandle = Helpers.UIntsToLong((uint)(neighbourx * 256), (uint)(neighboury * 256));
453 RegionInfo neighbourRegion = this.m_world.RequestNeighbouringRegionInfo(neighbourHandle);
454 if (neighbourRegion != null)
455 {
456 bool res = this.m_world.InformNeighbourOfCrossing(neighbourHandle, this.ControllingClient.AgentId, newpos);
457 if (res)
458 {
459 this.MakeChildAgent();
460 this.ControllingClient.CrossRegion(neighbourHandle, newpos, vel, System.Net.IPAddress.Parse(neighbourRegion.CommsIPListenAddr), (ushort)neighbourRegion.CommsIPListenPort);
461 }
462 }
463 }
464 #endregion
465
466 /// <summary>
467 ///
468 /// </summary>
469 public static void LoadAnims()
470 {
471
472 }
473
474 /// <summary>
475 ///
476 /// </summary>
477 public override void updateMovement()
478 {
479 newForce = false;
480 lock (this.forcesList)
481 {
482 if (this.forcesList.Count > 0)
483 {
484 for (int i = 0; i < this.forcesList.Count; i++)
485 {
486 NewForce force = this.forcesList[i];
487
488 this.updateflag = true;
489 this.Velocity = new LLVector3(force.X, force.Y, force.Z);
490 this.newForce = true;
491 }
492 for (int i = 0; i < this.forcesList.Count; i++)
493 {
494 this.forcesList.RemoveAt(0);
495 }
496 }
497 }
498 }
499
500 public static void LoadTextureFile(string name)
501 {
502 FileInfo fInfo = new FileInfo(name);
503 long numBytes = fInfo.Length;
504 FileStream fStream = new FileStream(name, FileMode.Open, FileAccess.Read);
505 BinaryReader br = new BinaryReader(fStream);
506 byte[] data1 = br.ReadBytes((int)numBytes);
507 br.Close();
508 fStream.Close();
509 DefaultTexture = data1;
510 }
511
512 public class NewForce
513 {
514 public float X;
515 public float Y;
516 public float Z;
517
518 public NewForce()
519 {
520
521 }
522 }
523 }
524
525}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/Engines/CSharpScriptEngine.cs b/OpenSim/OpenSim.Region/Scenes/scripting/Engines/CSharpScriptEngine.cs
deleted file mode 100644
index 870303f..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/Engines/CSharpScriptEngine.cs
+++ /dev/null
@@ -1,104 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32// Compilation stuff
33using System.CodeDom;
34using System.CodeDom.Compiler;
35using Microsoft.CSharp;
36
37namespace OpenSim.Scripting
38{
39 public class CSharpScriptEngine : IScriptCompiler
40 {
41 public string FileExt()
42 {
43 return ".cs";
44 }
45
46 private Dictionary<string,IScript> LoadDotNetScript(ICodeCompiler compiler, string filename)
47 {
48 CompilerParameters compilerParams = new CompilerParameters();
49 CompilerResults compilerResults;
50 compilerParams.GenerateExecutable = false;
51 compilerParams.GenerateInMemory = true;
52 compilerParams.IncludeDebugInformation = false;
53 compilerParams.ReferencedAssemblies.Add("OpenSim.Region.dll");
54 compilerParams.ReferencedAssemblies.Add("OpenSim.Framework.dll");
55 compilerParams.ReferencedAssemblies.Add("libsecondlife.dll");
56 compilerParams.ReferencedAssemblies.Add("System.dll");
57
58 compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename);
59
60 if (compilerResults.Errors.Count > 0)
61 {
62 OpenSim.Framework.Console.MainLog.Instance.Error("Compile errors");
63 foreach (CompilerError error in compilerResults.Errors)
64 {
65 OpenSim.Framework.Console.MainLog.Instance.Error(error.Line.ToString() + ": " + error.ErrorText.ToString());
66 }
67 }
68 else
69 {
70 Dictionary<string,IScript> scripts = new Dictionary<string,IScript>();
71
72 foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes())
73 {
74 Type testInterface = pluginType.GetInterface("IScript", true);
75
76 if (testInterface != null)
77 {
78 IScript script = (IScript)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString());
79
80 string scriptName = "C#/" + script.getName();
81 Console.WriteLine("Script: " + scriptName + " loaded.");
82
83 if (!scripts.ContainsKey(scriptName))
84 {
85 scripts.Add(scriptName, script);
86 }
87 else
88 {
89 scripts[scriptName] = script;
90 }
91 }
92 }
93 return scripts;
94 }
95 return null;
96 }
97
98 public Dictionary<string,IScript> compile(string filename)
99 {
100 CSharpCodeProvider csharpProvider = new CSharpCodeProvider();
101 return LoadDotNetScript(csharpProvider.CreateCompiler(), filename);
102 }
103 }
104}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/Engines/JScriptEngine.cs b/OpenSim/OpenSim.Region/Scenes/scripting/Engines/JScriptEngine.cs
deleted file mode 100644
index ffae1d7..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/Engines/JScriptEngine.cs
+++ /dev/null
@@ -1,104 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32// Compilation stuff
33using System.CodeDom;
34using System.CodeDom.Compiler;
35using Microsoft.JScript;
36
37namespace OpenSim.Scripting
38{
39 public class JScriptEngine : IScriptCompiler
40 {
41 public string FileExt()
42 {
43 return ".js";
44 }
45
46 private Dictionary<string, IScript> LoadDotNetScript(ICodeCompiler compiler, string filename)
47 {
48 CompilerParameters compilerParams = new CompilerParameters();
49 CompilerResults compilerResults;
50 compilerParams.GenerateExecutable = false;
51 compilerParams.GenerateInMemory = true;
52 compilerParams.IncludeDebugInformation = false;
53 compilerParams.ReferencedAssemblies.Add("OpenSim.Region.dll");
54 compilerParams.ReferencedAssemblies.Add("OpenSim.Framework.dll");
55 compilerParams.ReferencedAssemblies.Add("libsecondlife.dll");
56 compilerParams.ReferencedAssemblies.Add("System.dll");
57
58 compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename);
59
60 if (compilerResults.Errors.Count > 0)
61 {
62 OpenSim.Framework.Console.MainLog.Instance.Error("Compile errors");
63 foreach (CompilerError error in compilerResults.Errors)
64 {
65 OpenSim.Framework.Console.MainLog.Instance.Error(error.Line.ToString() + ": " + error.ErrorText.ToString());
66 }
67 }
68 else
69 {
70 Dictionary<string, IScript> scripts = new Dictionary<string, IScript>();
71
72 foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes())
73 {
74 Type testInterface = pluginType.GetInterface("IScript", true);
75
76 if (testInterface != null)
77 {
78 IScript script = (IScript)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString());
79
80 string scriptName = "JS.NET/" + script.getName();
81 Console.WriteLine("Script: " + scriptName + " loaded.");
82
83 if (!scripts.ContainsKey(scriptName))
84 {
85 scripts.Add(scriptName, script);
86 }
87 else
88 {
89 scripts[scriptName] = script;
90 }
91 }
92 }
93 return scripts;
94 }
95 return null;
96 }
97
98 public Dictionary<string, IScript> compile(string filename)
99 {
100 JScriptCodeProvider jscriptProvider = new JScriptCodeProvider();
101 return LoadDotNetScript(jscriptProvider.CreateCompiler(), filename);
102 }
103 }
104}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/Engines/JSharpScriptEngine.cs b/OpenSim/OpenSim.Region/Scenes/scripting/Engines/JSharpScriptEngine.cs
deleted file mode 100644
index b33b55d..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/Engines/JSharpScriptEngine.cs
+++ /dev/null
@@ -1,104 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32// Compilation stuff
33using System.CodeDom;
34using System.CodeDom.Compiler;
35using Microsoft.VJSharp;
36
37namespace OpenSim.Scripting
38{
39 public class JSharpScriptEngine : IScriptCompiler
40 {
41 public string FileExt()
42 {
43 return ".jsl";
44 }
45
46 private Dictionary<string, IScript> LoadDotNetScript(ICodeCompiler compiler, string filename)
47 {
48 CompilerParameters compilerParams = new CompilerParameters();
49 CompilerResults compilerResults;
50 compilerParams.GenerateExecutable = false;
51 compilerParams.GenerateInMemory = true;
52 compilerParams.IncludeDebugInformation = false;
53 compilerParams.ReferencedAssemblies.Add("OpenSim.Region.dll");
54 compilerParams.ReferencedAssemblies.Add("OpenSim.Framework.dll");
55 compilerParams.ReferencedAssemblies.Add("libsecondlife.dll");
56 compilerParams.ReferencedAssemblies.Add("System.dll");
57
58 compilerResults = compiler.CompileAssemblyFromFile(compilerParams, filename);
59
60 if (compilerResults.Errors.Count > 0)
61 {
62 OpenSim.Framework.Console.MainLog.Instance.Error("Compile errors");
63 foreach (CompilerError error in compilerResults.Errors)
64 {
65 OpenSim.Framework.Console.MainLog.Instance.Error(error.Line.ToString() + ": " + error.ErrorText.ToString());
66 }
67 }
68 else
69 {
70 Dictionary<string, IScript> scripts = new Dictionary<string, IScript>();
71
72 foreach (Type pluginType in compilerResults.CompiledAssembly.GetExportedTypes())
73 {
74 Type testInterface = pluginType.GetInterface("IScript", true);
75
76 if (testInterface != null)
77 {
78 IScript script = (IScript)compilerResults.CompiledAssembly.CreateInstance(pluginType.ToString());
79
80 string scriptName = "J#/" + script.getName();
81 Console.WriteLine("Script: " + scriptName + " loaded.");
82
83 if (!scripts.ContainsKey(scriptName))
84 {
85 scripts.Add(scriptName, script);
86 }
87 else
88 {
89 scripts[scriptName] = script;
90 }
91 }
92 }
93 return scripts;
94 }
95 return null;
96 }
97
98 public Dictionary<string, IScript> compile(string filename)
99 {
100 VJSharpCodeProvider jsharpProvider = new VJSharpCodeProvider();
101 return LoadDotNetScript(jsharpProvider.CreateCompiler(), filename);
102 }
103 }
104}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/Script.cs b/OpenSim/OpenSim.Region/Scenes/scripting/Script.cs
deleted file mode 100644
index 56bd1db..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/Script.cs
+++ /dev/null
@@ -1,71 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32using OpenSim.Framework.Console;
33using OpenSim.Framework;
34using OpenSim.Region;
35using OpenSim.Region.Scenes;
36
37namespace OpenSim.Scripting
38{
39 public interface IScript
40 {
41 void Initialise(ScriptInfo scriptInfo);
42 string getName();
43 }
44
45 public class TestScript : IScript
46 {
47 ScriptInfo script;
48
49 public string getName()
50 {
51 return "TestScript 0.1";
52 }
53
54 public void Initialise(ScriptInfo scriptInfo)
55 {
56 script = scriptInfo;
57 script.events.OnFrame += new OpenSim.Region.Scenes.EventManager.OnFrameDelegate(events_OnFrame);
58 script.events.OnNewPresence += new EventManager.OnNewPresenceDelegate(events_OnNewPresence);
59 }
60
61 void events_OnNewPresence(ScenePresence presence)
62 {
63 script.logger.Verbose("Hello " + presence.firstname.ToString() + "!");
64 }
65
66 void events_OnFrame()
67 {
68 //script.logger.Verbose("Hello World!");
69 }
70 }
71}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs b/OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs
deleted file mode 100644
index cf627dd..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptInfo.cs
+++ /dev/null
@@ -1,58 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32using OpenSim.Region.Scenes;
33using OpenSim.Framework.Console;
34
35namespace OpenSim.Scripting
36{
37 /// <summary>
38 /// Class which provides access to the world
39 /// </summary>
40 public class ScriptInfo
41 {
42 // Reference to world.eventsManager provided for convenience
43 public EventManager events;
44
45 // The main world
46 public Scene world;
47
48 // The console
49 public LogBase logger;
50
51 public ScriptInfo(Scene scene)
52 {
53 world = scene;
54 events = world.eventManager;
55 logger = OpenSim.Framework.Console.MainLog.Instance;
56 }
57 }
58}
diff --git a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs b/OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs
deleted file mode 100644
index abffffa..0000000
--- a/OpenSim/OpenSim.Region/Scenes/scripting/ScriptManager.cs
+++ /dev/null
@@ -1,99 +0,0 @@
1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4*
5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission.
15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26*
27*/
28using System;
29using System.Collections.Generic;
30using System.Text;
31
32namespace OpenSim.Scripting
33{
34 public class ScriptManager
35 {
36 List<IScript> scripts = new List<IScript>();
37 OpenSim.Region.Scenes.Scene scene;
38 Dictionary<string, IScriptCompiler> compilers = new Dictionary<string, IScriptCompiler>();
39
40 private void LoadFromCompiler(Dictionary<string, IScript> compiledscripts)
41 {
42 foreach (KeyValuePair<string, IScript> script in compiledscripts)
43 {
44 ScriptInfo scriptInfo = new ScriptInfo(scene); // Since each script could potentially corrupt their access with a stray assignment, making a new one for each script.
45 OpenSim.Framework.Console.MainLog.Instance.Verbose("Loading " + script.Key);
46 script.Value.Initialise(scriptInfo);
47 scripts.Add(script.Value);
48 }
49 OpenSim.Framework.Console.MainLog.Instance.Verbose("Finished loading " + compiledscripts.Count.ToString() + " script(s)");
50 }
51
52 public ScriptManager(OpenSim.Region.Scenes.Scene world)
53 {
54 scene = world;
55
56 // Default Engines
57 CSharpScriptEngine csharpCompiler = new CSharpScriptEngine();
58 compilers.Add(csharpCompiler.FileExt(),csharpCompiler);
59
60 JScriptEngine jscriptCompiler = new JScriptEngine();
61 compilers.Add(jscriptCompiler.FileExt(), jscriptCompiler);
62
63 JSharpScriptEngine jsharpCompiler = new JSharpScriptEngine();
64 compilers.Add(jsharpCompiler.FileExt(), jsharpCompiler);
65 }
66
67 public void Compile(string filename)
68 {
69 foreach (KeyValuePair<string, IScriptCompiler> compiler in compilers)
70 {
71 if (filename.EndsWith(compiler.Key))
72 {
73 LoadFromCompiler(compiler.Value.compile(filename));
74 break;
75 }
76 }
77 }
78
79 public void RunScriptCmd(string[] args)
80 {
81 switch (args[0])
82 {
83 case "load":
84 Compile(args[1]);
85 break;
86
87 default:
88 OpenSim.Framework.Console.MainLog.Instance.Error("Unknown script command");
89 break;
90 }
91 }
92 }
93
94 interface IScriptCompiler
95 {
96 Dictionary<string,IScript> compile(string filename);
97 string FileExt();
98 }
99}