B2Body.cpp
(bd *B2BodyDef, world *B2World)
| 479 | /////////////////////////////////////////////////////////////////////////////// |
| 480 | |
| 481 | func NewB2Body(bd *B2BodyDef, world *B2World) *B2Body { |
| 482 | B2Assert(bd.Position.IsValid()) |
| 483 | B2Assert(bd.LinearVelocity.IsValid()) |
| 484 | B2Assert(B2IsValid(bd.Angle)) |
| 485 | B2Assert(B2IsValid(bd.AngularVelocity)) |
| 486 | B2Assert(B2IsValid(bd.AngularDamping) && bd.AngularDamping >= 0.0) |
| 487 | B2Assert(B2IsValid(bd.LinearDamping) && bd.LinearDamping >= 0.0) |
| 488 | |
| 489 | body := &B2Body{} |
| 490 | |
| 491 | body.M_flags = 0 |
| 492 | |
| 493 | if bd.Bullet { |
| 494 | body.M_flags |= B2Body_Flags.E_bulletFlag |
| 495 | } |
| 496 | |
| 497 | if bd.FixedRotation { |
| 498 | body.M_flags |= B2Body_Flags.E_fixedRotationFlag |
| 499 | } |
| 500 | |
| 501 | if bd.AllowSleep { |
| 502 | body.M_flags |= B2Body_Flags.E_autoSleepFlag |
| 503 | } |
| 504 | |
| 505 | if bd.Awake { |
| 506 | body.M_flags |= B2Body_Flags.E_awakeFlag |
| 507 | } |
| 508 | |
| 509 | if bd.Active { |
| 510 | body.M_flags |= B2Body_Flags.E_activeFlag |
| 511 | } |
| 512 | |
| 513 | body.M_world = world |
| 514 | |
| 515 | body.M_xf.P = bd.Position |
| 516 | body.M_xf.Q.Set(bd.Angle) |
| 517 | |
| 518 | body.M_sweep.LocalCenter.SetZero() |
| 519 | body.M_sweep.C0 = body.M_xf.P |
| 520 | body.M_sweep.C = body.M_xf.P |
| 521 | body.M_sweep.A0 = bd.Angle |
| 522 | body.M_sweep.A = bd.Angle |
| 523 | body.M_sweep.Alpha0 = 0.0 |
| 524 | |
| 525 | body.M_jointList = nil |
| 526 | body.M_contactList = nil |
| 527 | body.M_prev = nil |
| 528 | body.M_next = nil |
| 529 | |
| 530 | body.M_linearVelocity = bd.LinearVelocity |
| 531 | body.M_angularVelocity = bd.AngularVelocity |
| 532 | |
| 533 | body.M_linearDamping = bd.LinearDamping |
| 534 | body.M_angularDamping = bd.AngularDamping |
| 535 | body.M_gravityScale = bd.GravityScale |
| 536 | |
| 537 | body.M_force.SetZero() |
| 538 | body.M_torque = 0.0 |