From 82e18112f2cee5ebb876d430ca8cb4a6c36c1cfd Mon Sep 17 00:00:00 2001 From: gareth Date: Tue, 13 Mar 2007 11:28:04 +0000 Subject: added movement etc from r191 --- src/physics/AssemblyInfo.cs | 2 +- src/physics/PhysicsManager.cs | 119 ++++++++++++++++++++++++++++++++++-- src/physics/plugins/AssemblyInfo.cs | 2 +- 3 files changed, 117 insertions(+), 6 deletions(-) (limited to 'src/physics') diff --git a/src/physics/AssemblyInfo.cs b/src/physics/AssemblyInfo.cs index 1cc3ee1..c78d44c 100644 --- a/src/physics/AssemblyInfo.cs +++ b/src/physics/AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Runtime.InteropServices; [assembly: ComVisibleAttribute(false)] [assembly: CLSCompliantAttribute(false)] -[assembly: AssemblyVersionAttribute("0.1.*.191")] +[assembly: AssemblyVersionAttribute("0.1.*.192")] [assembly: AssemblyTitleAttribute("opensim-physicsmanager")] [assembly: AssemblyDescriptionAttribute("Handles physics plugins")] [assembly: AssemblyCopyrightAttribute("Copyright © OGS development team 2007")] diff --git a/src/physics/PhysicsManager.cs b/src/physics/PhysicsManager.cs index e5d5bd6..1fee628 100644 --- a/src/physics/PhysicsManager.cs +++ b/src/physics/PhysicsManager.cs @@ -46,15 +46,21 @@ namespace PhysicsSystem public PhysicsScene GetPhysicsScene(string engineName) { - if(_plugins.ContainsKey(engineName)) + if( String.IsNullOrEmpty( engineName ) ) + { + return new NullPhysicsScene(); + } + + if(_plugins.ContainsKey(engineName)) { ServerConsole.MainConsole.Instance.WriteLine("creating "+engineName); return _plugins[engineName].GetScene(); } else { - ServerConsole.MainConsole.Instance.WriteLine("couldn't find physicsEngine: "+ engineName); - return null; + string error = String.Format("couldn't find physicsEngine: {0}", engineName); + ServerConsole.MainConsole.Instance.WriteLine( error ); + throw new ArgumentException( error ); } } @@ -108,6 +114,14 @@ namespace PhysicsSystem public abstract class PhysicsScene { + public static PhysicsScene Null + { + get + { + return new NullPhysicsScene(); + } + } + public abstract PhysicsActor AddAvatar(PhysicsVector position); public abstract PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size); @@ -124,8 +138,49 @@ namespace PhysicsSystem } } + public class NullPhysicsScene : PhysicsScene + { + private static int m_workIndicator; + + public override PhysicsActor AddAvatar(PhysicsVector position) + { + ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : AddAvatar({0})", position ); + return PhysicsActor.Null; + } + + public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) + { + ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : AddPrim({0},{1})", position, size ); + return PhysicsActor.Null; + } + + public override void Simulate(float timeStep) + { + m_workIndicator = ( m_workIndicator + 1 ) % 10; + + ServerConsole.MainConsole.Instance.SetStatus( m_workIndicator.ToString() ); + } + + public override void GetResults() + { + ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : GetResults()" ); + } + + public override void SetTerrain(float[] heightMap) + { + ServerConsole.MainConsole.Instance.WriteLine("NullPhysicsScene : SetTerrain({0} items)", heightMap.Length ); + } + + public override bool IsThreaded + { + get { return false; } + } + } + public abstract class PhysicsActor { + public static readonly PhysicsActor Null = new NullPhysicsActor(); + public abstract PhysicsVector Position { get; @@ -153,7 +208,61 @@ namespace PhysicsSystem public abstract void SetMomentum(PhysicsVector momentum); } - public class PhysicsVector + public class NullPhysicsActor : PhysicsActor + { + public override PhysicsVector Position + { + get + { + return PhysicsVector.Zero; + } + set + { + return; + } + } + + public override PhysicsVector Velocity + { + get + { + return PhysicsVector.Zero; + } + set + { + return; + } + } + + public override PhysicsVector Acceleration + { + get { return PhysicsVector.Zero; } + } + + public override bool Flying + { + get + { + return false; + } + set + { + return; + } + } + + public override void AddForce(PhysicsVector force) + { + return; + } + + public override void SetMomentum(PhysicsVector momentum) + { + return; + } + } + + public class PhysicsVector { public float X; public float Y; @@ -170,5 +279,7 @@ namespace PhysicsSystem Y = y; Z = z; } + + public static readonly PhysicsVector Zero = new PhysicsVector(0f, 0f, 0f); } } diff --git a/src/physics/plugins/AssemblyInfo.cs b/src/physics/plugins/AssemblyInfo.cs index 2c12da4..a24c947 100644 --- a/src/physics/plugins/AssemblyInfo.cs +++ b/src/physics/plugins/AssemblyInfo.cs @@ -14,7 +14,7 @@ using System.Runtime.InteropServices; [assembly: ComVisibleAttribute(false)] [assembly: CLSCompliantAttribute(false)] -[assembly: AssemblyVersionAttribute("0.1.*.191")] +[assembly: AssemblyVersionAttribute("0.1.*.192")] [assembly: AssemblyTitleAttribute("opensim-physicsmanager-physx")] [assembly: AssemblyDescriptionAttribute("PhysX plugin for OpenSim")] [assembly: AssemblyCopyrightAttribute("Copyright © OGS development team 2007")] -- cgit v1.1