aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/OpenSim.Region/Scenes
diff options
context:
space:
mode:
authorMW2007-06-25 16:01:30 +0000
committerMW2007-06-25 16:01:30 +0000
commitf41379549773531b2886b64aaacf57c954a64610 (patch)
tree09d96fbb41898db1ed55a674c1757fbaee34c7af /OpenSim/OpenSim.Region/Scenes
parentDisabled the EventQueueGet CAPS as its not yet fully functional. (diff)
downloadopensim-SC_OLD-f41379549773531b2886b64aaacf57c954a64610.zip
opensim-SC_OLD-f41379549773531b2886b64aaacf57c954a64610.tar.gz
opensim-SC_OLD-f41379549773531b2886b64aaacf57c954a64610.tar.bz2
opensim-SC_OLD-f41379549773531b2886b64aaacf57c954a64610.tar.xz
updated prebuild.xml.
Added some more events to IClientAPI (OnGrapObject , OnGrapUpdate, OnDeGrapObject).
Diffstat (limited to 'OpenSim/OpenSim.Region/Scenes')
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Primitive.cs45
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs17
-rw-r--r--OpenSim/OpenSim.Region/Scenes/Scene.cs85
-rw-r--r--OpenSim/OpenSim.Region/Scenes/SceneBase.cs71
-rw-r--r--OpenSim/OpenSim.Region/Scenes/ScenePresence.cs44
5 files changed, 160 insertions, 102 deletions
diff --git a/OpenSim/OpenSim.Region/Scenes/Primitive.cs b/OpenSim/OpenSim.Region/Scenes/Primitive.cs
index 62f401c..b0bfd1e 100644
--- a/OpenSim/OpenSim.Region/Scenes/Primitive.cs
+++ b/OpenSim/OpenSim.Region/Scenes/Primitive.cs
@@ -47,6 +47,7 @@ namespace OpenSim.Region.Scenes
47 private const uint FULL_MASK_PERMISSIONS = 2147483647; 47 private const uint FULL_MASK_PERMISSIONS = 2147483647;
48 private bool physicsEnabled = false; 48 private bool physicsEnabled = false;
49 private byte updateFlag = 0; 49 private byte updateFlag = 0;
50 private uint flags = 32 + 65536 + 131072 + 256 + 4 + 8 + 2048 + 524288 + 268435456 + 128;
50 51
51 private Dictionary<LLUUID, InventoryItem> inventoryItems; 52 private Dictionary<LLUUID, InventoryItem> inventoryItems;
52 53
@@ -411,7 +412,7 @@ namespace OpenSim.Region.Scenes
411 lPos = this.Pos; 412 lPos = this.Pos;
412 } 413 }
413 414
414 remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.primData, lPos, new LLUUID("00000000-0000-0000-9999-000000000005")); 415 remoteClient.SendPrimitiveToClient(this.m_regionHandle, 64096, this.LocalId, this.primData, lPos, new LLUUID("00000000-0000-0000-9999-000000000005"), this.flags);
415 } 416 }
416 417
417 /// <summary> 418 /// <summary>
@@ -434,7 +435,7 @@ namespace OpenSim.Region.Scenes
434 { 435 {
435 LLVector3 lPos; 436 LLVector3 lPos;
436 Axiom.MathLib.Quaternion lRot; 437 Axiom.MathLib.Quaternion lRot;
437 if (this._physActor != null && this.physicsEnabled) 438 if (this._physActor != null && this.physicsEnabled) //is this needed ? doesn't the property fields do this for us?
438 { 439 {
439 PhysicsVector pPos = this._physActor.Position; 440 PhysicsVector pPos = this._physActor.Position;
440 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z); 441 lPos = new LLVector3(pPos.X, pPos.Y, pPos.Z);
@@ -445,6 +446,8 @@ namespace OpenSim.Region.Scenes
445 lPos = this.Pos; 446 lPos = this.Pos;
446 lRot = this.rotation; 447 lRot = this.rotation;
447 } 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);
448 } 451 }
449 452
450 /// <summary> 453 /// <summary>
@@ -534,6 +537,44 @@ namespace OpenSim.Region.Scenes
534 { 537 {
535 538
536 } 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 }
537 578
538 #endregion 579 #endregion
539 580
diff --git a/OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs b/OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs
index 01e38d5..d1a2717 100644
--- a/OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs
+++ b/OpenSim/OpenSim.Region/Scenes/Scene.PacketHandlers.cs
@@ -214,7 +214,22 @@ namespace OpenSim.Region.Scenes
214 /// <param name="remoteClient"></param> 214 /// <param name="remoteClient"></param>
215 public void SelectPrim(uint primLocalID, IClientAPI remoteClient) 215 public void SelectPrim(uint primLocalID, IClientAPI remoteClient)
216 { 216 {
217 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 }
218 } 233 }
219 234
220 /// <summary> 235 /// <summary>
diff --git a/OpenSim/OpenSim.Region/Scenes/Scene.cs b/OpenSim/OpenSim.Region/Scenes/Scene.cs
index 62edc4b..426dd50 100644
--- a/OpenSim/OpenSim.Region/Scenes/Scene.cs
+++ b/OpenSim/OpenSim.Region/Scenes/Scene.cs
@@ -57,19 +57,18 @@ namespace OpenSim.Region.Scenes
57 protected Dictionary<libsecondlife.LLUUID, Primitive> Prims; 57 protected Dictionary<libsecondlife.LLUUID, Primitive> Prims;
58 private PhysicsScene phyScene; 58 private PhysicsScene phyScene;
59 private float timeStep = 0.1f; 59 private float timeStep = 0.1f;
60 public ILocalStorage localStorage;
61 private Random Rand = new Random(); 60 private Random Rand = new Random();
62 private uint _primCount = 702000; 61 private uint _primCount = 702000;
63 private int storageCount; 62 private int storageCount;
64 private Dictionary<LLUUID, ScriptHandler> m_scriptHandlers; 63 private Dictionary<LLUUID, ScriptHandler> m_scriptHandlers;
65 private Dictionary<string, ScriptFactory> m_scripts; 64 private Dictionary<string, ScriptFactory> m_scripts;
66 private Mutex updateLock; 65 private Mutex updateLock;
67 public string m_datastore; 66
68 protected AuthenticateSessionsBase authenticateHandler; 67 protected AuthenticateSessionsBase authenticateHandler;
69 protected RegionCommsListener regionCommsHost; 68 protected RegionCommsListener regionCommsHost;
70 protected CommunicationsManager commsManager; 69 protected CommunicationsManager commsManager;
71 70
72 protected List<Caps> capsHandlers = new List<Caps>(); 71 protected Dictionary<LLUUID, Caps> capsHandlers = new Dictionary<LLUUID, Caps>();
73 protected BaseHttpServer httpListener; 72 protected BaseHttpServer httpListener;
74 73
75 public ParcelManager parcelManager; 74 public ParcelManager parcelManager;
@@ -127,7 +126,6 @@ namespace OpenSim.Region.Scenes
127 Prims = new Dictionary<LLUUID, Primitive>(); 126 Prims = new Dictionary<LLUUID, Primitive>();
128 127
129 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs - creating LandMap"); 128 OpenSim.Framework.Console.MainLog.Instance.Verbose( "World.cs - creating LandMap");
130 TerrainManager = new TerrainManager(new SecondLife());
131 Terrain = new TerrainEngine(); 129 Terrain = new TerrainEngine();
132 130
133 ScenePresence.LoadAnims(); 131 ScenePresence.LoadAnims();
@@ -271,53 +269,6 @@ namespace OpenSim.Region.Scenes
271 } 269 }
272 #endregion 270 #endregion
273 271
274 #region Setup Methods
275 /// <summary>
276 /// Loads a new storage subsystem from a named library
277 /// </summary>
278 /// <param name="dllName">Storage Library</param>
279 /// <returns>Successful or not</returns>
280 public bool LoadStorageDLL(string dllName)
281 {
282 try
283 {
284 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
285 ILocalStorage store = null;
286
287 foreach (Type pluginType in pluginAssembly.GetTypes())
288 {
289 if (pluginType.IsPublic)
290 {
291 if (!pluginType.IsAbstract)
292 {
293 Type typeInterface = pluginType.GetInterface("ILocalStorage", true);
294
295 if (typeInterface != null)
296 {
297 ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
298 store = plug;
299
300 store.Initialise(this.m_datastore);
301 break;
302 }
303
304 typeInterface = null;
305 }
306 }
307 }
308 pluginAssembly = null;
309 this.localStorage = store;
310 return (store == null);
311 }
312 catch (Exception e)
313 {
314 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadStorageDLL() - Failed with exception " + e.ToString());
315 return false;
316 }
317 }
318
319 #endregion
320
321 #region Regenerate Terrain 272 #region Regenerate Terrain
322 273
323 /// <summary> 274 /// <summary>
@@ -558,6 +509,8 @@ namespace OpenSim.Region.Scenes
558 remoteClient.OnUpdatePrimPosition += this.UpdatePrimPosition; 509 remoteClient.OnUpdatePrimPosition += this.UpdatePrimPosition;
559 remoteClient.OnRequestMapBlocks += this.RequestMapBlocks; 510 remoteClient.OnRequestMapBlocks += this.RequestMapBlocks;
560 remoteClient.OnTeleportLocationRequest += this.RequestTeleportLocation; 511 remoteClient.OnTeleportLocationRequest += this.RequestTeleportLocation;
512 //remoteClient.OnObjectSelect += this.SelectPrim;
513 remoteClient.OnGrapUpdate += this.MoveObject;
561 514
562 /* remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest); 515 /* remoteClient.OnParcelPropertiesRequest += new ParcelPropertiesRequest(parcelManager.handleParcelPropertiesRequest);
563 remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest); 516 remoteClient.OnParcelDivideRequest += new ParcelDivideRequest(parcelManager.handleParcelDivideRequest);
@@ -680,22 +633,6 @@ namespace OpenSim.Region.Scenes
680 } 633 }
681 #endregion 634 #endregion
682 635
683 #region ShutDown
684 /// <summary>
685 /// Tidy before shutdown
686 /// </summary>
687 public override void Close()
688 {
689 try
690 {
691 this.localStorage.ShutDown();
692 }
693 catch (Exception e)
694 {
695 OpenSim.Framework.Console.MainLog.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, "World.cs: Close() - Failed with exception " + e.ToString());
696 }
697 }
698 #endregion
699 636
700 #region RegionCommsHost 637 #region RegionCommsHost
701 638
@@ -729,7 +666,7 @@ namespace OpenSim.Region.Scenes
729 //Console.WriteLine("new user, so creating caps handler for it"); 666 //Console.WriteLine("new user, so creating caps handler for it");
730 Caps cap = new Caps(this.assetCache, httpListener, this.m_regInfo.CommsIPListenAddr, 9000, agent.CapsPath, agent.AgentID); 667 Caps cap = new Caps(this.assetCache, httpListener, this.m_regInfo.CommsIPListenAddr, 9000, agent.CapsPath, agent.AgentID);
731 cap.RegisterHandlers(); 668 cap.RegisterHandlers();
732 this.capsHandlers.Add(cap); 669 this.capsHandlers.Add(agent.AgentID, cap);
733 } 670 }
734 this.authenticateHandler.AddNewCircuit(agent.circuitcode, agent); 671 this.authenticateHandler.AddNewCircuit(agent.circuitcode, agent);
735 } 672 }
@@ -767,6 +704,7 @@ namespace OpenSim.Region.Scenes
767 agent.child = true; 704 agent.child = true;
768 this.commsManager.InterRegion.InformRegionOfChildAgent(neighbours[i].RegionHandle, agent); 705 this.commsManager.InterRegion.InformRegionOfChildAgent(neighbours[i].RegionHandle, agent);
769 remoteClient.InformClientOfNeighbour(neighbours[i].RegionHandle, System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr), (ushort)neighbours[i].CommsIPListenPort); 706 remoteClient.InformClientOfNeighbour(neighbours[i].RegionHandle, System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr), (ushort)neighbours[i].CommsIPListenPort);
707 //this.capsHandlers[remoteClient.AgentId].CreateEstablishAgentComms("", System.Net.IPAddress.Parse(neighbours[i].CommsIPListenAddr) + ":" + neighbours[i].CommsIPListenPort);
770 } 708 }
771 } 709 }
772 } 710 }
@@ -845,16 +783,5 @@ namespace OpenSim.Region.Scenes
845 } 783 }
846 784
847 #endregion 785 #endregion
848
849 /// <summary>
850 ///
851 /// </summary>
852 /// <param name="px"></param>
853 /// <param name="py"></param>
854 /// <param name="RemoteClient"></param>
855 public override void SendLayerData(int px, int py, IClientAPI RemoteClient)
856 {
857 RemoteClient.SendLayerData(px, py, Terrain.getHeights1D());
858 }
859 } 786 }
860} 787}
diff --git a/OpenSim/OpenSim.Region/Scenes/SceneBase.cs b/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
index e650127..4dbd374 100644
--- a/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
+++ b/OpenSim/OpenSim.Region/Scenes/SceneBase.cs
@@ -51,8 +51,11 @@ namespace OpenSim.Region.Scenes
51 protected string m_regionName; 51 protected string m_regionName;
52 protected RegionInfo m_regInfo; 52 protected RegionInfo m_regInfo;
53 53
54 public TerrainEngine Terrain; //TODO: Replace TerrainManager with this. 54 public TerrainEngine Terrain;
55 protected libsecondlife.TerrainManager TerrainManager; // To be referenced via TerrainEngine 55
56 public string m_datastore;
57 public ILocalStorage localStorage;
58
56 protected object m_syncRoot = new object(); 59 protected object m_syncRoot = new object();
57 private uint m_nextLocalId = 8880000; 60 private uint m_nextLocalId = 8880000;
58 protected AssetCache assetCache; 61 protected AssetCache assetCache;
@@ -71,6 +74,51 @@ namespace OpenSim.Region.Scenes
71 /// Loads the World heightmap 74 /// Loads the World heightmap
72 /// </summary> 75 /// </summary>
73 public abstract void LoadWorldMap(); 76 public abstract void LoadWorldMap();
77
78 /// <summary>
79 /// Loads a new storage subsystem from a named library
80 /// </summary>
81 /// <param name="dllName">Storage Library</param>
82 /// <returns>Successful or not</returns>
83 public bool LoadStorageDLL(string dllName)
84 {
85 try
86 {
87 Assembly pluginAssembly = Assembly.LoadFrom(dllName);
88 ILocalStorage store = null;
89
90 foreach (Type pluginType in pluginAssembly.GetTypes())
91 {
92 if (pluginType.IsPublic)
93 {
94 if (!pluginType.IsAbstract)
95 {
96 Type typeInterface = pluginType.GetInterface("ILocalStorage", true);
97
98 if (typeInterface != null)
99 {
100 ILocalStorage plug = (ILocalStorage)Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
101 store = plug;
102
103 store.Initialise(this.m_datastore);
104 break;
105 }
106
107 typeInterface = null;
108 }
109 }
110 }
111 pluginAssembly = null;
112 this.localStorage = store;
113 return (store == null);
114 }
115 catch (Exception e)
116 {
117 OpenSim.Framework.Console.MainLog.Instance.Warn("World.cs: LoadStorageDLL() - Failed with exception " + e.ToString());
118 return false;
119 }
120 }
121
74 122
75 /// <summary> 123 /// <summary>
76 /// Send the region heightmap to the client 124 /// Send the region heightmap to the client
@@ -87,7 +135,10 @@ namespace OpenSim.Region.Scenes
87 /// <param name="px">Patch coordinate (x) 0..16</param> 135 /// <param name="px">Patch coordinate (x) 0..16</param>
88 /// <param name="py">Patch coordinate (y) 0..16</param> 136 /// <param name="py">Patch coordinate (y) 0..16</param>
89 /// <param name="RemoteClient">The client to send to</param> 137 /// <param name="RemoteClient">The client to send to</param>
90 public abstract void SendLayerData(int px, int py, IClientAPI RemoteClient); 138 public virtual void SendLayerData(int px, int py, IClientAPI RemoteClient)
139 {
140 RemoteClient.SendLayerData(px, py, Terrain.getHeights1D());
141 }
91 142
92 #endregion 143 #endregion
93 144
@@ -114,7 +165,7 @@ namespace OpenSim.Region.Scenes
114 /// <returns></returns> 165 /// <returns></returns>
115 public virtual RegionInfo RegionInfo 166 public virtual RegionInfo RegionInfo
116 { 167 {
117 get { return null; } 168 get { return this.m_regInfo; }
118 } 169 }
119 170
120 public object SyncRoot 171 public object SyncRoot
@@ -131,7 +182,17 @@ namespace OpenSim.Region.Scenes
131 /// <summary> 182 /// <summary>
132 /// Tidy before shutdown 183 /// Tidy before shutdown
133 /// </summary> 184 /// </summary>
134 public abstract void Close(); 185 public virtual void Close()
186 {
187 try
188 {
189 this.localStorage.ShutDown();
190 }
191 catch (Exception e)
192 {
193 OpenSim.Framework.Console.MainLog.Instance.WriteLine(OpenSim.Framework.Console.LogPriority.HIGH, "World.cs: Close() - Failed with exception " + e.ToString());
194 }
195 }
135 196
136 #endregion 197 #endregion
137 198
diff --git a/OpenSim/OpenSim.Region/Scenes/ScenePresence.cs b/OpenSim/OpenSim.Region/Scenes/ScenePresence.cs
index e2e30b9..ffec3e5 100644
--- a/OpenSim/OpenSim.Region/Scenes/ScenePresence.cs
+++ b/OpenSim/OpenSim.Region/Scenes/ScenePresence.cs
@@ -223,26 +223,23 @@ namespace OpenSim.Region.Scenes
223 Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z); 223 Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z);
224 if (((movementflag & 1) == 0) || (q != this.bodyRot)) 224 if (((movementflag & 1) == 0) || (q != this.bodyRot))
225 { 225 {
226 //we should add a new force to the list
227 // but for now we will deal with velocities
228 NewForce newVelocity = new NewForce();
229 Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0); 226 Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0);
230 Axiom.MathLib.Vector3 direc = q * v3; 227 this.AddNewMovement(v3, q);
231 direc.Normalize();
232
233 //work out velocity for sim physics system
234 direc = direc * ((0.03f) * 128f);
235 if (this._physActor.Flying)
236 direc *= 4;
237
238 newVelocity.X = direc.x;
239 newVelocity.Y = direc.y;
240 newVelocity.Z = direc.z;
241 this.forcesList.Add(newVelocity);
242 movementflag = 1; 228 movementflag = 1;
243 this.bodyRot = q; 229 this.bodyRot = q;
244 } 230 }
245 } 231 }
232 else if ((flags & (uint)MainAvatar.ControlFlags.AGENT_CONTROL_AT_NEG) != 0)
233 {
234 Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(bodyRotation.W, bodyRotation.X, bodyRotation.Y, bodyRotation.Z);
235 if (((movementflag & 2) == 0) || (q != this.bodyRot))
236 {
237 Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(-1, 0, 0);
238 this.AddNewMovement(v3, q);
239 movementflag = 2;
240 this.bodyRot = q;
241 }
242 }
246 else 243 else
247 { 244 {
248 if ((movementflag) != 0) 245 if ((movementflag) != 0)
@@ -257,6 +254,23 @@ namespace OpenSim.Region.Scenes
257 } 254 }
258 255
259 } 256 }
257
258 protected void AddNewMovement(Axiom.MathLib.Vector3 vec, Axiom.MathLib.Quaternion rotation)
259 {
260 NewForce newVelocity = new NewForce();
261 Axiom.MathLib.Vector3 direc = rotation * vec;
262 direc.Normalize();
263
264 direc = direc * ((0.03f) * 128f);
265 if (this._physActor.Flying)
266 direc *= 4;
267
268 newVelocity.X = direc.x;
269 newVelocity.Y = direc.y;
270 newVelocity.Z = direc.z;
271 this.forcesList.Add(newVelocity);
272 }
273
260 #endregion 274 #endregion
261 275
262 #region Overridden Methods 276 #region Overridden Methods