characterContacts method

  1. @override
List<CharacterContact3D> characterContacts(
  1. int character
)
override

What character touched in its last update.

Implementation

@override
List<CharacterContact3D> characterContacts(int character) {
  if (!_myCharacter(character)) return const [];
  var n = jj_character_contacts(character, _contacts, _contactCapacity);
  if (n == _contactCapacity) {
    jj_character_state(character, _characterState);
    final needed = _characterState.ref.contactCount;
    if (needed > _contactCapacity) {
      _drop(_contacts);
      _contactCapacity = needed;
      _contacts = _alloc<JJ_CharacterContact>(_contactCapacity);
      n = jj_character_contacts(character, _contacts, _contactCapacity);
    }
  }
  return [
    for (var i = 0; i < n; i++)
      () {
        final c = _contacts[i];
        return CharacterContact3D(
          body: c.body,
          character: c.character,
          position: Vector3(c.position[0], c.position[1], c.position[2]),
          normal: Vector3(c.normal[0], c.normal[1], c.normal[2]),
          velocity: Vector3(c.velocity[0], c.velocity[1], c.velocity[2]),
          distance: c.distance,
          isSensor: c.isSensor,
          hadCollision: c.hadCollision,
        );
      }(),
  ];
}