/// <summary> /// Constructs a new character controller with the most common configuration options. /// </summary> /// <param name="position">Initial position of the character.</param> /// <param name="height">Height of the character body while standing.</param> /// <param name="crouchingHeight">Height of the character body while crouching.</param> /// <param name="radius">Radius of the character body.</param> /// <param name="mass">Mass of the character body.</param> public CharacterController(Vector3 position, float height, float crouchingHeight, float radius, float mass) { Body = new Cylinder(position, height, radius, mass); Body.IgnoreShapeChanges = true; //Wouldn't want inertia tensor recomputations to occur when crouching and such. Body.CollisionInformation.Shape.CollisionMargin = .1f; //Making the character a continuous object prevents it from flying through walls which would be pretty jarring from a player's perspective. Body.PositionUpdateMode = PositionUpdateMode.Continuous; Body.LocalInertiaTensorInverse = new Matrix3x3(); //TODO: P4: In v0.16.2, compound bodies would override the material properties that get set in the CreatingPair event handler. //In a future version where this is changed, change this to conceptually minimally required CreatingPair. Body.CollisionInformation.Events.DetectingInitialCollision += RemoveFriction; Body.LinearDamping = 0; SupportFinder = new SupportFinder(this); HorizontalMotionConstraint = new HorizontalMotionConstraint(this); VerticalMotionConstraint = new VerticalMotionConstraint(this); StepManager = new StepManager(this); StanceManager = new StanceManager(this, crouchingHeight); QueryManager = new QueryManager(this); //Enable multithreading for the characters. IsUpdatedSequentially = false; //Link the character body to the character controller so that it can be identified by the locker. //Any object which replaces this must implement the ICharacterTag for locking to work properly. Body.CollisionInformation.Tag = new CharacterSynchronizer(Body); }
/// <summary> /// Constructs a new character controller with the default configuration. /// </summary> public CharacterController() { Body = new Cylinder(Vector3.Zero, 1.7f, .6f, 10); Body.IgnoreShapeChanges = true; //Wouldn't want inertia tensor recomputations to occur when crouching and such. Body.CollisionInformation.Shape.CollisionMargin = .1f; //Making the character a continuous object prevents it from flying through walls which would be pretty jarring from a player's perspective. Body.PositionUpdateMode = PositionUpdateMode.Continuous; Body.LocalInertiaTensorInverse = new Matrix3X3(); //TODO: In v0.16.2, compound bodies would override the material properties that get set in the CreatingPair event handler. //In a future version where this is changed, change this to conceptually minimally required CreatingPair. Body.CollisionInformation.Events.DetectingInitialCollision += RemoveFriction; Body.LinearDamping = 0; SupportFinder = new SupportFinder(this); HorizontalMotionConstraint = new HorizontalMotionConstraint(this); VerticalMotionConstraint = new VerticalMotionConstraint(this); StepManager = new StepManager(this); StanceManager = new StanceManager(this); QueryManager = new QueryManager(this); }