aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Region/Physics/OdePlugin
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Region/Physics/OdePlugin')
-rw-r--r--OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs112
-rw-r--r--OpenSim/Region/Physics/OdePlugin/OdePlugin.cs914
2 files changed, 513 insertions, 513 deletions
diff --git a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
index ee10430..662b75a 100644
--- a/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
+++ b/OpenSim/Region/Physics/OdePlugin/AssemblyInfo.cs
@@ -1,56 +1,56 @@
1/* 1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/ 2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 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 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 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 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. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28using System.Reflection; 28using System.Reflection;
29using System.Runtime.InteropServices; 29using System.Runtime.InteropServices;
30// Information about this assembly is defined by the following 30// Information about this assembly is defined by the following
31// attributes. 31// attributes.
32// 32//
33// change them to the information which is associated with the assembly 33// change them to the information which is associated with the assembly
34// you compile. 34// you compile.
35 35
36[assembly: AssemblyTitle("RealPhysXplugin")] 36[assembly: AssemblyTitle("RealPhysXplugin")]
37[assembly: AssemblyDescription("")] 37[assembly: AssemblyDescription("")]
38[assembly: AssemblyConfiguration("")] 38[assembly: AssemblyConfiguration("")]
39[assembly: AssemblyCompany("")] 39[assembly: AssemblyCompany("")]
40[assembly: AssemblyProduct("RealPhysXplugin")] 40[assembly: AssemblyProduct("RealPhysXplugin")]
41[assembly: AssemblyCopyright("")] 41[assembly: AssemblyCopyright("")]
42[assembly: AssemblyTrademark("")] 42[assembly: AssemblyTrademark("")]
43[assembly: AssemblyCulture("")] 43[assembly: AssemblyCulture("")]
44 44
45// This sets the default COM visibility of types in the assembly to invisible. 45// This sets the default COM visibility of types in the assembly to invisible.
46// If you need to expose a type to COM, use [ComVisible(true)] on that type. 46// If you need to expose a type to COM, use [ComVisible(true)] on that type.
47[assembly: ComVisible(false)] 47[assembly: ComVisible(false)]
48 48
49// The assembly version has following format : 49// The assembly version has following format :
50// 50//
51// Major.Minor.Build.Revision 51// Major.Minor.Build.Revision
52// 52//
53// You can specify all values by your own or you can build default build and revision 53// You can specify all values by your own or you can build default build and revision
54// numbers with the '*' character (the default): 54// numbers with the '*' character (the default):
55 55
56[assembly: AssemblyVersion("1.0.*")] 56[assembly: AssemblyVersion("1.0.*")]
diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
index 2780188..486fa9e 100644
--- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
+++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
@@ -1,457 +1,457 @@
1/* 1/*
2* Copyright (c) Contributors, http://www.openmetaverse.org/ 2* Copyright (c) Contributors, http://www.openmetaverse.org/
3* See CONTRIBUTORS.TXT for a full list of copyright holders. 3* See CONTRIBUTORS.TXT for a full list of copyright holders.
4* 4*
5* Redistribution and use in source and binary forms, with or without 5* Redistribution and use in source and binary forms, with or without
6* modification, are permitted provided that the following conditions are met: 6* modification, are permitted provided that the following conditions are met:
7* * Redistributions of source code must retain the above copyright 7* * Redistributions of source code must retain the above copyright
8* notice, this list of conditions and the following disclaimer. 8* notice, this list of conditions and the following disclaimer.
9* * Redistributions in binary form must reproduce the above copyright 9* * Redistributions in binary form must reproduce the above copyright
10* notice, this list of conditions and the following disclaimer in the 10* notice, this list of conditions and the following disclaimer in the
11* documentation and/or other materials provided with the distribution. 11* documentation and/or other materials provided with the distribution.
12* * Neither the name of the OpenSim Project nor the 12* * Neither the name of the OpenSim Project nor the
13* names of its contributors may be used to endorse or promote products 13* names of its contributors may be used to endorse or promote products
14* derived from this software without specific prior written permission. 14* derived from this software without specific prior written permission.
15* 15*
16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY 16* THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS AND ANY
17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY 19* DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 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 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 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 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. 25* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26* 26*
27*/ 27*/
28using System; 28using System;
29using System.Collections.Generic; 29using System.Collections.Generic;
30using Axiom.Math; 30using Axiom.Math;
31using Ode.NET; 31using Ode.NET;
32using OpenSim.Physics.Manager; 32using OpenSim.Physics.Manager;
33 33
34namespace OpenSim.Region.Physics.OdePlugin 34namespace OpenSim.Region.Physics.OdePlugin
35{ 35{
36 /// <summary> 36 /// <summary>
37 /// ODE plugin 37 /// ODE plugin
38 /// </summary> 38 /// </summary>
39 public class OdePlugin : IPhysicsPlugin 39 public class OdePlugin : IPhysicsPlugin
40 { 40 {
41 private OdeScene _mScene; 41 private OdeScene _mScene;
42 42
43 public OdePlugin() 43 public OdePlugin()
44 { 44 {
45 45
46 } 46 }
47 47
48 public bool Init() 48 public bool Init()
49 { 49 {
50 return true; 50 return true;
51 } 51 }
52 52
53 public PhysicsScene GetScene() 53 public PhysicsScene GetScene()
54 { 54 {
55 if (_mScene == null) 55 if (_mScene == null)
56 { 56 {
57 _mScene = new OdeScene(); 57 _mScene = new OdeScene();
58 } 58 }
59 return (_mScene); 59 return (_mScene);
60 } 60 }
61 61
62 public string GetName() 62 public string GetName()
63 { 63 {
64 return ("OpenDynamicsEngine"); 64 return ("OpenDynamicsEngine");
65 } 65 }
66 66
67 public void Dispose() 67 public void Dispose()
68 { 68 {
69 69
70 } 70 }
71 } 71 }
72 72
73 public class OdeScene : PhysicsScene 73 public class OdeScene : PhysicsScene
74 { 74 {
75 static public IntPtr world; 75 static public IntPtr world;
76 static public IntPtr space; 76 static public IntPtr space;
77 static private IntPtr contactgroup; 77 static private IntPtr contactgroup;
78 static private IntPtr LandGeom; 78 static private IntPtr LandGeom;
79 //static private IntPtr Land; 79 //static private IntPtr Land;
80 private double[] _heightmap; 80 private double[] _heightmap;
81 static private d.NearCallback nearCallback = near; 81 static private d.NearCallback nearCallback = near;
82 private List<OdeCharacter> _characters = new List<OdeCharacter>(); 82 private List<OdeCharacter> _characters = new List<OdeCharacter>();
83 private static d.ContactGeom[] contacts = new d.ContactGeom[30]; 83 private static d.ContactGeom[] contacts = new d.ContactGeom[30];
84 private static d.Contact contact; 84 private static d.Contact contact;
85 85
86 public OdeScene() 86 public OdeScene()
87 { 87 {
88 contact.surface.mode = d.ContactFlags.Bounce | d.ContactFlags.SoftCFM; 88 contact.surface.mode = d.ContactFlags.Bounce | d.ContactFlags.SoftCFM;
89 contact.surface.mu = d.Infinity; 89 contact.surface.mu = d.Infinity;
90 contact.surface.mu2 = 0.0f; 90 contact.surface.mu2 = 0.0f;
91 contact.surface.bounce = 0.1f; 91 contact.surface.bounce = 0.1f;
92 contact.surface.bounce_vel = 0.1f; 92 contact.surface.bounce_vel = 0.1f;
93 contact.surface.soft_cfm = 0.01f; 93 contact.surface.soft_cfm = 0.01f;
94 94
95 world = d.WorldCreate(); 95 world = d.WorldCreate();
96 space = d.HashSpaceCreate(IntPtr.Zero); 96 space = d.HashSpaceCreate(IntPtr.Zero);
97 contactgroup = d.JointGroupCreate(0); 97 contactgroup = d.JointGroupCreate(0);
98 d.WorldSetGravity(world, 0.0f, 0.0f, -0.5f); 98 d.WorldSetGravity(world, 0.0f, 0.0f, -0.5f);
99 //d.WorldSetCFM(world, 1e-5f); 99 //d.WorldSetCFM(world, 1e-5f);
100 d.WorldSetAutoDisableFlag(world, false); 100 d.WorldSetAutoDisableFlag(world, false);
101 d.WorldSetContactSurfaceLayer(world, 0.001f); 101 d.WorldSetContactSurfaceLayer(world, 0.001f);
102 // d.CreatePlane(space, 0, 0, 1, 0); 102 // d.CreatePlane(space, 0, 0, 1, 0);
103 this._heightmap = new double[65536]; 103 this._heightmap = new double[65536];
104 } 104 }
105 105
106 // This function blatantly ripped off from BoxStack.cs 106 // This function blatantly ripped off from BoxStack.cs
107 static private void near(IntPtr space, IntPtr g1, IntPtr g2) 107 static private void near(IntPtr space, IntPtr g1, IntPtr g2)
108 { 108 {
109 IntPtr b1 = d.GeomGetBody(g1); 109 IntPtr b1 = d.GeomGetBody(g1);
110 IntPtr b2 = d.GeomGetBody(g2); 110 IntPtr b2 = d.GeomGetBody(g2);
111 if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact)) 111 if (b1 != IntPtr.Zero && b2 != IntPtr.Zero && d.AreConnectedExcluding(b1, b2, d.JointType.Contact))
112 return; 112 return;
113 113
114 int count = d.Collide(g1, g2, 500, contacts, d.ContactGeom.SizeOf); 114 int count = d.Collide(g1, g2, 500, contacts, d.ContactGeom.SizeOf);
115 for (int i = 0; i < count; ++i) 115 for (int i = 0; i < count; ++i)
116 { 116 {
117 contact.geom = contacts[i]; 117 contact.geom = contacts[i];
118 IntPtr joint = d.JointCreateContact(world, contactgroup, ref contact); 118 IntPtr joint = d.JointCreateContact(world, contactgroup, ref contact);
119 d.JointAttach(joint, b1, b2); 119 d.JointAttach(joint, b1, b2);
120 } 120 }
121 121
122 } 122 }
123 123
124 public override PhysicsActor AddAvatar(PhysicsVector position) 124 public override PhysicsActor AddAvatar(PhysicsVector position)
125 { 125 {
126 PhysicsVector pos = new PhysicsVector(); 126 PhysicsVector pos = new PhysicsVector();
127 pos.X = position.X; 127 pos.X = position.X;
128 pos.Y = position.Y; 128 pos.Y = position.Y;
129 pos.Z = position.Z + 20; 129 pos.Z = position.Z + 20;
130 OdeCharacter newAv = new OdeCharacter(this, pos); 130 OdeCharacter newAv = new OdeCharacter(this, pos);
131 this._characters.Add(newAv); 131 this._characters.Add(newAv);
132 return newAv; 132 return newAv;
133 } 133 }
134 134
135 public override void RemoveAvatar(PhysicsActor actor) 135 public override void RemoveAvatar(PhysicsActor actor)
136 { 136 {
137 137
138 } 138 }
139 139
140 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) 140 public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size)
141 { 141 {
142 PhysicsVector pos = new PhysicsVector(); 142 PhysicsVector pos = new PhysicsVector();
143 pos.X = position.X; 143 pos.X = position.X;
144 pos.Y = position.Y; 144 pos.Y = position.Y;
145 pos.Z = position.Z; 145 pos.Z = position.Z;
146 PhysicsVector siz = new PhysicsVector(); 146 PhysicsVector siz = new PhysicsVector();
147 siz.X = size.X; 147 siz.X = size.X;
148 siz.Y = size.Y; 148 siz.Y = size.Y;
149 siz.Z = size.Z; 149 siz.Z = size.Z;
150 return new OdePrim(); 150 return new OdePrim();
151 } 151 }
152 152
153 public override void Simulate(float timeStep) 153 public override void Simulate(float timeStep)
154 { 154 {
155 foreach (OdeCharacter actor in _characters) 155 foreach (OdeCharacter actor in _characters)
156 { 156 {
157 actor.Move(timeStep * 5f); 157 actor.Move(timeStep * 5f);
158 } 158 }
159 d.SpaceCollide(space, IntPtr.Zero, nearCallback); 159 d.SpaceCollide(space, IntPtr.Zero, nearCallback);
160 d.WorldQuickStep(world, timeStep * 5f); 160 d.WorldQuickStep(world, timeStep * 5f);
161 d.JointGroupEmpty(contactgroup); 161 d.JointGroupEmpty(contactgroup);
162 foreach (OdeCharacter actor in _characters) 162 foreach (OdeCharacter actor in _characters)
163 { 163 {
164 actor.UpdatePosition(); 164 actor.UpdatePosition();
165 } 165 }
166 166
167 } 167 }
168 168
169 public override void GetResults() 169 public override void GetResults()
170 { 170 {
171 171
172 } 172 }
173 173
174 public override bool IsThreaded 174 public override bool IsThreaded
175 { 175 {
176 get 176 get
177 { 177 {
178 return (false); // for now we won't be multithreaded 178 return (false); // for now we won't be multithreaded
179 } 179 }
180 } 180 }
181 181
182 public override void SetTerrain(float[] heightMap) 182 public override void SetTerrain(float[] heightMap)
183 { 183 {
184 for (int i = 0; i < 65536; i++) 184 for (int i = 0; i < 65536; i++)
185 { 185 {
186 // this._heightmap[i] = (double)heightMap[i]; 186 // this._heightmap[i] = (double)heightMap[i];
187 // dbm (danx0r) -- heightmap x,y must be swapped for Ode (should fix ODE, but for now...) 187 // dbm (danx0r) -- heightmap x,y must be swapped for Ode (should fix ODE, but for now...)
188 int x = i & 0xff; 188 int x = i & 0xff;
189 int y = i >> 8; 189 int y = i >> 8;
190 this._heightmap[i] = (double)heightMap[x * 256 + y]; 190 this._heightmap[i] = (double)heightMap[x * 256 + y];
191 } 191 }
192 IntPtr HeightmapData = d.GeomHeightfieldDataCreate(); 192 IntPtr HeightmapData = d.GeomHeightfieldDataCreate();
193 d.GeomHeightfieldDataBuildDouble(HeightmapData, _heightmap, 0, 256, 256, 256, 256, 1.0f, 0.0f, 2.0f, 0); 193 d.GeomHeightfieldDataBuildDouble(HeightmapData, _heightmap, 0, 256, 256, 256, 256, 1.0f, 0.0f, 2.0f, 0);
194 d.GeomHeightfieldDataSetBounds(HeightmapData, 256, 256); 194 d.GeomHeightfieldDataSetBounds(HeightmapData, 256, 256);
195 LandGeom = d.CreateHeightfield(space, HeightmapData, 1); 195 LandGeom = d.CreateHeightfield(space, HeightmapData, 1);
196 d.Matrix3 R = new d.Matrix3(); 196 d.Matrix3 R = new d.Matrix3();
197 197
198 Quaternion q1 =Quaternion.FromAngleAxis(1.5707f, new Vector3(1,0,0)); 198 Quaternion q1 =Quaternion.FromAngleAxis(1.5707f, new Vector3(1,0,0));
199 Quaternion q2 =Quaternion.FromAngleAxis(1.5707f, new Vector3(0,1,0)); 199 Quaternion q2 =Quaternion.FromAngleAxis(1.5707f, new Vector3(0,1,0));
200 //Axiom.Math.Quaternion q3 = Axiom.Math.Quaternion.FromAngleAxis(3.14f, new Axiom.Math.Vector3(0, 0, 1)); 200 //Axiom.Math.Quaternion q3 = Axiom.Math.Quaternion.FromAngleAxis(3.14f, new Axiom.Math.Vector3(0, 0, 1));
201 201
202 q1 = q1 * q2; 202 q1 = q1 * q2;
203 //q1 = q1 * q3; 203 //q1 = q1 * q3;
204 Vector3 v3 = new Vector3(); 204 Vector3 v3 = new Vector3();
205 float angle = 0; 205 float angle = 0;
206 q1.ToAngleAxis(ref angle, ref v3); 206 q1.ToAngleAxis(ref angle, ref v3);
207 207
208 d.RFromAxisAndAngle(out R, v3.x, v3.y, v3.z, angle); 208 d.RFromAxisAndAngle(out R, v3.x, v3.y, v3.z, angle);
209 d.GeomSetRotation(LandGeom, ref R); 209 d.GeomSetRotation(LandGeom, ref R);
210 d.GeomSetPosition(LandGeom, 128, 128, 0); 210 d.GeomSetPosition(LandGeom, 128, 128, 0);
211 } 211 }
212 212
213 public override void DeleteTerrain() 213 public override void DeleteTerrain()
214 { 214 {
215 215
216 } 216 }
217 } 217 }
218 218
219 public class OdeCharacter : PhysicsActor 219 public class OdeCharacter : PhysicsActor
220 { 220 {
221 private PhysicsVector _position; 221 private PhysicsVector _position;
222 private PhysicsVector _velocity; 222 private PhysicsVector _velocity;
223 private PhysicsVector _acceleration; 223 private PhysicsVector _acceleration;
224 private bool flying; 224 private bool flying;
225 //private float gravityAccel; 225 //private float gravityAccel;
226 private IntPtr BoundingCapsule; 226 private IntPtr BoundingCapsule;
227 IntPtr capsule_geom; 227 IntPtr capsule_geom;
228 d.Mass capsule_mass; 228 d.Mass capsule_mass;
229 229
230 public OdeCharacter(OdeScene parent_scene, PhysicsVector pos) 230 public OdeCharacter(OdeScene parent_scene, PhysicsVector pos)
231 { 231 {
232 _velocity = new PhysicsVector(); 232 _velocity = new PhysicsVector();
233 _position = pos; 233 _position = pos;
234 _acceleration = new PhysicsVector(); 234 _acceleration = new PhysicsVector();
235 d.MassSetCapsule(out capsule_mass, 5.0f, 3, 0.5f, 2f); 235 d.MassSetCapsule(out capsule_mass, 5.0f, 3, 0.5f, 2f);
236 capsule_geom = d.CreateCapsule(OdeScene.space, 0.5f, 2f); 236 capsule_geom = d.CreateCapsule(OdeScene.space, 0.5f, 2f);
237 this.BoundingCapsule = d.BodyCreate(OdeScene.world); 237 this.BoundingCapsule = d.BodyCreate(OdeScene.world);
238 d.BodySetMass(BoundingCapsule, ref capsule_mass); 238 d.BodySetMass(BoundingCapsule, ref capsule_mass);
239 d.BodySetPosition(BoundingCapsule, pos.X, pos.Y, pos.Z); 239 d.BodySetPosition(BoundingCapsule, pos.X, pos.Y, pos.Z);
240 d.GeomSetBody(capsule_geom, BoundingCapsule); 240 d.GeomSetBody(capsule_geom, BoundingCapsule);
241 } 241 }
242 242
243 public override bool Flying 243 public override bool Flying
244 { 244 {
245 get 245 get
246 { 246 {
247 return flying; 247 return flying;
248 } 248 }
249 set 249 set
250 { 250 {
251 flying = value; 251 flying = value;
252 } 252 }
253 } 253 }
254 254
255 public override PhysicsVector Position 255 public override PhysicsVector Position
256 { 256 {
257 get 257 get
258 { 258 {
259 return _position; 259 return _position;
260 } 260 }
261 set 261 set
262 { 262 {
263 _position = value; 263 _position = value;
264 } 264 }
265 } 265 }
266 266
267 public override PhysicsVector Velocity 267 public override PhysicsVector Velocity
268 { 268 {
269 get 269 get
270 { 270 {
271 return _velocity; 271 return _velocity;
272 } 272 }
273 set 273 set
274 { 274 {
275 _velocity = value; 275 _velocity = value;
276 } 276 }
277 } 277 }
278 278
279 public override bool Kinematic 279 public override bool Kinematic
280 { 280 {
281 get 281 get
282 { 282 {
283 return false; 283 return false;
284 } 284 }
285 set 285 set
286 { 286 {
287 287
288 } 288 }
289 } 289 }
290 290
291 public override Quaternion Orientation 291 public override Quaternion Orientation
292 { 292 {
293 get 293 get
294 { 294 {
295 return Quaternion.Identity; 295 return Quaternion.Identity;
296 } 296 }
297 set 297 set
298 { 298 {
299 299
300 } 300 }
301 } 301 }
302 302
303 public override PhysicsVector Acceleration 303 public override PhysicsVector Acceleration
304 { 304 {
305 get 305 get
306 { 306 {
307 return _acceleration; 307 return _acceleration;
308 } 308 }
309 309
310 } 310 }
311 public void SetAcceleration(PhysicsVector accel) 311 public void SetAcceleration(PhysicsVector accel)
312 { 312 {
313 this._acceleration = accel; 313 this._acceleration = accel;
314 } 314 }
315 315
316 public override void AddForce(PhysicsVector force) 316 public override void AddForce(PhysicsVector force)
317 { 317 {
318 318
319 } 319 }
320 320
321 public override void SetMomentum(PhysicsVector momentum) 321 public override void SetMomentum(PhysicsVector momentum)
322 { 322 {
323 323
324 } 324 }
325 325
326 public void Move(float timeStep) 326 public void Move(float timeStep)
327 { 327 {
328 PhysicsVector vec = new PhysicsVector(); 328 PhysicsVector vec = new PhysicsVector();
329 vec.X = this._velocity.X * timeStep; 329 vec.X = this._velocity.X * timeStep;
330 vec.Y = this._velocity.Y * timeStep; 330 vec.Y = this._velocity.Y * timeStep;
331 if (flying) 331 if (flying)
332 { 332 {
333 vec.Z = (this._velocity.Z + 0.5f) * timeStep; 333 vec.Z = (this._velocity.Z + 0.5f) * timeStep;
334 } 334 }
335 d.BodySetLinearVel(this.BoundingCapsule, vec.X, vec.Y, vec.Z); 335 d.BodySetLinearVel(this.BoundingCapsule, vec.X, vec.Y, vec.Z);
336 } 336 }
337 337
338 public void UpdatePosition() 338 public void UpdatePosition()
339 { 339 {
340 d.Vector3 vec = d.BodyGetPosition(BoundingCapsule); 340 d.Vector3 vec = d.BodyGetPosition(BoundingCapsule);
341 this._position.X = vec.X; 341 this._position.X = vec.X;
342 this._position.Y = vec.Y; 342 this._position.Y = vec.Y;
343 this._position.Z = vec.Z+1.0f; 343 this._position.Z = vec.Z+1.0f;
344 } 344 }
345 } 345 }
346 346
347 public class OdePrim : PhysicsActor 347 public class OdePrim : PhysicsActor
348 { 348 {
349 private PhysicsVector _position; 349 private PhysicsVector _position;
350 private PhysicsVector _velocity; 350 private PhysicsVector _velocity;
351 private PhysicsVector _acceleration; 351 private PhysicsVector _acceleration;
352 352
353 public OdePrim() 353 public OdePrim()
354 { 354 {
355 _velocity = new PhysicsVector(); 355 _velocity = new PhysicsVector();
356 _position = new PhysicsVector(); 356 _position = new PhysicsVector();
357 _acceleration = new PhysicsVector(); 357 _acceleration = new PhysicsVector();
358 } 358 }
359 public override bool Flying 359 public override bool Flying
360 { 360 {
361 get 361 get
362 { 362 {
363 return false; //no flying prims for you 363 return false; //no flying prims for you
364 } 364 }
365 set 365 set
366 { 366 {
367 367
368 } 368 }
369 } 369 }
370 public override PhysicsVector Position 370 public override PhysicsVector Position
371 { 371 {
372 get 372 get
373 { 373 {
374 PhysicsVector pos = new PhysicsVector(); 374 PhysicsVector pos = new PhysicsVector();
375 // PhysicsVector vec = this._prim.Position; 375 // PhysicsVector vec = this._prim.Position;
376 //pos.X = vec.X; 376 //pos.X = vec.X;
377 //pos.Y = vec.Y; 377 //pos.Y = vec.Y;
378 //pos.Z = vec.Z; 378 //pos.Z = vec.Z;
379 return pos; 379 return pos;
380 380
381 } 381 }
382 set 382 set
383 { 383 {
384 /*PhysicsVector vec = value; 384 /*PhysicsVector vec = value;
385 PhysicsVector pos = new PhysicsVector(); 385 PhysicsVector pos = new PhysicsVector();
386 pos.X = vec.X; 386 pos.X = vec.X;
387 pos.Y = vec.Y; 387 pos.Y = vec.Y;
388 pos.Z = vec.Z; 388 pos.Z = vec.Z;
389 this._prim.Position = pos;*/ 389 this._prim.Position = pos;*/
390 } 390 }
391 } 391 }
392 392
393 public override PhysicsVector Velocity 393 public override PhysicsVector Velocity
394 { 394 {
395 get 395 get
396 { 396 {
397 return _velocity; 397 return _velocity;
398 } 398 }
399 set 399 set
400 { 400 {
401 _velocity = value; 401 _velocity = value;
402 } 402 }
403 } 403 }
404 404
405 public override bool Kinematic 405 public override bool Kinematic
406 { 406 {
407 get 407 get
408 { 408 {
409 return false; 409 return false;
410 //return this._prim.Kinematic; 410 //return this._prim.Kinematic;
411 } 411 }
412 set 412 set
413 { 413 {
414 //this._prim.Kinematic = value; 414 //this._prim.Kinematic = value;
415 } 415 }
416 } 416 }
417 417
418 public override Quaternion Orientation 418 public override Quaternion Orientation
419 { 419 {
420 get 420 get
421 { 421 {
422 Quaternion res = new Quaternion(); 422 Quaternion res = new Quaternion();
423 return res; 423 return res;
424 } 424 }
425 set 425 set
426 { 426 {
427 427
428 } 428 }
429 } 429 }
430 430
431 public override PhysicsVector Acceleration 431 public override PhysicsVector Acceleration
432 { 432 {
433 get 433 get
434 { 434 {
435 return _acceleration; 435 return _acceleration;
436 } 436 }
437 437
438 } 438 }
439 public void SetAcceleration(PhysicsVector accel) 439 public void SetAcceleration(PhysicsVector accel)
440 { 440 {
441 this._acceleration = accel; 441 this._acceleration = accel;
442 } 442 }
443 443
444 public override void AddForce(PhysicsVector force) 444 public override void AddForce(PhysicsVector force)
445 { 445 {
446 446
447 } 447 }
448 448
449 public override void SetMomentum(PhysicsVector momentum) 449 public override void SetMomentum(PhysicsVector momentum)
450 { 450 {
451 451
452 } 452 }
453 453
454 454
455 } 455 }
456 456
457} 457}