capsuleIntersect method

OctreeData? capsuleIntersect(
  1. Capsule capsule,
  2. OctreeNode octree
)

Implementation

OctreeData? capsuleIntersect(Capsule capsule, OctreeNode octree){
  _capsule.copy(capsule);

  List<Triangle> triangles = getCapsuleTriangles(_capsule, [], octree.subTrees);
  bool hit = false;
  for(int i = 0; i < triangles.length; i ++ ) {
    OctreeData? result = triangleCapsuleIntersect(_capsule, triangles[i]);
    if (result != null){
      hit = true;
      _capsule.translate(result.normal..scale(result.depth));
    }
  }

  if(hit){
    Vector3 collisionVector = _capsule.getCenter(Vector3.zero())..sub( capsule.getCenter(_v1));
    double depth = collisionVector.length;
    return OctreeData(point: Vector3.zero(), normal: collisionVector..normalize(), depth: depth);
  }

  return null;
}