3: 2009-08-24 (月) 16:16:06 iseki  |
現: 2009-08-31 (月) 18:31:57 iseki  |
| | ** SIM Boundary [#obc15ec7] | | ** SIM Boundary [#obc15ec7] |
| - | - OpenSim/Region/Physics/OdePlugin/OdePlugin.cs の Simulate() 関数の actor.UpdatePositionAndVelocity() のところを修正. | + | - OpenSim/Region/Physics/OdePlugin/OdePlugin.cs |
| | + | - Simulate() 関数内の actor.UpdatePositionAndVelocity() へチェックコードを追加. |
| | | | |
| | if (actor != null) { | | if (actor != null) { |
| | actor.UpdatePositionAndVelocity(); | | actor.UpdatePositionAndVelocity(); |
| | + | |
| | // by Fumi.Iseki for falling at SIM boundary | | // by Fumi.Iseki for falling at SIM boundary |
| | d.Vector3 vec = d.BodyGetPosition(actor.Body); | | d.Vector3 vec = d.BodyGetPosition(actor.Body); |
| | + | |
| | if (vec.Y<=0.0f || vec.Y>=255.95f || vec.X<=0.0f || vec.X>=255.95f) { | | if (vec.Y<=0.0f || vec.Y>=255.95f || vec.X<=0.0f || vec.X>=255.95f) { |
| | if (vec.Y<=0.0f) vec.Y = 0.1f; | | if (vec.Y<=0.0f) vec.Y = 0.1f; |
| | if (vec.X<=0.0f) vec.X = 0.1f; | | if (vec.X<=0.0f) vec.X = 0.1f; |
| | else if (vec.X>255.95f) vec.X = 255.95f; | | else if (vec.X>255.95f) vec.X = 255.95f; |
| - | | + | |
| - | float height = _origheightmap[(int)vec.Y * Constants.RegionSize + (int)vec.X]; | + | float height = GetTerrainHeightAtXY(Vec.X, Vec.Y); |
| | if (actor.Flying) { | | if (actor.Flying) { |
| | if (vec.Z < height + 2) { | | if (vec.Z < height + 2) { |
| | } | | } |
| | } | | } |
| | + | |
| | actor.Position = new PhysicsVector(vec.X, vec.Y, vec.Z); | | actor.Position = new PhysicsVector(vec.X, vec.Y, vec.Z); |
| | d.BodySetPosition(actor.Body, vec.X, vec.Y, vec.Z); | | d.BodySetPosition(actor.Body, vec.X, vec.Y, vec.Z); |
| | } | | } |
| | } | | } |