SIM Boundary 
- OpenSim/Region/Physics/OdePlugin/OdePlugin.cs
- Simulate() 関数内の actor.UpdatePositionAndVelocity() へチェックコードを追加.
if (actor != null) { actor.UpdatePositionAndVelocity(); // by Fumi.Iseki for falling at SIM boundary 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 = 0.1f; else if (vec.Y>255.95f) vec.Y = 255.95f; if (vec.X<=0.0f) vec.X = 0.1f; else if (vec.X>255.95f) vec.X = 255.95f; float height = GetTerrainHeightAtXY(Vec.X, Vec.Y); if (actor.Flying) { if (vec.Z < height + 2) { vec.Z = height + actor.Size.Z/2; actor.Velocity.Z = 0; actor.IsColliding = true; } } else { if (vec.Z < height + actor.Size.Z/2) { vec.Z = height + actor.Size.Z/2; actor.Velocity.Z = 0; actor.IsColliding = true; actor.CollidingGround = true; } } actor.Position = new PhysicsVector(vec.X, vec.Y, vec.Z); d.BodySetPosition(actor.Body, vec.X, vec.Y, vec.Z); } }
Counter: 1837,
today: 1,
yesterday: 1
最終更新: 2009-08-31 (月) 18:31:57 (JST) (5677d) by iseki