diff options
author | MW | 2007-03-10 20:30:25 +0000 |
---|---|---|
committer | MW | 2007-03-10 20:30:25 +0000 |
commit | 76569ff4fba09f22ed4a06b8073deaed7f64a2e3 (patch) | |
tree | f83430652d8874f299733f505b6b7ded13910bb8 | |
parent | Another attempt to fix the project files (diff) | |
download | opensim-SC_OLD-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.zip opensim-SC_OLD-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.tar.gz opensim-SC_OLD-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.tar.bz2 opensim-SC_OLD-76569ff4fba09f22ed4a06b8073deaed7f64a2e3.tar.xz |
A PhysX physics plugin (that actually uses physX now but currently only works on windows)
Can now change direction when walking without stopping
Flying works when using the Physx dll
Diffstat (limited to '')
-rw-r--r-- | bin/PhysX-wrapper.dll | bin | 0 -> 53248 bytes | |||
-rw-r--r-- | bin/PhysX_Wrapper_Dotnet.dll | bin | 0 -> 6656 bytes | |||
-rw-r--r-- | src/Main.cs | 8 | ||||
-rw-r--r-- | src/OpenSimClient.cs | 7 | ||||
-rw-r--r-- | src/Second-server.sln | 10 | ||||
-rw-r--r-- | src/physics/PhysicsManager.cs | 7 | ||||
-rw-r--r-- | src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs | 31 | ||||
-rw-r--r-- | src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs | 361 | ||||
-rw-r--r-- | src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj | 45 | ||||
-rw-r--r-- | src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln | 7 | ||||
-rw-r--r-- | src/physics/plugins/PhysXplugin.cs | 38 | ||||
-rw-r--r-- | src/world/Avatar.cs | 103 | ||||
-rw-r--r-- | src/world/Primitive.cs | 83 | ||||
-rw-r--r-- | src/world/World.cs | 9 |
14 files changed, 674 insertions, 35 deletions
diff --git a/bin/PhysX-wrapper.dll b/bin/PhysX-wrapper.dll new file mode 100644 index 0000000..73d8b91 --- /dev/null +++ b/bin/PhysX-wrapper.dll | |||
Binary files differ | |||
diff --git a/bin/PhysX_Wrapper_Dotnet.dll b/bin/PhysX_Wrapper_Dotnet.dll new file mode 100644 index 0000000..1e97cb5 --- /dev/null +++ b/bin/PhysX_Wrapper_Dotnet.dll | |||
Binary files differ | |||
diff --git a/src/Main.cs b/src/Main.cs index 600ce38..3103ea3 100644 --- a/src/Main.cs +++ b/src/Main.cs | |||
@@ -71,6 +71,7 @@ namespace OpenSim | |||
71 | private PhysicsManager physManager; | 71 | private PhysicsManager physManager; |
72 | private System.Timers.Timer timer1 = new System.Timers.Timer(); | 72 | private System.Timers.Timer timer1 = new System.Timers.Timer(); |
73 | private string ConfigDll = "SimConfig.dll"; | 73 | private string ConfigDll = "SimConfig.dll"; |
74 | private string _physicsEngine = "PhysX"; | ||
74 | public bool sandbox = false; | 75 | public bool sandbox = false; |
75 | public bool loginserver = false; | 76 | public bool loginserver = false; |
76 | 77 | ||
@@ -93,6 +94,11 @@ namespace OpenSim | |||
93 | { | 94 | { |
94 | sim.loginserver = true; | 95 | sim.loginserver = true; |
95 | } | 96 | } |
97 | if(args[i] == "-realphysx") | ||
98 | { | ||
99 | sim._physicsEngine = "RealPhysX"; | ||
100 | OpenSim.world.Avatar.PhysicsEngineFlying = true; | ||
101 | } | ||
96 | } | 102 | } |
97 | 103 | ||
98 | OpenSim_Main.gridServers = new Grid(); | 104 | OpenSim_Main.gridServers = new Grid(); |
@@ -148,7 +154,7 @@ namespace OpenSim | |||
148 | this.physManager = new PhysicsSystem.PhysicsManager(); | 154 | this.physManager = new PhysicsSystem.PhysicsManager(); |
149 | this.physManager.LoadPlugins(); | 155 | this.physManager.LoadPlugins(); |
150 | ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting up messaging system"); | 156 | ServerConsole.MainConsole.Instance.WriteLine("Main.cs:Startup() - Starting up messaging system"); |
151 | local_world.PhysScene = this.physManager.GetPhysicsScene("PhysX"); //should be reading from the config file what physics engine to use | 157 | local_world.PhysScene = this.physManager.GetPhysicsScene(this._physicsEngine); //should be reading from the config file what physics engine to use |
152 | local_world.PhysScene.SetTerrain(local_world.LandMap); | 158 | local_world.PhysScene.SetTerrain(local_world.LandMap); |
153 | 159 | ||
154 | OpenSim_Main.gridServers.AssetServer.SetServerInfo(OpenSim_Main.cfg.AssetURL, OpenSim_Main.cfg.AssetSendKey); | 160 | OpenSim_Main.gridServers.AssetServer.SetServerInfo(OpenSim_Main.cfg.AssetURL, OpenSim_Main.cfg.AssetSendKey); |
diff --git a/src/OpenSimClient.cs b/src/OpenSimClient.cs index 50d8c78..dd698e4 100644 --- a/src/OpenSimClient.cs +++ b/src/OpenSimClient.cs | |||
@@ -135,8 +135,8 @@ namespace OpenSim | |||
135 | { | 135 | { |
136 | if(ent.localid == multipleupdate.ObjectData[ i ].ObjectLocalID) | 136 | if(ent.localid == multipleupdate.ObjectData[ i ].ObjectLocalID) |
137 | { | 137 | { |
138 | ent.position = pos; | 138 | ((OpenSim.world.Primitive)ent).UpdatePosition( pos); |
139 | ((OpenSim.world.Primitive)ent).UpdateFlag = true; | 139 | |
140 | } | 140 | } |
141 | } | 141 | } |
142 | 142 | ||
@@ -191,6 +191,7 @@ namespace OpenSim | |||
191 | OpenSim_Main.local_world.Entities.Remove(this.AgentID); | 191 | OpenSim_Main.local_world.Entities.Remove(this.AgentID); |
192 | } | 192 | } |
193 | //need to do other cleaning up here too | 193 | //need to do other cleaning up here too |
194 | OpenSim_Main.sim.ClientThreads.Remove(this.userEP); | ||
194 | this.ClientThread.Abort(); | 195 | this.ClientThread.Abort(); |
195 | break; | 196 | break; |
196 | case PacketType.ChatFromViewer: | 197 | case PacketType.ChatFromViewer: |
@@ -222,7 +223,7 @@ namespace OpenSim | |||
222 | { | 223 | { |
223 | foreach (Packet packet in NeedAck.Values) | 224 | foreach (Packet packet in NeedAck.Values) |
224 | { | 225 | { |
225 | if (now - packet.TickCount > RESEND_TIMEOUT) | 226 | if ((now - packet.TickCount > RESEND_TIMEOUT) && (!packet.Header.Resent)) |
226 | { | 227 | { |
227 | ServerConsole.MainConsole.Instance.WriteLine("Resending " + packet.Type.ToString() + " packet, " + | 228 | ServerConsole.MainConsole.Instance.WriteLine("Resending " + packet.Type.ToString() + " packet, " + |
228 | (now - packet.TickCount) + "ms have passed"); | 229 | (now - packet.TickCount) + "ms have passed"); |
diff --git a/src/Second-server.sln b/src/Second-server.sln index a460b2a..17c807f 100644 --- a/src/Second-server.sln +++ b/src/Second-server.sln | |||
@@ -19,6 +19,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ServerConsole", "ServerCons | |||
19 | EndProject | 19 | EndProject |
20 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Db4LocalStorage", "LocalStorage\Db4LocalStorage\Db4LocalStorage.csproj", "{74784F23-B0FD-484C-82C1-96C0215733DC}" | 20 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Db4LocalStorage", "LocalStorage\Db4LocalStorage\Db4LocalStorage.csproj", "{74784F23-B0FD-484C-82C1-96C0215733DC}" |
21 | EndProject | 21 | EndProject |
22 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealPhysXplugin", "physics\RealPhysX\RealPhysXplugin\RealPhysXplugin.csproj", "{56C1D214-F389-4228-921A-0A3A0712C159}" | ||
23 | EndProject | ||
22 | Global | 24 | Global |
23 | GlobalSection(SolutionConfigurationPlatforms) = preSolution | 25 | GlobalSection(SolutionConfigurationPlatforms) = preSolution |
24 | Debug|.NET 1.1 = Debug|.NET 1.1 | 26 | Debug|.NET 1.1 = Debug|.NET 1.1 |
@@ -99,6 +101,14 @@ Global | |||
99 | {74784F23-B0FD-484C-82C1-96C0215733DC}.Release|.NET 1.1.ActiveCfg = Release|.NET 1.1 | 101 | {74784F23-B0FD-484C-82C1-96C0215733DC}.Release|.NET 1.1.ActiveCfg = Release|.NET 1.1 |
100 | {74784F23-B0FD-484C-82C1-96C0215733DC}.Release|Any CPU.Build.0 = Release|Any CPU | 102 | {74784F23-B0FD-484C-82C1-96C0215733DC}.Release|Any CPU.Build.0 = Release|Any CPU |
101 | {74784F23-B0FD-484C-82C1-96C0215733DC}.Release|Any CPU.ActiveCfg = Release|Any CPU | 103 | {74784F23-B0FD-484C-82C1-96C0215733DC}.Release|Any CPU.ActiveCfg = Release|Any CPU |
104 | {56C1D214-F389-4228-921A-0A3A0712C159}.Debug|.NET 1.1.Build.0 = Debug|.NET 1.1 | ||
105 | {56C1D214-F389-4228-921A-0A3A0712C159}.Debug|.NET 1.1.ActiveCfg = Debug|.NET 1.1 | ||
106 | {56C1D214-F389-4228-921A-0A3A0712C159}.Debug|Any CPU.Build.0 = Debug|Any CPU | ||
107 | {56C1D214-F389-4228-921A-0A3A0712C159}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | ||
108 | {56C1D214-F389-4228-921A-0A3A0712C159}.Release|.NET 1.1.Build.0 = Release|.NET 1.1 | ||
109 | {56C1D214-F389-4228-921A-0A3A0712C159}.Release|.NET 1.1.ActiveCfg = Release|.NET 1.1 | ||
110 | {56C1D214-F389-4228-921A-0A3A0712C159}.Release|Any CPU.Build.0 = Release|Any CPU | ||
111 | {56C1D214-F389-4228-921A-0A3A0712C159}.Release|Any CPU.ActiveCfg = Release|Any CPU | ||
102 | EndGlobalSection | 112 | EndGlobalSection |
103 | GlobalSection(SolutionProperties) = preSolution | 113 | GlobalSection(SolutionProperties) = preSolution |
104 | HideSolutionNode = FALSE | 114 | HideSolutionNode = FALSE |
diff --git a/src/physics/PhysicsManager.cs b/src/physics/PhysicsManager.cs index 0986501..e5d5bd6 100644 --- a/src/physics/PhysicsManager.cs +++ b/src/physics/PhysicsManager.cs | |||
@@ -110,6 +110,8 @@ namespace PhysicsSystem | |||
110 | { | 110 | { |
111 | public abstract PhysicsActor AddAvatar(PhysicsVector position); | 111 | public abstract PhysicsActor AddAvatar(PhysicsVector position); |
112 | 112 | ||
113 | public abstract PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size); | ||
114 | |||
113 | public abstract void Simulate(float timeStep); | 115 | public abstract void Simulate(float timeStep); |
114 | 116 | ||
115 | public abstract void GetResults(); | 117 | public abstract void GetResults(); |
@@ -140,6 +142,11 @@ namespace PhysicsSystem | |||
140 | { | 142 | { |
141 | get; | 143 | get; |
142 | } | 144 | } |
145 | public abstract bool Flying | ||
146 | { | ||
147 | get; | ||
148 | set; | ||
149 | } | ||
143 | 150 | ||
144 | public abstract void AddForce(PhysicsVector force); | 151 | public abstract void AddForce(PhysicsVector force); |
145 | 152 | ||
diff --git a/src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs b/src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs new file mode 100644 index 0000000..913aae7 --- /dev/null +++ b/src/physics/RealPhysX/RealPhysXplugin/AssemblyInfo.cs | |||
@@ -0,0 +1,31 @@ | |||
1 | using System.Reflection; | ||
2 | using System.Runtime.CompilerServices; | ||
3 | using System.Runtime.InteropServices; | ||
4 | |||
5 | // Information about this assembly is defined by the following | ||
6 | // attributes. | ||
7 | // | ||
8 | // change them to the information which is associated with the assembly | ||
9 | // you compile. | ||
10 | |||
11 | [assembly: AssemblyTitle("RealPhysXplugin")] | ||
12 | [assembly: AssemblyDescription("")] | ||
13 | [assembly: AssemblyConfiguration("")] | ||
14 | [assembly: AssemblyCompany("")] | ||
15 | [assembly: AssemblyProduct("RealPhysXplugin")] | ||
16 | [assembly: AssemblyCopyright("")] | ||
17 | [assembly: AssemblyTrademark("")] | ||
18 | [assembly: AssemblyCulture("")] | ||
19 | |||
20 | // This sets the default COM visibility of types in the assembly to invisible. | ||
21 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. | ||
22 | [assembly: ComVisible(false)] | ||
23 | |||
24 | // The assembly version has following format : | ||
25 | // | ||
26 | // Major.Minor.Build.Revision | ||
27 | // | ||
28 | // You can specify all values by your own or you can build default build and revision | ||
29 | // numbers with the '*' character (the default): | ||
30 | |||
31 | [assembly: AssemblyVersion("1.0.*")] | ||
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs b/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs new file mode 100644 index 0000000..9576a40 --- /dev/null +++ b/src/physics/RealPhysX/RealPhysXplugin/RealPhysX.cs | |||
@@ -0,0 +1,361 @@ | |||
1 | /* | ||
2 | * Copyright (c) OpenSim project, http://sim.opensecondlife.org/ | ||
3 | * | ||
4 | * Redistribution and use in source and binary forms, with or without | ||
5 | * modification, are permitted provided that the following conditions are met: | ||
6 | * * Redistributions of source code must retain the above copyright | ||
7 | * notice, this list of conditions and the following disclaimer. | ||
8 | * * Redistributions in binary form must reproduce the above copyright | ||
9 | * notice, this list of conditions and the following disclaimer in the | ||
10 | * documentation and/or other materials provided with the distribution. | ||
11 | * * Neither the name of the <organization> nor the | ||
12 | * names of its contributors may be used to endorse or promote products | ||
13 | * derived from this software without specific prior written permission. | ||
14 | * | ||
15 | * THIS SOFTWARE IS PROVIDED BY <copyright holder> ``AS IS'' AND ANY | ||
16 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
17 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
18 | * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY | ||
19 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
20 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
21 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
22 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
23 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
24 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
25 | * | ||
26 | */ | ||
27 | /* | ||
28 | * Copyright (c) OpenSim project, http://sim.opensecondlife.org/ | ||
29 | * | ||
30 | * Redistribution and use in source and binary forms, with or without | ||
31 | * modification, are permitted provided that the following conditions are met: | ||
32 | * * Redistributions of source code must retain the above copyright | ||
33 | * notice, this list of conditions and the following disclaimer. | ||
34 | * * Redistributions in binary form must reproduce the above copyright | ||
35 | * notice, this list of conditions and the following disclaimer in the | ||
36 | * documentation and/or other materials provided with the distribution. | ||
37 | * * Neither the name of the <organization> nor the | ||
38 | * names of its contributors may be used to endorse or promote products | ||
39 | * derived from this software without specific prior written permission. | ||
40 | * | ||
41 | * THIS SOFTWARE IS PROVIDED BY <copyright holder> ``AS IS'' AND ANY | ||
42 | * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
43 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
44 | * DISCLAIMED. IN NO EVENT SHALL <copyright holder> BE LIABLE FOR ANY | ||
45 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
46 | * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
47 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
48 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
49 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
50 | * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
51 | * | ||
52 | */ | ||
53 | using System; | ||
54 | using System.Collections.Generic; | ||
55 | using PhysicsSystem; | ||
56 | using PhysXWrapper; | ||
57 | |||
58 | namespace PhysXplugin | ||
59 | { | ||
60 | /// <summary> | ||
61 | /// Will be the PhysX plugin but for now will be a very basic physics engine | ||
62 | /// </summary> | ||
63 | public class PhysXPlugin : IPhysicsPlugin | ||
64 | { | ||
65 | private PhysXScene _mScene; | ||
66 | |||
67 | public PhysXPlugin() | ||
68 | { | ||
69 | |||
70 | } | ||
71 | |||
72 | public bool Init() | ||
73 | { | ||
74 | return true; | ||
75 | } | ||
76 | |||
77 | public PhysicsScene GetScene() | ||
78 | { | ||
79 | if(_mScene == null) | ||
80 | { | ||
81 | _mScene = new PhysXScene(); | ||
82 | } | ||
83 | return(_mScene); | ||
84 | } | ||
85 | |||
86 | public string GetName() | ||
87 | { | ||
88 | return("RealPhysX"); | ||
89 | } | ||
90 | |||
91 | public void Dispose() | ||
92 | { | ||
93 | |||
94 | } | ||
95 | } | ||
96 | |||
97 | public class PhysXScene :PhysicsScene | ||
98 | { | ||
99 | private List<PhysXCharacter> _characters = new List<PhysXCharacter>(); | ||
100 | private List<PhysXPrim> _prims = new List<PhysXPrim>(); | ||
101 | private float[] _heightMap; | ||
102 | private NxPhysicsSDK mySdk; | ||
103 | private NxScene scene; | ||
104 | |||
105 | public PhysXScene() | ||
106 | { | ||
107 | mySdk = NxPhysicsSDK.CreateSDK(); | ||
108 | scene = mySdk.CreateScene(); | ||
109 | |||
110 | } | ||
111 | |||
112 | public override PhysicsActor AddAvatar(PhysicsVector position) | ||
113 | { | ||
114 | Vec3 pos = new Vec3(); | ||
115 | pos.X = position.X; | ||
116 | pos.Y = position.Y; | ||
117 | pos.Z = position.Z; | ||
118 | PhysXCharacter act = new PhysXCharacter( scene.AddCharacter(pos)); | ||
119 | act.Position = position; | ||
120 | _characters.Add(act); | ||
121 | return act; | ||
122 | } | ||
123 | |||
124 | public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) | ||
125 | { | ||
126 | Vec3 pos = new Vec3(); | ||
127 | pos.X = position.X; | ||
128 | pos.Y = position.Y; | ||
129 | pos.Z = position.Z; | ||
130 | Vec3 siz = new Vec3(); | ||
131 | siz.X = size.X; | ||
132 | siz.Y = size.Y; | ||
133 | siz.Z = size.Z; | ||
134 | PhysXPrim act = new PhysXPrim( scene.AddNewBox(pos, siz)); | ||
135 | _prims.Add(act); | ||
136 | return act; | ||
137 | } | ||
138 | public override void Simulate(float timeStep) | ||
139 | { | ||
140 | foreach (PhysXCharacter actor in _characters) | ||
141 | { | ||
142 | actor.Move(timeStep); | ||
143 | } | ||
144 | scene.Simulate(timeStep); | ||
145 | scene.FetchResults(); | ||
146 | scene.UpdateControllers(); | ||
147 | |||
148 | foreach (PhysXCharacter actor in _characters) | ||
149 | { | ||
150 | actor.UpdatePosition(); | ||
151 | } | ||
152 | |||
153 | } | ||
154 | |||
155 | public override void GetResults() | ||
156 | { | ||
157 | |||
158 | } | ||
159 | |||
160 | public override bool IsThreaded | ||
161 | { | ||
162 | get | ||
163 | { | ||
164 | return(false); // for now we won't be multithreaded | ||
165 | } | ||
166 | } | ||
167 | |||
168 | public override void SetTerrain(float[] heightMap) | ||
169 | { | ||
170 | this._heightMap = heightMap; | ||
171 | this.scene.AddTerrain(heightMap); | ||
172 | } | ||
173 | } | ||
174 | |||
175 | public class PhysXCharacter : PhysicsActor | ||
176 | { | ||
177 | private PhysicsVector _position; | ||
178 | private PhysicsVector _velocity; | ||
179 | private PhysicsVector _acceleration; | ||
180 | private NxCharacter _character; | ||
181 | private bool flying; | ||
182 | |||
183 | public PhysXCharacter(NxCharacter character) | ||
184 | { | ||
185 | _velocity = new PhysicsVector(); | ||
186 | _position = new PhysicsVector(); | ||
187 | _acceleration = new PhysicsVector(); | ||
188 | _character = character; | ||
189 | } | ||
190 | |||
191 | public override bool Flying | ||
192 | { | ||
193 | get | ||
194 | { | ||
195 | return flying; | ||
196 | } | ||
197 | set | ||
198 | { | ||
199 | flying = value; | ||
200 | } | ||
201 | } | ||
202 | |||
203 | public override PhysicsVector Position | ||
204 | { | ||
205 | get | ||
206 | { | ||
207 | return _position; | ||
208 | } | ||
209 | set | ||
210 | { | ||
211 | _position = value; | ||
212 | } | ||
213 | } | ||
214 | |||
215 | public override PhysicsVector Velocity | ||
216 | { | ||
217 | get | ||
218 | { | ||
219 | return _velocity; | ||
220 | } | ||
221 | set | ||
222 | { | ||
223 | _velocity = value; | ||
224 | } | ||
225 | } | ||
226 | |||
227 | public override PhysicsVector Acceleration | ||
228 | { | ||
229 | get | ||
230 | { | ||
231 | return _acceleration; | ||
232 | } | ||
233 | |||
234 | } | ||
235 | public void SetAcceleration (PhysicsVector accel) | ||
236 | { | ||
237 | this._acceleration = accel; | ||
238 | } | ||
239 | |||
240 | public override void AddForce(PhysicsVector force) | ||
241 | { | ||
242 | |||
243 | } | ||
244 | |||
245 | public override void SetMomentum(PhysicsVector momentum) | ||
246 | { | ||
247 | |||
248 | } | ||
249 | |||
250 | public void Move(float timeStep) | ||
251 | { | ||
252 | Vec3 vec = new Vec3(); | ||
253 | vec.X = this._velocity.X * timeStep; | ||
254 | vec.Y = this._velocity.Y * timeStep; | ||
255 | if(flying) | ||
256 | { | ||
257 | vec.Z = ( this._velocity.Z) * timeStep; | ||
258 | } | ||
259 | else | ||
260 | { | ||
261 | vec.Z = (-9.8f + this._velocity.Z) * timeStep; | ||
262 | } | ||
263 | this._character.Move(vec); | ||
264 | } | ||
265 | |||
266 | public void UpdatePosition() | ||
267 | { | ||
268 | Vec3 vec = this._character.Position; | ||
269 | this._position.X = vec.X; | ||
270 | this._position.Y = vec.Y; | ||
271 | this._position.Z = vec.Z; | ||
272 | } | ||
273 | } | ||
274 | |||
275 | public class PhysXPrim : PhysicsActor | ||
276 | { | ||
277 | private PhysicsVector _position; | ||
278 | private PhysicsVector _velocity; | ||
279 | private PhysicsVector _acceleration; | ||
280 | private NxActor _prim; | ||
281 | |||
282 | public PhysXPrim(NxActor prim) | ||
283 | { | ||
284 | _velocity = new PhysicsVector(); | ||
285 | _position = new PhysicsVector(); | ||
286 | _acceleration = new PhysicsVector(); | ||
287 | _prim = prim; | ||
288 | } | ||
289 | public override bool Flying | ||
290 | { | ||
291 | get | ||
292 | { | ||
293 | return false; //no flying prims for you | ||
294 | } | ||
295 | set | ||
296 | { | ||
297 | |||
298 | } | ||
299 | } | ||
300 | public override PhysicsVector Position | ||
301 | { | ||
302 | get | ||
303 | { | ||
304 | PhysicsVector pos = new PhysicsVector(); | ||
305 | Vec3 vec = this._prim.Position; | ||
306 | pos.X = vec.X; | ||
307 | pos.Y = vec.Y; | ||
308 | pos.Z = vec.Z; | ||
309 | return pos; | ||
310 | |||
311 | } | ||
312 | set | ||
313 | { | ||
314 | PhysicsVector vec = value; | ||
315 | Vec3 pos = new Vec3(); | ||
316 | pos.X = vec.X; | ||
317 | pos.Y = vec.Y; | ||
318 | pos.Z = vec.Z; | ||
319 | this._prim.Position = pos; | ||
320 | } | ||
321 | } | ||
322 | |||
323 | public override PhysicsVector Velocity | ||
324 | { | ||
325 | get | ||
326 | { | ||
327 | return _velocity; | ||
328 | } | ||
329 | set | ||
330 | { | ||
331 | _velocity = value; | ||
332 | } | ||
333 | } | ||
334 | |||
335 | public override PhysicsVector Acceleration | ||
336 | { | ||
337 | get | ||
338 | { | ||
339 | return _acceleration; | ||
340 | } | ||
341 | |||
342 | } | ||
343 | public void SetAcceleration (PhysicsVector accel) | ||
344 | { | ||
345 | this._acceleration = accel; | ||
346 | } | ||
347 | |||
348 | public override void AddForce(PhysicsVector force) | ||
349 | { | ||
350 | |||
351 | } | ||
352 | |||
353 | public override void SetMomentum(PhysicsVector momentum) | ||
354 | { | ||
355 | |||
356 | } | ||
357 | |||
358 | |||
359 | } | ||
360 | |||
361 | } | ||
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj new file mode 100644 index 0000000..ae7bb79 --- /dev/null +++ b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.csproj | |||
@@ -0,0 +1,45 @@ | |||
1 | <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | ||
2 | <PropertyGroup> | ||
3 | <OutputType>Library</OutputType> | ||
4 | <RootNamespace>RealPhysXplugin</RootNamespace> | ||
5 | <AssemblyName>RealPhysXplugin</AssemblyName> | ||
6 | <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | ||
7 | <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | ||
8 | <ProjectGuid>{56C1D214-F389-4228-921A-0A3A0712C159}</ProjectGuid> | ||
9 | </PropertyGroup> | ||
10 | <PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> | ||
11 | <OutputPath>bin\Debug\</OutputPath> | ||
12 | <Optimize>False</Optimize> | ||
13 | <DefineConstants>DEBUG;TRACE</DefineConstants> | ||
14 | <DebugSymbols>True</DebugSymbols> | ||
15 | <DebugType>Full</DebugType> | ||
16 | <CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> | ||
17 | </PropertyGroup> | ||
18 | <PropertyGroup Condition=" '$(Configuration)' == 'Release' "> | ||
19 | <OutputPath>bin\Release\</OutputPath> | ||
20 | <Optimize>True</Optimize> | ||
21 | <DefineConstants>TRACE</DefineConstants> | ||
22 | <DebugSymbols>False</DebugSymbols> | ||
23 | <DebugType>None</DebugType> | ||
24 | <CheckForOverflowUnderflow>False</CheckForOverflowUnderflow> | ||
25 | </PropertyGroup> | ||
26 | <ItemGroup> | ||
27 | <Reference Include="System" /> | ||
28 | <Reference Include="System.Xml" /> | ||
29 | <Reference Include="PhysX_Wrapper_Dotnet"> | ||
30 | <HintPath>..\..\..\..\bin\PhysX_Wrapper_Dotnet.dll</HintPath> | ||
31 | <SpecificVersion>False</SpecificVersion> | ||
32 | </Reference> | ||
33 | </ItemGroup> | ||
34 | <ItemGroup> | ||
35 | <Compile Include="RealPhysX.cs" /> | ||
36 | <Compile Include="AssemblyInfo.cs" /> | ||
37 | </ItemGroup> | ||
38 | <ItemGroup> | ||
39 | <ProjectReference Include="..\..\PhysicsManager.csproj"> | ||
40 | <Project>{3C86A846-7977-4EE7-A8DC-DD487FA5DC2B}</Project> | ||
41 | <Name>PhysicsManager</Name> | ||
42 | </ProjectReference> | ||
43 | </ItemGroup> | ||
44 | <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> | ||
45 | </Project> \ No newline at end of file | ||
diff --git a/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln new file mode 100644 index 0000000..34f87e6 --- /dev/null +++ b/src/physics/RealPhysX/RealPhysXplugin/RealPhysXplugin.sln | |||
@@ -0,0 +1,7 @@ | |||
1 |  | ||
2 | Microsoft Visual Studio Solution File, Format Version 9.00 | ||
3 | # SharpDevelop 2.1.0.2017 | ||
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "RealPhysXplugin", "RealPhysXplugin.csproj", "{56C1D214-F389-4228-921A-0A3A0712C159}" | ||
5 | EndProject | ||
6 | Global | ||
7 | EndGlobal | ||
diff --git a/src/physics/plugins/PhysXplugin.cs b/src/physics/plugins/PhysXplugin.cs index 58a82fb..8c09dc8 100644 --- a/src/physics/plugins/PhysXplugin.cs +++ b/src/physics/plugins/PhysXplugin.cs | |||
@@ -85,14 +85,30 @@ namespace PhysXplugin | |||
85 | return act; | 85 | return act; |
86 | } | 86 | } |
87 | 87 | ||
88 | public override PhysicsActor AddPrim(PhysicsVector position, PhysicsVector size) | ||
89 | { | ||
90 | return null; | ||
91 | } | ||
92 | |||
88 | public override void Simulate(float timeStep) | 93 | public override void Simulate(float timeStep) |
89 | { | 94 | { |
90 | foreach (PhysXActor actor in _actors) | 95 | foreach (PhysXActor actor in _actors) |
91 | { | 96 | { |
92 | actor.Position.X = actor.Position.X + actor.Velocity.X * timeStep; | 97 | actor.Position.X = actor.Position.X + (actor.Velocity.X * timeStep); |
93 | actor.Position.Y = actor.Position.Y + actor.Velocity.Y * timeStep; | 98 | actor.Position.Y = actor.Position.Y + (actor.Velocity.Y * timeStep); |
94 | actor.Position.Z = actor.Position.Z + actor.Velocity.Z * timeStep; | 99 | actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep); |
95 | actor.Position.Z = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1; | 100 | /*if(actor.Flying) |
101 | { | ||
102 | actor.Position.Z = actor.Position.Z + (actor.Velocity.Z * timeStep); | ||
103 | } | ||
104 | else | ||
105 | { | ||
106 | actor.Position.Z = actor.Position.Z + ((-9.8f + actor.Velocity.Z) * timeStep); | ||
107 | } | ||
108 | if(actor.Position.Z < (_heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1)) | ||
109 | {*/ | ||
110 | actor.Position.Z = _heightMap[(int)actor.Position.Y * 256 + (int)actor.Position.X]+1; | ||
111 | //} | ||
96 | if(actor.Position.X<0) | 112 | if(actor.Position.X<0) |
97 | { | 113 | { |
98 | actor.Position.X = 0; | 114 | actor.Position.X = 0; |
@@ -140,7 +156,7 @@ namespace PhysXplugin | |||
140 | private PhysicsVector _position; | 156 | private PhysicsVector _position; |
141 | private PhysicsVector _velocity; | 157 | private PhysicsVector _velocity; |
142 | private PhysicsVector _acceleration; | 158 | private PhysicsVector _acceleration; |
143 | 159 | private bool flying; | |
144 | public PhysXActor() | 160 | public PhysXActor() |
145 | { | 161 | { |
146 | _velocity = new PhysicsVector(); | 162 | _velocity = new PhysicsVector(); |
@@ -148,6 +164,18 @@ namespace PhysXplugin | |||
148 | _acceleration = new PhysicsVector(); | 164 | _acceleration = new PhysicsVector(); |
149 | } | 165 | } |
150 | 166 | ||
167 | public override bool Flying | ||
168 | { | ||
169 | get | ||
170 | { | ||
171 | return false; | ||
172 | } | ||
173 | set | ||
174 | { | ||
175 | flying= value; | ||
176 | } | ||
177 | } | ||
178 | |||
151 | public override PhysicsVector Position | 179 | public override PhysicsVector Position |
152 | { | 180 | { |
153 | get | 181 | get |
diff --git a/src/world/Avatar.cs b/src/world/Avatar.cs index c09c008..facfeee 100644 --- a/src/world/Avatar.cs +++ b/src/world/Avatar.cs | |||
@@ -11,15 +11,17 @@ namespace OpenSim.world | |||
11 | { | 11 | { |
12 | public class Avatar : Entity | 12 | public class Avatar : Entity |
13 | { | 13 | { |
14 | public static bool PhysicsEngineFlying; | ||
14 | public string firstname; | 15 | public string firstname; |
15 | public string lastname; | 16 | public string lastname; |
16 | public OpenSimClient ControllingClient; | 17 | public OpenSimClient ControllingClient; |
17 | private PhysicsActor _physActor; | 18 | private PhysicsActor _physActor; |
18 | private static libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock AvatarTemplate; | 19 | private static libsecondlife.Packets.ObjectUpdatePacket.ObjectDataBlock AvatarTemplate; |
19 | private bool updateflag; | 20 | private bool updateflag; |
20 | private bool walking; | 21 | private byte movementflag; |
21 | private List<NewForce> forcesList = new List<NewForce>(); | 22 | private List<NewForce> forcesList = new List<NewForce>(); |
22 | private short _updateCount; | 23 | private short _updateCount; |
24 | private Axiom.MathLib.Quaternion bodyRot; | ||
23 | 25 | ||
24 | public Avatar(OpenSimClient TheClient) { | 26 | public Avatar(OpenSimClient TheClient) { |
25 | ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)"); | 27 | ServerConsole.MainConsole.Instance.WriteLine("Avatar.cs - Loading details from grid (DUMMY)"); |
@@ -77,14 +79,14 @@ namespace OpenSim.world | |||
77 | } | 79 | } |
78 | 80 | ||
79 | updateflag =false; | 81 | updateflag =false; |
80 | this._updateCount = 0; | 82 | //this._updateCount = 0; |
81 | } | 83 | } |
82 | else | 84 | else |
83 | { | 85 | { |
84 | if(walking) | 86 | //if((movementflag & 1) !=0) |
85 | { | 87 | //{ |
86 | _updateCount++; | 88 | _updateCount++; |
87 | if(_updateCount>3) | 89 | if(( (!PhysicsEngineFlying) && (_updateCount>3)) || (_updateCount>0)) |
88 | { | 90 | { |
89 | //It has been a while since last update was sent so lets send one. | 91 | //It has been a while since last update was sent so lets send one. |
90 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock(); | 92 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock terseBlock = CreateTerseBlock(); |
@@ -98,7 +100,7 @@ namespace OpenSim.world | |||
98 | } | 100 | } |
99 | _updateCount = 0; | 101 | _updateCount = 0; |
100 | } | 102 | } |
101 | } | 103 | //} |
102 | } | 104 | } |
103 | } | 105 | } |
104 | 106 | ||
@@ -249,36 +251,111 @@ namespace OpenSim.world | |||
249 | } | 251 | } |
250 | 252 | ||
251 | public void HandleUpdate(AgentUpdatePacket pack) { | 253 | public void HandleUpdate(AgentUpdatePacket pack) { |
252 | if(((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_AT_POS) !=0) { | 254 | if(((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_FLY) !=0) |
253 | if(!walking) | 255 | { |
256 | this._physActor.Flying = true; | ||
257 | } | ||
258 | else | ||
259 | { | ||
260 | this._physActor.Flying = false; | ||
261 | } | ||
262 | if(((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_AT_POS) !=0) { | ||
263 | Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z); | ||
264 | if(((movementflag & 1) ==0) || (q!= this.bodyRot)) | ||
254 | { | 265 | { |
255 | //we should add a new force to the list | 266 | //we should add a new force to the list |
256 | // but for now we will deal with velocities | 267 | // but for now we will deal with velocities |
257 | NewForce newVelocity = new NewForce(); | 268 | NewForce newVelocity = new NewForce(); |
258 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0); | 269 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(1, 0, 0); |
259 | Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z); | ||
260 | Axiom.MathLib.Vector3 direc = q * v3; | 270 | Axiom.MathLib.Vector3 direc = q * v3; |
261 | direc.Normalize(); | 271 | direc.Normalize(); |
262 | 272 | ||
263 | //work out velocity for sim physics system | 273 | //work out velocity for sim physics system |
264 | direc = direc * ((0.03f) * 128f); | 274 | direc = direc * ((0.03f) * 128f); |
275 | if(this._physActor.Flying) | ||
276 | direc *=2; | ||
277 | |||
278 | newVelocity.X = direc.x; | ||
279 | newVelocity.Y = direc.y; | ||
280 | newVelocity.Z = direc.z; | ||
281 | this.forcesList.Add(newVelocity); | ||
282 | movementflag = 1; | ||
283 | this.bodyRot = q; | ||
284 | } | ||
285 | } | ||
286 | else if((((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_UP_POS) !=0) &&(PhysicsEngineFlying)) { | ||
287 | if(((movementflag & 2) ==0) && this._physActor.Flying) | ||
288 | { | ||
289 | //we should add a new force to the list | ||
290 | // but for now we will deal with velocities | ||
291 | NewForce newVelocity = new NewForce(); | ||
292 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(0, 0, 1); | ||
293 | Axiom.MathLib.Vector3 direc = v3; | ||
294 | direc.Normalize(); | ||
295 | |||
296 | //work out velocity for sim physics system | ||
297 | direc = direc * ((0.03f) * 128f *2); | ||
298 | newVelocity.X = direc.x; | ||
299 | newVelocity.Y = direc.y; | ||
300 | newVelocity.Z = direc.z; | ||
301 | this.forcesList.Add(newVelocity); | ||
302 | movementflag = 2; | ||
303 | } | ||
304 | } | ||
305 | else if((((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_UP_NEG) !=0) && (PhysicsEngineFlying)) { | ||
306 | if(((movementflag & 4) ==0) && this._physActor.Flying) | ||
307 | { | ||
308 | //we should add a new force to the list | ||
309 | // but for now we will deal with velocities | ||
310 | NewForce newVelocity = new NewForce(); | ||
311 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(0, 0, -1); | ||
312 | //Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z); | ||
313 | Axiom.MathLib.Vector3 direc = v3; | ||
314 | direc.Normalize(); | ||
315 | |||
316 | //work out velocity for sim physics system | ||
317 | direc = direc * ((0.03f) * 128f *2); | ||
318 | newVelocity.X = direc.x; | ||
319 | newVelocity.Y = direc.y; | ||
320 | newVelocity.Z = direc.z; | ||
321 | this.forcesList.Add(newVelocity); | ||
322 | movementflag = 4; | ||
323 | } | ||
324 | } | ||
325 | else if(((uint)pack.AgentData.ControlFlags & (uint)MainAvatar.AgentUpdateFlags.AGENT_CONTROL_AT_NEG) !=0) { | ||
326 | Axiom.MathLib.Quaternion q = new Axiom.MathLib.Quaternion(pack.AgentData.BodyRotation.W, pack.AgentData.BodyRotation.X, pack.AgentData.BodyRotation.Y, pack.AgentData.BodyRotation.Z); | ||
327 | if(((movementflag & 8) ==0) || (q!= this.bodyRot)) | ||
328 | { | ||
329 | //we should add a new force to the list | ||
330 | // but for now we will deal with velocities | ||
331 | NewForce newVelocity = new NewForce(); | ||
332 | Axiom.MathLib.Vector3 v3 = new Axiom.MathLib.Vector3(-1, 0, 0); | ||
333 | Axiom.MathLib.Vector3 direc = q * v3; | ||
334 | direc.Normalize(); | ||
335 | |||
336 | //work out velocity for sim physics system | ||
337 | direc = direc * ((0.03f) * 128f); | ||
338 | if(this._physActor.Flying) | ||
339 | direc *=2; | ||
340 | |||
265 | newVelocity.X = direc.x; | 341 | newVelocity.X = direc.x; |
266 | newVelocity.Y = direc.y; | 342 | newVelocity.Y = direc.y; |
267 | newVelocity.Z = direc.z; | 343 | newVelocity.Z = direc.z; |
268 | this.forcesList.Add(newVelocity); | 344 | this.forcesList.Add(newVelocity); |
269 | walking=true; | 345 | movementflag = 8; |
346 | this.bodyRot = q; | ||
270 | } | 347 | } |
271 | } | 348 | } |
272 | else | 349 | else |
273 | { | 350 | { |
274 | if(walking) | 351 | if((movementflag) !=0) |
275 | { | 352 | { |
276 | NewForce newVelocity = new NewForce(); | 353 | NewForce newVelocity = new NewForce(); |
277 | newVelocity.X = 0; | 354 | newVelocity.X = 0; |
278 | newVelocity.Y = 0; | 355 | newVelocity.Y = 0; |
279 | newVelocity.Z = 0; | 356 | newVelocity.Z = 0; |
280 | this.forcesList.Add(newVelocity); | 357 | this.forcesList.Add(newVelocity); |
281 | walking = false; | 358 | movementflag = 0; |
282 | } | 359 | } |
283 | } | 360 | } |
284 | } | 361 | } |
diff --git a/src/world/Primitive.cs b/src/world/Primitive.cs index 0d7d951..6be33ef 100644 --- a/src/world/Primitive.cs +++ b/src/world/Primitive.cs | |||
@@ -5,6 +5,7 @@ using OpenSim.types; | |||
5 | using libsecondlife; | 5 | using libsecondlife; |
6 | using libsecondlife.Packets; | 6 | using libsecondlife.Packets; |
7 | using GridInterfaces; | 7 | using GridInterfaces; |
8 | using PhysicsSystem; | ||
8 | 9 | ||
9 | namespace OpenSim.world | 10 | namespace OpenSim.world |
10 | { | 11 | { |
@@ -16,8 +17,21 @@ namespace OpenSim.world | |||
16 | protected bool newPrimFlag; | 17 | protected bool newPrimFlag; |
17 | protected bool updateFlag; | 18 | protected bool updateFlag; |
18 | protected bool dirtyFlag; | 19 | protected bool dirtyFlag; |
19 | protected ObjectUpdatePacket OurPacket; | 20 | private ObjectUpdatePacket OurPacket; |
21 | private PhysicsActor _physActor; | ||
22 | private bool physicsEnabled; | ||
20 | 23 | ||
24 | public bool PhysicsEnabled | ||
25 | { | ||
26 | get | ||
27 | { | ||
28 | return physicsEnabled; | ||
29 | } | ||
30 | set | ||
31 | { | ||
32 | physicsEnabled = value; | ||
33 | } | ||
34 | } | ||
21 | public bool UpdateFlag | 35 | public bool UpdateFlag |
22 | { | 36 | { |
23 | get | 37 | get |
@@ -41,6 +55,14 @@ namespace OpenSim.world | |||
41 | return this.primData.Scale; | 55 | return this.primData.Scale; |
42 | } | 56 | } |
43 | } | 57 | } |
58 | public PhysicsActor PhysActor | ||
59 | { | ||
60 | set | ||
61 | { | ||
62 | this._physActor = value; | ||
63 | } | ||
64 | } | ||
65 | |||
44 | public Primitive() | 66 | public Primitive() |
45 | { | 67 | { |
46 | mesh_cutbegin = 0.0f; | 68 | mesh_cutbegin = 0.0f; |
@@ -61,6 +83,16 @@ namespace OpenSim.world | |||
61 | return mesh; | 83 | return mesh; |
62 | } | 84 | } |
63 | 85 | ||
86 | public void UpdatePosition( LLVector3 pos) | ||
87 | { | ||
88 | this.position = pos; | ||
89 | if(this._physActor != null && this.physicsEnabled) | ||
90 | { | ||
91 | this._physActor.Position = new PhysicsVector(pos.X, pos.Y, pos.Z); | ||
92 | } | ||
93 | this.updateFlag = true; | ||
94 | } | ||
95 | |||
64 | public override void update() | 96 | public override void update() |
65 | { | 97 | { |
66 | if(this.newPrimFlag) | 98 | if(this.newPrimFlag) |
@@ -89,13 +121,39 @@ namespace OpenSim.world | |||
89 | } | 121 | } |
90 | this.dirtyFlag = false; | 122 | this.dirtyFlag = false; |
91 | } | 123 | } |
92 | 124 | else | |
125 | { | ||
126 | if(this._physActor != null && this.physicsEnabled) | ||
127 | { | ||
128 | ImprovedTerseObjectUpdatePacket terse = new ImprovedTerseObjectUpdatePacket(); | ||
129 | terse.RegionData.RegionHandle = OpenSim_Main.cfg.RegionHandle; // FIXME | ||
130 | terse.RegionData.TimeDilation = 64096; | ||
131 | terse.ObjectData = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock[1]; | ||
132 | terse.ObjectData[0] = this.CreateImprovedBlock(); | ||
133 | foreach(OpenSimClient client in OpenSim_Main.sim.ClientThreads.Values) { | ||
134 | client.OutPacket(terse); | ||
135 | } | ||
136 | } | ||
137 | } | ||
93 | } | 138 | } |
94 | 139 | ||
95 | public void UpdateClient(OpenSimClient RemoteClient) | 140 | public void UpdateClient(OpenSimClient RemoteClient) |
96 | { | 141 | { |
97 | byte[] pb = this.position.GetBytes(); | 142 | |
143 | LLVector3 lPos; | ||
144 | if( this._physActor != null && this.physicsEnabled) | ||
145 | { | ||
146 | PhysicsVector pPos = this._physActor.Position; | ||
147 | lPos = new LLVector3( pPos.X, pPos.Y, pPos.Z); | ||
148 | } | ||
149 | else | ||
150 | { | ||
151 | lPos = this.position; | ||
152 | } | ||
153 | byte[] pb = lPos.GetBytes(); | ||
98 | Array.Copy(pb, 0, OurPacket.ObjectData[0].ObjectData, 0, pb.Length); | 154 | Array.Copy(pb, 0, OurPacket.ObjectData[0].ObjectData, 0, pb.Length); |
155 | |||
156 | // OurPacket should be update with the follwing in updateShape() rather than having to do it here | ||
99 | OurPacket.ObjectData[0].OwnerID = this.primData.OwnerID; | 157 | OurPacket.ObjectData[0].OwnerID = this.primData.OwnerID; |
100 | OurPacket.ObjectData[0].PCode = this.primData.PCode; | 158 | OurPacket.ObjectData[0].PCode = this.primData.PCode; |
101 | OurPacket.ObjectData[0].PathBegin = this.primData.PathBegin; | 159 | OurPacket.ObjectData[0].PathBegin = this.primData.PathBegin; |
@@ -137,7 +195,6 @@ namespace OpenSim.world | |||
137 | this.primData.PathCurve = addPacket.PathCurve; | 195 | this.primData.PathCurve = addPacket.PathCurve; |
138 | this.primData.ProfileCurve = addPacket.ProfileCurve; | 196 | this.primData.ProfileCurve = addPacket.ProfileCurve; |
139 | this.primData.ProfileHollow = addPacket.ProfileHollow; | 197 | this.primData.ProfileHollow = addPacket.ProfileHollow; |
140 | |||
141 | this.primData.PathRadiusOffset = addPacket.PathRadiusOffset; | 198 | this.primData.PathRadiusOffset = addPacket.PathRadiusOffset; |
142 | this.primData.PathRevolutions = addPacket.PathRevolutions; | 199 | this.primData.PathRevolutions = addPacket.PathRevolutions; |
143 | this.primData.PathTaperX = addPacket.PathTaperX; | 200 | this.primData.PathTaperX = addPacket.PathTaperX; |
@@ -145,7 +202,6 @@ namespace OpenSim.world | |||
145 | this.primData.PathTwist = addPacket.PathTwist; | 202 | this.primData.PathTwist = addPacket.PathTwist; |
146 | this.primData.PathTwistBegin =addPacket.PathTwistBegin; | 203 | this.primData.PathTwistBegin =addPacket.PathTwistBegin; |
147 | this.dirtyFlag = true; | 204 | this.dirtyFlag = true; |
148 | |||
149 | } | 205 | } |
150 | 206 | ||
151 | public void CreateFromPacket( ObjectAddPacket addPacket, LLUUID agentID, uint localID) | 207 | public void CreateFromPacket( ObjectAddPacket addPacket, LLUUID agentID, uint localID) |
@@ -162,7 +218,6 @@ namespace OpenSim.world | |||
162 | objupdate.ObjectData[0].ExtraParams = new byte[1]; | 218 | objupdate.ObjectData[0].ExtraParams = new byte[1]; |
163 | objupdate.ObjectData[0].MediaURL = new byte[0]; | 219 | objupdate.ObjectData[0].MediaURL = new byte[0]; |
164 | objupdate.ObjectData[0].NameValue = new byte[0]; | 220 | objupdate.ObjectData[0].NameValue = new byte[0]; |
165 | objupdate.ObjectData[0].PSBlock = new byte[0]; | ||
166 | objupdate.ObjectData[0].Text = new byte[0]; | 221 | objupdate.ObjectData[0].Text = new byte[0]; |
167 | objupdate.ObjectData[0].TextColor = new byte[4]; | 222 | objupdate.ObjectData[0].TextColor = new byte[4]; |
168 | objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0,0,0); | 223 | objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0,0,0); |
@@ -232,7 +287,6 @@ namespace OpenSim.world | |||
232 | objupdate.ObjectData[0].ExtraParams = new byte[1]; | 287 | objupdate.ObjectData[0].ExtraParams = new byte[1]; |
233 | objupdate.ObjectData[0].MediaURL = new byte[0]; | 288 | objupdate.ObjectData[0].MediaURL = new byte[0]; |
234 | objupdate.ObjectData[0].NameValue = new byte[0]; | 289 | objupdate.ObjectData[0].NameValue = new byte[0]; |
235 | objupdate.ObjectData[0].PSBlock = new byte[0]; | ||
236 | objupdate.ObjectData[0].Text = new byte[0]; | 290 | objupdate.ObjectData[0].Text = new byte[0]; |
237 | objupdate.ObjectData[0].TextColor = new byte[4]; | 291 | objupdate.ObjectData[0].TextColor = new byte[4]; |
238 | objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0,0,0); | 292 | objupdate.ObjectData[0].JointAxisOrAnchor = new LLVector3(0,0,0); |
@@ -291,7 +345,6 @@ namespace OpenSim.world | |||
291 | uint ID = this.localid; | 345 | uint ID = this.localid; |
292 | byte[] bytes = new byte[60]; | 346 | byte[] bytes = new byte[60]; |
293 | 347 | ||
294 | |||
295 | int i = 0; | 348 | int i = 0; |
296 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); | 349 | ImprovedTerseObjectUpdatePacket.ObjectDataBlock dat = new ImprovedTerseObjectUpdatePacket.ObjectDataBlock(); |
297 | dat.TextureEntry = this.OurPacket.ObjectData[0].TextureEntry; | 350 | dat.TextureEntry = this.OurPacket.ObjectData[0].TextureEntry; |
@@ -302,8 +355,18 @@ namespace OpenSim.world | |||
302 | bytes[i++] = (byte)((ID >> 24) % 256); | 355 | bytes[i++] = (byte)((ID >> 24) % 256); |
303 | bytes[i++]= 0; | 356 | bytes[i++]= 0; |
304 | bytes[i++]= 0; | 357 | bytes[i++]= 0; |
305 | 358 | ||
306 | byte[] pb = this.position.GetBytes(); | 359 | LLVector3 lPos; |
360 | if( this._physActor != null && this.physicsEnabled) | ||
361 | { | ||
362 | PhysicsVector pPos = this._physActor.Position; | ||
363 | lPos = new LLVector3( pPos.X, pPos.Y, pPos.Z); | ||
364 | } | ||
365 | else | ||
366 | { | ||
367 | lPos = this.position; | ||
368 | } | ||
369 | byte[] pb = lPos.GetBytes(); | ||
307 | Array.Copy(pb, 0, bytes, i, pb.Length); | 370 | Array.Copy(pb, 0, bytes, i, pb.Length); |
308 | i += 12; | 371 | i += 12; |
309 | ushort ac = 32767; | 372 | ushort ac = 32767; |
diff --git a/src/world/World.cs b/src/world/World.cs index fb78819..e1c84bc 100644 --- a/src/world/World.cs +++ b/src/world/World.cs | |||
@@ -176,9 +176,8 @@ namespace OpenSim.world | |||
176 | ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); | 176 | ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Adding new avatar to world"); |
177 | ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); | 177 | ServerConsole.MainConsole.Instance.WriteLine("World.cs:AddViewerAgent() - Starting RegionHandshake "); |
178 | NewAvatar.SendRegionHandshake(this); | 178 | NewAvatar.SendRegionHandshake(this); |
179 | 179 | PhysicsVector pVec = new PhysicsVector(NewAvatar.position.X, NewAvatar.position.Y, NewAvatar.position.Z); | |
180 | NewAvatar.PhysActor = this.phyScene.AddAvatar(new PhysicsVector(NewAvatar.position.X, NewAvatar.position.Y, NewAvatar.position.Z)); | 180 | NewAvatar.PhysActor = this.phyScene.AddAvatar(pVec); |
181 | //this.Update(); // will work for now, but needs to be optimised so we don't update everything in the sim for each new user | ||
182 | this.Entities.Add(AgentClient.AgentID, NewAvatar); | 181 | this.Entities.Add(AgentClient.AgentID, NewAvatar); |
183 | } | 182 | } |
184 | 183 | ||
@@ -187,6 +186,10 @@ namespace OpenSim.world | |||
187 | ServerConsole.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim"); | 186 | ServerConsole.MainConsole.Instance.WriteLine("World.cs: AddNewPrim() - Creating new prim"); |
188 | Primitive prim = new Primitive(); | 187 | Primitive prim = new Primitive(); |
189 | prim.CreateFromPacket(addPacket, AgentClient.AgentID, this._primCount); | 188 | prim.CreateFromPacket(addPacket, AgentClient.AgentID, this._primCount); |
189 | PhysicsVector pVec = new PhysicsVector(prim.position.X, prim.position.Y, prim.position.Z); | ||
190 | PhysicsVector pSize = new PhysicsVector( 0.25f, 0.25f, 0.25f); | ||
191 | //prim.PhysActor = this.phyScene.AddPrim(pVec, pSize ); | ||
192 | //prim.PhysicsEnabled = true; | ||
190 | this.Entities.Add(prim.uuid, prim); | 193 | this.Entities.Add(prim.uuid, prim); |
191 | this._primCount++; | 194 | this._primCount++; |
192 | } | 195 | } |