- 差分 を表示
- ソース を表示
- OpenSim/Hack/SIM_boundary へ行く。
1: 2009-08-13 (木) 16:48:56 iseki | 現: 2009-08-31 (月) 18:31:57 iseki | ||
---|---|---|---|
Line 1: | Line 1: | ||
** SIM Boundary [#obc15ec7] | ** SIM Boundary [#obc15ec7] | ||
+ | - 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); | ||
+ | } | ||
+ | } |
- OpenSim/Hack/SIM_boundary のバックアップ一覧
- OpenSim/Hack/SIM_boundary のバックアップの現在との差分(No. All)
- 1: 2009-08-13 (木) 16:48:56 iseki
- 2: 2009-08-13 (木) 17:12:57 iseki
- 3: 2009-08-24 (月) 16:16:06 iseki