示例#1
0
		public bool SetTransform(Vector2 position, Quaternion rotation)
#endif
		{
			Box2DXDebug.Assert(_world._lock == false);
			if (_world._lock == true)
			{
				return true;
			}

			if (IsFrozen())
			{
				return false;
			}
			
			_xf.rotation = rotation;
			//_xf.R = rotation;
			_xf.position = position;

			_sweep.C0 = _sweep.C = _xf.TransformPoint(_sweep.LocalCenter);
#if USE_MATRIX_FOR_ROTATION
			_sweep.A0 = _sweep.A = rotation.GetAngle();
#else
			_sweep.A0 = _sweep.A = rotation.eulerAngles.z * Mathf.Deg2Rad;
#endif

			bool freeze = false;
			for (Fixture f = _fixtureList; f != null; f = f.Next)
			{
				bool inRange = f.Synchronize(_world._broadPhase, _xf, _xf);

				if (inRange == false)
				{
					freeze = true;
					break;
				}
			}

			if (freeze == true)
			{
				_flags |= BodyFlags.Frozen;
				_linearVelocity = Vector2.zero;
				_angularVelocity = 0.0f;

				// Failure
				return false;
			}

			// Success
			_world._broadPhase.Commit();
			return true;
		}