createCharacter method

  1. @override
int createCharacter(
  1. CharacterSettings3D settings,
  2. Vector3 position
)
override

Makes a character whose feet are at position; 0 when it cannot be made.

Implementation

@override
int createCharacter(CharacterSettings3D settings, Vector3 position) {
  if (_disposed ||
      settings.layer < 0 ||
      settings.layer > 15 ||
      !(settings.radius > 0) ||
      settings.halfHeight < 0) {
    return 0;
  }
  final c = FakeCharacter3D._(_next++, settings, position);
  characters[c.handle] = c;
  if (settings.innerBody) {
    final h = c._halfHeight;
    final inner = createBody(
      BoxShape3D(settings.radius, h, settings.radius),
      BodySettings3D(
        position: Vector3(position.x, position.y - h, position.z),
        type: BodyType3D.kinematic,
        layer: settings.layer,
        allowSleeping: false,
      ),
    );
    // A full world: the character is made without one, as in Jolt.
    if (inner != 0) {
      bodies[inner]!.character = c.handle;
      c.innerBody = inner;
    }
  }
  return c.handle;
}