From beb3073bec9438a439e13eaec40a8320a9279adc Mon Sep 17 00:00:00 2001 From: MW Date: Wed, 4 Jul 2007 19:07:27 +0000 Subject: [PATCH] A bit more work on Building tools/support. updated Axiom.MathLib.dll. --- OpenSim.sln | 311 +++++++----------- .../General/Interfaces/IClientAPI.cs | 3 + OpenSim/Region/Capabilities/Caps.cs | 52 ++- OpenSim/Region/ClientStack/ClientView.API.cs | 4 +- .../ClientStack/ClientView.PacketHandlers.cs | 21 +- .../OpenSim.Region.Environment.csproj | 58 ++-- .../Region/Environment/Scenes/EntityBase.cs | 2 +- .../Region/Environment/Scenes/Primitive.cs | 124 ++++++- .../Region/Environment/Scenes/PrimitiveOld.cs | 2 +- .../Scenes/Scene.PacketHandlers.cs | 60 +++- OpenSim/Region/Environment/Scenes/Scene.cs | 2 + .../Region/Environment/Scenes/SceneObject.cs | 3 +- .../Environment/Scenes/ScenePresence.cs | 2 +- .../BasicPhysicsPlugin/BasicPhysicsPlugin.cs | 2 +- .../Region/Physics/Manager/PhysicsActor.cs | 2 +- OpenSim/Region/Physics/OdePlugin/OdePlugin.cs | 4 +- .../Region/Physics/PhysXPlugin/PhysXPlugin.cs | 2 +- bin/Axiom.MathLib.dll | Bin 69632 -> 69632 bytes 18 files changed, 390 insertions(+), 264 deletions(-) diff --git a/OpenSim.sln b/OpenSim.sln index 54743ee68f..66e79d22bb 100644 --- a/OpenSim.sln +++ b/OpenSim.sln @@ -1,5 +1,5 @@ Microsoft Visual Studio Solution File, Format Version 9.00 -# Visual Studio 2005 +# Visual C# Express 2005 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim", "OpenSim\Region\Application\OpenSim.csproj", "{438A9556-0000-0000-0000-000000000000}" EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenSim.Framework", "OpenSim\Framework\General\OpenSim.Framework.csproj", "{8ACA2445-0000-0000-0000-000000000000}" @@ -53,200 +53,117 @@ EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleApp", "OpenSim\Region\Examples\SimpleApp\SimpleApp.csproj", "{24B12448-0000-0000-0000-000000000000}" EndProject Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectDependencies) = postSolution - ({438A9556-0000-0000-0000-000000000000}).3 = ({8ACA2445-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).4 = ({CB52B7E7-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).5 = ({A7CD0630-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).6 = ({36B72A9B-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).7 = ({C74E4A30-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).8 = ({2CC71860-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).9 = ({586E2916-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).10 = ({61FCCDB3-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).11 = ({DC3698B2-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).12 = ({BFB5D807-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).13 = ({4806E378-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).14 = ({DCBA491C-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).15 = ({F4FF31EB-0000-0000-0000-000000000000}) - ({438A9556-0000-0000-0000-000000000000}).16 = ({C9E0F891-0000-0000-0000-000000000000}) - ({8ACA2445-0000-0000-0000-000000000000}).2 = ({A7CD0630-0000-0000-0000-000000000000}) - ({CB52B7E7-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({CB52B7E7-0000-0000-0000-000000000000}).2 = ({36B72A9B-0000-0000-0000-000000000000}) - ({FD2D303D-0000-0000-0000-000000000000}).2 = ({36B72A9B-0000-0000-0000-000000000000}) - ({C74E4A30-0000-0000-0000-000000000000}).0 = ({8ACA2445-0000-0000-0000-000000000000}) - ({2CC71860-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({2CC71860-0000-0000-0000-000000000000}).2 = ({A7CD0630-0000-0000-0000-000000000000}) - ({586E2916-0000-0000-0000-000000000000}).2 = ({8ACA2445-0000-0000-0000-000000000000}) - ({586E2916-0000-0000-0000-000000000000}).3 = ({A7CD0630-0000-0000-0000-000000000000}) - ({586E2916-0000-0000-0000-000000000000}).4 = ({36B72A9B-0000-0000-0000-000000000000}) - ({586E2916-0000-0000-0000-000000000000}).5 = ({C74E4A30-0000-0000-0000-000000000000}) - ({586E2916-0000-0000-0000-000000000000}).6 = ({2CC71860-0000-0000-0000-000000000000}) - ({61FCCDB3-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({39038E85-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({39038E85-0000-0000-0000-000000000000}).2 = ({2CC71860-0000-0000-0000-000000000000}) - ({39038E85-0000-0000-0000-000000000000}).3 = ({61FCCDB3-0000-0000-0000-000000000000}) - ({DC3698B2-0000-0000-0000-000000000000}).3 = ({8ACA2445-0000-0000-0000-000000000000}) - ({DC3698B2-0000-0000-0000-000000000000}).4 = ({A7CD0630-0000-0000-0000-000000000000}) - ({DC3698B2-0000-0000-0000-000000000000}).5 = ({2CC71860-0000-0000-0000-000000000000}) - ({DC3698B2-0000-0000-0000-000000000000}).6 = ({61FCCDB3-0000-0000-0000-000000000000}) - ({DC3698B2-0000-0000-0000-000000000000}).7 = ({F4FF31EB-0000-0000-0000-000000000000}) - ({DC3698B2-0000-0000-0000-000000000000}).8 = ({C9E0F891-0000-0000-0000-000000000000}) - ({BFB5D807-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({BFB5D807-0000-0000-0000-000000000000}).2 = ({CB52B7E7-0000-0000-0000-000000000000}) - ({BFB5D807-0000-0000-0000-000000000000}).3 = ({36B72A9B-0000-0000-0000-000000000000}) - ({BFB5D807-0000-0000-0000-000000000000}).4 = ({586E2916-0000-0000-0000-000000000000}) - ({4806E378-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({4806E378-0000-0000-0000-000000000000}).2 = ({CB52B7E7-0000-0000-0000-000000000000}) - ({4806E378-0000-0000-0000-000000000000}).3 = ({A7CD0630-0000-0000-0000-000000000000}) - ({4806E378-0000-0000-0000-000000000000}).4 = ({36B72A9B-0000-0000-0000-000000000000}) - ({4806E378-0000-0000-0000-000000000000}).5 = ({2CC71860-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).4 = ({8ACA2445-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).5 = ({CB52B7E7-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).6 = ({A7CD0630-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).7 = ({C74E4A30-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).8 = ({2CC71860-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).9 = ({61FCCDB3-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).10 = ({39038E85-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).11 = ({F4FF31EB-0000-0000-0000-000000000000}) - ({DCBA491C-0000-0000-0000-000000000000}).12 = ({C9E0F891-0000-0000-0000-000000000000}) - ({241A8CDD-0000-0000-0000-000000000000}).2 = ({8ACA2445-0000-0000-0000-000000000000}) - ({241A8CDD-0000-0000-0000-000000000000}).3 = ({A7CD0630-0000-0000-0000-000000000000}) - ({98C7B681-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({98C7B681-0000-0000-0000-000000000000}).2 = ({A7CD0630-0000-0000-0000-000000000000}) - ({15B4FEF3-0000-0000-0000-000000000000}).1 = ({F4FF31EB-0000-0000-0000-000000000000}) - ({F4FF31EB-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({F4FF31EB-0000-0000-0000-000000000000}).2 = ({A7CD0630-0000-0000-0000-000000000000}) - ({90620634-0000-0000-0000-000000000000}).2 = ({F4FF31EB-0000-0000-0000-000000000000}) - ({A6D191D8-0000-0000-0000-000000000000}).1 = ({F4FF31EB-0000-0000-0000-000000000000}) - ({A4691E59-0000-0000-0000-000000000000}).3 = ({8ACA2445-0000-0000-0000-000000000000}) - ({A4691E59-0000-0000-0000-000000000000}).4 = ({A7CD0630-0000-0000-0000-000000000000}) - ({43DB702D-0000-0000-0000-000000000000}).2 = ({8ACA2445-0000-0000-0000-000000000000}) - ({43DB702D-0000-0000-0000-000000000000}).3 = ({A7CD0630-0000-0000-0000-000000000000}) - ({477B9270-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({477B9270-0000-0000-0000-000000000000}).2 = ({A7CD0630-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).1 = ({8ACA2445-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).2 = ({CB52B7E7-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).3 = ({A7CD0630-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).4 = ({2CC71860-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).5 = ({586E2916-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).6 = ({61FCCDB3-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).7 = ({39038E85-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).8 = ({DC3698B2-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).9 = ({BFB5D807-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).10 = ({DCBA491C-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).11 = ({241A8CDD-0000-0000-0000-000000000000}) - ({24B12448-0000-0000-0000-000000000000}).12 = ({F4FF31EB-0000-0000-0000-000000000000}) - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {CB52B7E7-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CB52B7E7-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CB52B7E7-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CB52B7E7-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {36B72A9B-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36B72A9B-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36B72A9B-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36B72A9B-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {FD2D303D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD2D303D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD2D303D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD2D303D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {C74E4A30-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C74E4A30-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C74E4A30-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C74E4A30-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {2CC71860-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CC71860-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CC71860-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CC71860-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {586E2916-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {586E2916-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {586E2916-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {586E2916-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {61FCCDB3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61FCCDB3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61FCCDB3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61FCCDB3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {39038E85-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39038E85-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39038E85-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39038E85-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {DC3698B2-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC3698B2-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC3698B2-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC3698B2-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {BFB5D807-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BFB5D807-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BFB5D807-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BFB5D807-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {4806E378-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4806E378-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4806E378-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4806E378-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {DCBA491C-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCBA491C-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCBA491C-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCBA491C-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {241A8CDD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {241A8CDD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {241A8CDD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {241A8CDD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {98C7B681-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {98C7B681-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {98C7B681-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {98C7B681-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {15B4FEF3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15B4FEF3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15B4FEF3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15B4FEF3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {F4FF31EB-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4FF31EB-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4FF31EB-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4FF31EB-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {90620634-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90620634-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90620634-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90620634-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {A6D191D8-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A6D191D8-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A6D191D8-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A6D191D8-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {A4691E59-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4691E59-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4691E59-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4691E59-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {43DB702D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {43DB702D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {43DB702D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {43DB702D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {477B9270-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {477B9270-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {477B9270-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {477B9270-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {C9E0F891-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9E0F891-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9E0F891-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9E0F891-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {24B12448-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {24B12448-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {24B12448-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {24B12448-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {438A9556-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {438A9556-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8ACA2445-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8ACA2445-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {CB52B7E7-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CB52B7E7-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CB52B7E7-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CB52B7E7-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A7CD0630-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A7CD0630-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {36B72A9B-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {36B72A9B-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {36B72A9B-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {36B72A9B-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {FD2D303D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FD2D303D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FD2D303D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FD2D303D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {C74E4A30-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C74E4A30-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C74E4A30-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C74E4A30-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {2CC71860-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2CC71860-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2CC71860-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2CC71860-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {586E2916-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {586E2916-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {586E2916-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {586E2916-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {61FCCDB3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {61FCCDB3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {61FCCDB3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {61FCCDB3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {39038E85-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {39038E85-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {39038E85-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {39038E85-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {DC3698B2-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DC3698B2-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DC3698B2-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DC3698B2-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {BFB5D807-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BFB5D807-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BFB5D807-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BFB5D807-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {4806E378-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {4806E378-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {4806E378-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {4806E378-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {DCBA491C-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {DCBA491C-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {DCBA491C-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {DCBA491C-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {241A8CDD-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {241A8CDD-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {241A8CDD-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {241A8CDD-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {98C7B681-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {98C7B681-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {98C7B681-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {98C7B681-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {15B4FEF3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {15B4FEF3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {15B4FEF3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {15B4FEF3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {F4FF31EB-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F4FF31EB-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F4FF31EB-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F4FF31EB-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {90620634-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {90620634-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {90620634-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {90620634-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {A6D191D8-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A6D191D8-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A6D191D8-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A6D191D8-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {A4691E59-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A4691E59-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4691E59-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A4691E59-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {43DB702D-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43DB702D-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43DB702D-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43DB702D-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {477B9270-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {477B9270-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {477B9270-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {477B9270-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {C9E0F891-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C9E0F891-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C9E0F891-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C9E0F891-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {24B12448-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {24B12448-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {24B12448-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {24B12448-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection EndGlobal diff --git a/OpenSim/Framework/General/Interfaces/IClientAPI.cs b/OpenSim/Framework/General/Interfaces/IClientAPI.cs index c3291c407f..2c7e143687 100644 --- a/OpenSim/Framework/General/Interfaces/IClientAPI.cs +++ b/OpenSim/Framework/General/Interfaces/IClientAPI.cs @@ -56,6 +56,7 @@ namespace OpenSim.Framework.Interfaces public delegate void UpdatePrimTexture(uint localID, byte[] texture, IClientAPI remoteClient); public delegate void UpdateVector(uint localID, LLVector3 pos, IClientAPI remoteClient); public delegate void UpdatePrimRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient); + public delegate void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient); public delegate void UpdatePrimGroupRotation(uint localID,LLVector3 pos, LLQuaternion rot, IClientAPI remoteClient); public delegate void StatusChange(bool status); public delegate void NewAvatar(IClientAPI remoteClient, LLUUID agentID, bool status); @@ -100,7 +101,9 @@ namespace OpenSim.Framework.Interfaces event UpdatePrimFlags OnUpdatePrimFlags; event UpdatePrimTexture OnUpdatePrimTexture; event UpdateVector OnUpdatePrimPosition; + event UpdateVector OnUpdatePrimSinglePosition; event UpdatePrimRotation OnUpdatePrimRotation; + event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; event UpdatePrimGroupRotation OnUpdatePrimGroupRotation; event UpdateVector OnUpdatePrimScale; event StatusChange OnChildAgentStatus; diff --git a/OpenSim/Region/Capabilities/Caps.cs b/OpenSim/Region/Capabilities/Caps.cs index 70d601faeb..6206f65c7e 100644 --- a/OpenSim/Region/Capabilities/Caps.cs +++ b/OpenSim/Region/Capabilities/Caps.cs @@ -73,6 +73,7 @@ namespace OpenSim.Region.Capabilities Console.WriteLine("registering CAPS handlers"); string capsBase = "/CAPS/" + m_capsObjectPath; + AddLegacyCapsHandler( httpListener, m_mapLayerPath, MapLayer); //httpListener.AddStreamHandler( @@ -82,6 +83,7 @@ namespace OpenSim.Region.Capabilities AddLegacyCapsHandler(httpListener, m_newInventory, NewAgentInventory); AddLegacyCapsHandler( httpListener, eventQueue, ProcessEventQueue); AddLegacyCapsHandler( httpListener, m_requestTexture, RequestTexture); + } public LLSDMapLayerResponse GetMapLayer(LLSDMapRequest mapReq) @@ -150,6 +152,20 @@ namespace OpenSim.Region.Capabilities } + /// + /// + /// + /// + protected LLSDMapLayer BuildLLSDMapLayerResponse() + { + LLSDMapLayer mapLayer = new LLSDMapLayer(); + mapLayer.Right = 5000; + mapLayer.Top = 5000; + mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); + + return mapLayer; + } + /// /// /// @@ -166,17 +182,10 @@ namespace OpenSim.Region.Capabilities /// /// /// + /// + /// + /// /// - protected LLSDMapLayer BuildLLSDMapLayerResponse() - { - LLSDMapLayer mapLayer = new LLSDMapLayer(); - mapLayer.Right = 5000; - mapLayer.Top = 5000; - mapLayer.ImageID = new LLUUID("00000000-0000-0000-9999-000000000006"); - - return mapLayer; - } - public string ProcessEventQueue(string request, string path, string param) { string res = ""; @@ -196,6 +205,12 @@ namespace OpenSim.Region.Capabilities return res; } + /// + /// + /// + /// + /// + /// public string CreateEstablishAgentComms(string caps, string ipAddressPort) { LLSDCapEvent eventItem = new LLSDCapEvent(); @@ -209,6 +224,10 @@ namespace OpenSim.Region.Capabilities return res; } + /// + /// + /// + /// public string CreateEmptyEventResponse() { LLSDCapEvent eventItem = new LLSDCapEvent(); @@ -219,6 +238,13 @@ namespace OpenSim.Region.Capabilities return res; } + /// + /// + /// + /// + /// + /// + /// public string NewAgentInventory(string request, string path, string param) { //Console.WriteLine("received upload request:"+ request); @@ -241,6 +267,12 @@ namespace OpenSim.Region.Capabilities return res; } + /// + /// + /// + /// + /// + /// public void UploadHandler(LLUUID assetID, LLUUID inventoryItem, byte[] data) { // Console.WriteLine("upload handler called"); diff --git a/OpenSim/Region/ClientStack/ClientView.API.cs b/OpenSim/Region/ClientStack/ClientView.API.cs index 6de6af6d76..9e7117f58e 100644 --- a/OpenSim/Region/ClientStack/ClientView.API.cs +++ b/OpenSim/Region/ClientStack/ClientView.API.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Net; using System.Text; -using Axiom.MathLib; +using Axiom.Math; using libsecondlife; using libsecondlife.Packets; using OpenSim.Framework.Console; @@ -63,7 +63,9 @@ namespace OpenSim.Region.ClientStack public event UpdatePrimFlags OnUpdatePrimFlags; public event UpdatePrimTexture OnUpdatePrimTexture; public event UpdateVector OnUpdatePrimPosition; + public event UpdateVector OnUpdatePrimSinglePosition; public event UpdatePrimRotation OnUpdatePrimRotation; + public event UpdatePrimSingleRotation OnUpdatePrimSingleRotation; public event UpdatePrimGroupRotation OnUpdatePrimGroupRotation; public event UpdateVector OnUpdatePrimScale; public event StatusChange OnChildAgentStatus; diff --git a/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs index 0b6c4f6334..5cea28a6a9 100644 --- a/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs +++ b/OpenSim/Region/ClientStack/ClientView.PacketHandlers.cs @@ -101,7 +101,7 @@ namespace OpenSim.Region.ClientStack protected bool MultipleObjUpdate(ClientView simClient, Packet packet) { MultipleObjectUpdatePacket multipleupdate = (MultipleObjectUpdatePacket)packet; - // Console.WriteLine("new multi update packet " + multipleupdate.ToString()); + //System.Console.WriteLine("new multi update packet " + multipleupdate.ToString()); for (int i = 0; i < multipleupdate.ObjectData.Length; i++) { #region position @@ -116,30 +116,31 @@ namespace OpenSim.Region.ClientStack } else if (multipleupdate.ObjectData[i].Type == 1) //single item of group change position { - if (OnUpdatePrimPosition != null) + if (OnUpdatePrimSinglePosition != null) { - // libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); - //OnUpdatePrimPosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this); + libsecondlife.LLVector3 pos = new LLVector3(multipleupdate.ObjectData[i].Data, 0); + // System.Console.WriteLine("new movement position is " + pos.X + " , " + pos.Y + " , " + pos.Z); + OnUpdatePrimSinglePosition(multipleupdate.ObjectData[i].ObjectLocalID, pos, this); } } #endregion position #region rotation else if (multipleupdate.ObjectData[i].Type == 2)// single item of group rotation from tab { - if (OnUpdatePrimRotation != null) + if (OnUpdatePrimSingleRotation != null) { LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 0, true); // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); - OnUpdatePrimRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this); + OnUpdatePrimSingleRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this); } } else if (multipleupdate.ObjectData[i].Type == 3)// single item of group rotation from mouse { - if (OnUpdatePrimRotation != null) + if (OnUpdatePrimSingleRotation != null) { libsecondlife.LLQuaternion rot = new LLQuaternion(multipleupdate.ObjectData[i].Data, 12, true); // Console.WriteLine("new rotation is " + rot.X + " , " + rot.Y + " , " + rot.Z + " , " + rot.W); - OnUpdatePrimRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this); + OnUpdatePrimSingleRotation(multipleupdate.ObjectData[i].ObjectLocalID, rot, this); } } else if (multipleupdate.ObjectData[i].Type == 10)//group rotation from object tab @@ -182,7 +183,7 @@ namespace OpenSim.Region.ClientStack // OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this); } } - else if (multipleupdate.ObjectData[i].Type == 5)//single scale from object tab + else if (multipleupdate.ObjectData[i].Type == 5)//single prim scale from object tab { if (OnUpdatePrimScale != null) { @@ -191,7 +192,7 @@ namespace OpenSim.Region.ClientStack OnUpdatePrimScale(multipleupdate.ObjectData[i].ObjectLocalID, scale, this); } } - else if (multipleupdate.ObjectData[i].Type == 21)//single scale from mouse + else if (multipleupdate.ObjectData[i].Type == 21)//single prim scale from mouse { if (OnUpdatePrimScale != null) { diff --git a/OpenSim/Region/Environment/OpenSim.Region.Environment.csproj b/OpenSim/Region/Environment/OpenSim.Region.Environment.csproj index 9e9405e18e..f5724dd5ef 100644 --- a/OpenSim/Region/Environment/OpenSim.Region.Environment.csproj +++ b/OpenSim/Region/Environment/OpenSim.Region.Environment.csproj @@ -1,4 +1,4 @@ - + Local 8.0.50727 @@ -6,7 +6,8 @@ {DCBA491C-0000-0000-0000-000000000000} Debug AnyCPU - + + OpenSim.Region.Environment @@ -15,9 +16,11 @@ IE50 false Library - + + OpenSim.Region.Environment - + + @@ -28,7 +31,8 @@ TRACE;DEBUG - + + True 4096 False @@ -37,7 +41,8 @@ False False 4 - + + False @@ -46,7 +51,8 @@ TRACE - + + False 4096 True @@ -55,34 +61,36 @@ False False 4 - + + - + ..\..\..\bin\Axiom.MathLib.dll False - + ..\..\..\bin\Db4objects.Db4o.dll False - + ..\..\..\bin\libsecondlife.dll False - + Microsoft.JScript.dll False - + System.dll False - + + System.Xml.dll False - + ..\..\..\bin\XMLRPC.dll False @@ -92,55 +100,55 @@ OpenSim.Framework {8ACA2445-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Framework.Communications {CB52B7E7-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Framework.Console {A7CD0630-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Framework.GenericConfig.Xml {C74E4A30-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Framework.Servers {2CC71860-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Region.Caches {61FCCDB3-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Region.Capabilities {39038E85-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Region.Physics.Manager {F4FF31EB-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False OpenSim.Region.Terrain.BasicTerrain {C9E0F891-0000-0000-0000-000000000000} {FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - False + False @@ -215,4 +223,4 @@ - + \ No newline at end of file diff --git a/OpenSim/Region/Environment/Scenes/EntityBase.cs b/OpenSim/Region/Environment/Scenes/EntityBase.cs index 2874ae2b21..99ca021839 100644 --- a/OpenSim/Region/Environment/Scenes/EntityBase.cs +++ b/OpenSim/Region/Environment/Scenes/EntityBase.cs @@ -1,5 +1,5 @@ using System.Collections.Generic; -using Axiom.MathLib; +using Axiom.Math; using libsecondlife; namespace OpenSim.Region.Environment.Scenes diff --git a/OpenSim/Region/Environment/Scenes/Primitive.cs b/OpenSim/Region/Environment/Scenes/Primitive.cs index 803bd2870d..24dc115a59 100644 --- a/OpenSim/Region/Environment/Scenes/Primitive.cs +++ b/OpenSim/Region/Environment/Scenes/Primitive.cs @@ -1,6 +1,6 @@ using System; using System.Collections.Generic; -using Axiom.MathLib; +using Axiom.Math; using libsecondlife; using libsecondlife.Packets; using OpenSim.Framework.Interfaces; @@ -45,6 +45,7 @@ namespace OpenSim.Region.Environment.Scenes public bool isRootPrim; public EntityBase m_Parent; + #region Properties public override LLVector3 Pos { get @@ -69,6 +70,22 @@ namespace OpenSim.Region.Environment.Scenes } + public LLVector3 WorldPos + { + get + { + if (!this.isRootPrim) + { + Primitive parentPrim = (Primitive)this.m_Parent; + return this.m_pos + parentPrim.WorldPos; + } + else + { + return this.Pos; + } + } + } + public string Description { get @@ -92,7 +109,9 @@ namespace OpenSim.Region.Environment.Scenes return this.m_Shape.Scale; } } + #endregion + #region Constructors public Primitive(ulong regionHandle, Scene world, ObjectAddPacket addPacket, LLUUID ownerID, uint localID, bool isRoot, EntityBase parent, SceneObject rootObject) { m_regionHandle = regionHandle; @@ -102,9 +121,11 @@ namespace OpenSim.Region.Environment.Scenes this.isRootPrim = isRoot; this.m_RootParent = rootObject; this.CreateFromPacket(addPacket, ownerID, localID); - this.rotation = Axiom.MathLib.Quaternion.Identity; + this.rotation = Axiom.Math.Quaternion.Identity; } + #endregion + #region Override from EntityBase /// /// /// @@ -126,7 +147,9 @@ namespace OpenSim.Region.Environment.Scenes child.update(); } } + #endregion + #region Setup /// /// /// @@ -169,7 +192,9 @@ namespace OpenSim.Region.Environment.Scenes this.updateFlag = 1; } + #endregion + #region Linking / unlinking /// /// /// @@ -196,28 +221,49 @@ namespace OpenSim.Region.Environment.Scenes this.isRootPrim = false; this.m_Parent = newParent; this.ParentID = newParent.LocalId; - this.SetRootParent(rootParent); + this.m_RootParent = rootParent; + this.m_RootParent.AddChildToList(this); this.Pos = oldPos; - Axiom.MathLib.Vector3 axPos = new Axiom.MathLib.Vector3(this.m_pos.X, m_pos.Y, m_pos.Z); + Axiom.Math.Vector3 axPos = new Axiom.Math.Vector3(this.m_pos.X, m_pos.Y, m_pos.Z); axPos = this.m_Parent.rotation.Inverse() * axPos; this.m_pos = new LLVector3(axPos.x, axPos.y, axPos.z); this.rotation = this.rotation * this.m_Parent.rotation.Inverse(); this.updateFlag = 1; + foreach (Primitive child in children) + { + child.SetRootParent(rootParent, newParent, oldPos); + } + children.Clear(); + + } /// /// /// /// - public void SetRootParent(SceneObject newRoot) + public void SetRootParent(SceneObject newRoot , Primitive newParent, LLVector3 oldParentPosition) { + LLVector3 oldPos = new LLVector3(this.Pos.X, this.Pos.Y, this.Pos.Z); + oldPos += oldParentPosition; + this.isRootPrim = false; + this.m_Parent = newParent; + this.ParentID = newParent.LocalId; + newParent.AddToChildrenList(this); this.m_RootParent = newRoot; this.m_RootParent.AddChildToList(this); + this.Pos = oldPos; + Axiom.Math.Vector3 axPos = new Axiom.Math.Vector3(this.m_pos.X, m_pos.Y, m_pos.Z); + axPos = this.m_Parent.rotation.Inverse() * axPos; + this.m_pos = new LLVector3(axPos.x, axPos.y, axPos.z); + this.rotation = this.rotation * this.m_Parent.rotation.Inverse(); + this.updateFlag = 1; foreach (Primitive child in children) { - child.SetRootParent(newRoot); + child.SetRootParent(newRoot, newParent, oldPos); } + children.Clear(); } public void AddOffsetToChildren(LLVector3 offset) @@ -229,6 +275,12 @@ namespace OpenSim.Region.Environment.Scenes } } + public void AddToChildrenList(Primitive prim) + { + this.children.Add(prim); + } + #endregion + #region Resizing/Scale public void ResizeGoup(LLVector3 scale) { @@ -252,6 +304,7 @@ namespace OpenSim.Region.Environment.Scenes } #endregion + #region Position /// /// /// @@ -264,19 +317,73 @@ namespace OpenSim.Region.Environment.Scenes this.updateFlag = 2; } + public void UpdateSinglePosition(LLVector3 pos) + { + //Console.WriteLine("updating single prim position"); + if (this.isRootPrim) + { + LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); + LLVector3 oldPos = new LLVector3(Pos.X, Pos.Y, Pos.Z); + LLVector3 diff = oldPos - newPos; + Axiom.Math.Vector3 axDiff = new Vector3(diff.X, diff.Y, diff.Z); + axDiff = this.rotation.Inverse() * axDiff; + diff.X = axDiff.x; + diff.Y = axDiff.y; + diff.Z = axDiff.z; + this.Pos = newPos; + + foreach (Primitive prim in this.children) + { + prim.m_pos += diff; + prim.updateFlag = 2; + } + this.updateFlag = 2; + } + else + { + LLVector3 newPos = new LLVector3(pos.X, pos.Y, pos.Z); + this.m_pos = newPos; + this.updateFlag = 2; + } + } + + #endregion + + #region Rotation public void UpdateRotation(LLQuaternion rot) { - this.rotation = new Axiom.MathLib.Quaternion(rot.W, rot.X, rot.Y, rot.Z); + this.rotation = new Axiom.Math.Quaternion(rot.W, rot.X, rot.Y, rot.Z); + this.updateFlag = 2; + } + + public void UpdateSingleRotation(LLQuaternion rot) + { + Axiom.Math.Quaternion axRot = new Axiom.Math.Quaternion(rot.W, rot.X, rot.Y, rot.Z); + Axiom.Math.Quaternion oldParentRot = new Quaternion(this.rotation.w, this.rotation.x, this.rotation.y, this.rotation.z); + this.rotation = axRot; + foreach (Primitive prim in this.children) + { + Axiom.Math.Vector3 axPos = new Vector3(prim.m_pos.X, prim.m_pos.Y, prim.m_pos.Z); + axPos = oldParentRot * axPos; + axPos = axRot.Inverse() * axPos; + prim.m_pos = new LLVector3(axPos.x, axPos.y, axPos.z); + prim.rotation = prim.rotation * oldParentRot; + prim.rotation = prim.rotation * axRot.Inverse(); + prim.updateFlag = 2; + } this.updateFlag = 2; } public void UpdateGroupMouseRotation(LLVector3 pos, LLQuaternion rot) { - this.rotation = new Axiom.MathLib.Quaternion(rot.W, rot.X, rot.Y, rot.Z); + this.rotation = new Axiom.Math.Quaternion(rot.W, rot.X, rot.Y, rot.Z); this.Pos = pos; this.updateFlag = 2; } + #endregion + + #region Shape public void UpdateShape(ObjectShapePacket.ObjectDataBlock shapeBlock) { this.m_Shape.PathBegin = shapeBlock.PathBegin; @@ -299,6 +406,7 @@ namespace OpenSim.Region.Environment.Scenes this.m_Shape.PathTwistBegin = shapeBlock.PathTwistBegin; this.updateFlag = 1; } + #endregion #region Client Update Methods diff --git a/OpenSim/Region/Environment/Scenes/PrimitiveOld.cs b/OpenSim/Region/Environment/Scenes/PrimitiveOld.cs index 4213a185da..247ff8789e 100644 --- a/OpenSim/Region/Environment/Scenes/PrimitiveOld.cs +++ b/OpenSim/Region/Environment/Scenes/PrimitiveOld.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using System.Text; -using Axiom.MathLib; +using Axiom.Math; using libsecondlife; using libsecondlife.Packets; using OpenSim.Framework.Interfaces; diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index 09279032bb..b3d9d15e11 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -107,7 +107,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void SimChat(byte[] message, byte type, LLVector3 fromPos, string fromName, LLUUID fromAgentID) { - Console.WriteLine("Chat message"); + // Console.WriteLine("Chat message"); ScenePresence avatar = null; foreach (IClientAPI client in m_clientThreads.Values) { @@ -118,7 +118,7 @@ namespace OpenSim.Region.Environment.Scenes avatar = this.Avatars[client.AgentId]; // int dis = Util.fast_distance2d((int)(client.ClientAvatar.Pos.X - simClient.ClientAvatar.Pos.X), (int)(client.ClientAvatar.Pos.Y - simClient.ClientAvatar.Pos.Y)); dis= (int)avatar.Pos.GetDistanceTo(fromPos); - Console.WriteLine("found avatar at " +dis); + //Console.WriteLine("found avatar at " +dis); } @@ -314,13 +314,27 @@ namespace OpenSim.Region.Environment.Scenes public void MoveObject(LLUUID objectID, LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) { + Primitive prim = null; + foreach (EntityBase ent in Entities.Values) + { + if (ent is SceneObject) + { + prim = ((SceneObject)ent).HasChildPrim(objectID); + if (prim != null) + { + ((SceneObject)ent).GrapMovement(offset, pos, remoteClient); + break; + } + } + } + /* if (this.Entities.ContainsKey(objectID)) { if (this.Entities[objectID] is SceneObject) { ((SceneObject)this.Entities[objectID]).GrapMovement(offset, pos, remoteClient); } - } + }*/ } /// @@ -368,6 +382,23 @@ namespace OpenSim.Region.Environment.Scenes } } + public void UpdatePrimSinglePosition(uint localID, LLVector3 pos, IClientAPI remoteClient) + { + Primitive prim = null; + foreach (EntityBase ent in Entities.Values) + { + if (ent is SceneObject) + { + prim = ((SceneObject)ent).HasChildPrim(localID); + if (prim != null) + { + prim.UpdateSinglePosition(pos); + break; + } + } + } + } + /// /// /// @@ -415,6 +446,29 @@ namespace OpenSim.Region.Environment.Scenes } } + /// + /// + /// + /// + /// + /// + public void UpdatePrimSingleRotation(uint localID, LLQuaternion rot, IClientAPI remoteClient) + { + Primitive prim = null; + foreach (EntityBase ent in Entities.Values) + { + if (ent is SceneObject) + { + prim = ((SceneObject)ent).HasChildPrim(localID); + if (prim != null) + { + prim.UpdateSingleRotation(rot); + break; + } + } + } + } + /// /// /// diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index 838d722cfa..079756678e 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -453,8 +453,10 @@ namespace OpenSim.Region.Environment.Scenes client.OnRequestWearables += this.InformClientOfNeighbours; client.OnAddPrim += this.AddNewPrim; client.OnUpdatePrimPosition += this.UpdatePrimPosition; + client.OnUpdatePrimSinglePosition += this.UpdatePrimSinglePosition; client.OnUpdatePrimRotation += this.UpdatePrimRotation; client.OnUpdatePrimGroupRotation += this.UpdatePrimRotation; + client.OnUpdatePrimSingleRotation += this.UpdatePrimSingleRotation; client.OnUpdatePrimScale += this.UpdatePrimScale; client.OnUpdatePrimShape += this.UpdatePrimShape; client.OnRequestMapBlocks += this.RequestMapBlocks; diff --git a/OpenSim/Region/Environment/Scenes/SceneObject.cs b/OpenSim/Region/Environment/Scenes/SceneObject.cs index 9a46fbfda9..00d7c633ae 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObject.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObject.cs @@ -178,8 +178,7 @@ namespace OpenSim.Region.Environment.Scenes /// public void GrapMovement(LLVector3 offset, LLVector3 pos, IClientAPI remoteClient) { - //this.Pos = pos; - this.rootPrimitive.Pos = pos; + this.rootPrimitive.Pos = pos ; this.rootPrimitive.SendTerseUpdateForAllChildren(remoteClient); } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 98fa2edf1b..14b7b2ff55 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -28,7 +28,7 @@ using System; using System.Collections.Generic; using System.IO; -using Axiom.MathLib; +using Axiom.Math; using libsecondlife; using libsecondlife.Packets; using OpenSim.Framework.Console; diff --git a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs index 393796fbe7..f13304581f 100644 --- a/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs +++ b/OpenSim/Region/Physics/BasicPhysicsPlugin/BasicPhysicsPlugin.cs @@ -26,7 +26,7 @@ * */ using System.Collections.Generic; -using Axiom.MathLib; +using Axiom.Math; using OpenSim.Physics.Manager; namespace OpenSim.Region.Physics.BasicPhysicsPlugin diff --git a/OpenSim/Region/Physics/Manager/PhysicsActor.cs b/OpenSim/Region/Physics/Manager/PhysicsActor.cs index 8c286e0540..da3b56095f 100644 --- a/OpenSim/Region/Physics/Manager/PhysicsActor.cs +++ b/OpenSim/Region/Physics/Manager/PhysicsActor.cs @@ -25,7 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * */ -using Axiom.MathLib; +using Axiom.Math; namespace OpenSim.Physics.Manager { diff --git a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs index b85c052b0c..2780188a8a 100644 --- a/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs +++ b/OpenSim/Region/Physics/OdePlugin/OdePlugin.cs @@ -27,7 +27,7 @@ */ using System; using System.Collections.Generic; -using Axiom.MathLib; +using Axiom.Math; using Ode.NET; using OpenSim.Physics.Manager; @@ -197,7 +197,7 @@ namespace OpenSim.Region.Physics.OdePlugin Quaternion q1 =Quaternion.FromAngleAxis(1.5707f, new Vector3(1,0,0)); Quaternion q2 =Quaternion.FromAngleAxis(1.5707f, new Vector3(0,1,0)); - //Axiom.MathLib.Quaternion q3 = Axiom.MathLib.Quaternion.FromAngleAxis(3.14f, new Axiom.MathLib.Vector3(0, 0, 1)); + //Axiom.Math.Quaternion q3 = Axiom.Math.Quaternion.FromAngleAxis(3.14f, new Axiom.Math.Vector3(0, 0, 1)); q1 = q1 * q2; //q1 = q1 * q3; diff --git a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs index a75e5c7ad4..4c82549e51 100644 --- a/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs +++ b/OpenSim/Region/Physics/PhysXPlugin/PhysXPlugin.cs @@ -29,7 +29,7 @@ using System; using System.Collections.Generic; using OpenSim.Physics.Manager; using PhysXWrapper; -using Quaternion=Axiom.MathLib.Quaternion; +using Quaternion=Axiom.Math.Quaternion; namespace OpenSim.Region.Physics.PhysXPlugin { diff --git a/bin/Axiom.MathLib.dll b/bin/Axiom.MathLib.dll index 21ce3a8b188cace619bd0ebf71a6992bb23408b9..b00cf1d1da943aa6aa5ce29698b51fb9f3f0c696 100644 GIT binary patch literal 69632 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 z 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