seeComponentType<T extends GameComponent> method

void seeComponentType<T extends GameComponent>({
  1. required dynamic observed(
    1. List<T>
    ),
  2. VoidCallback? notObserved,
  3. double radiusVision = 32,
})

This method we notify when detect components by type when enter in radiusVision configuration Method that bo used in update method.

Implementation

void seeComponentType<T extends GameComponent>({
  required Function(List<T>) observed,
  VoidCallback? notObserved,
  double radiusVision = 32,
}) {
  var compVisible = this.gameRef.visibleComponents().where((element) {
    return element is T && element != this;
  }).cast<T>();

  if (compVisible.isEmpty) {
    notObserved?.call();
    return;
  }

  double visionWidth = radiusVision * 2;
  double visionHeight = radiusVision * 2;

  Rect fieldOfVision = Rect.fromLTWH(
    this.center.x - radiusVision,
    this.center.y - radiusVision,
    visionWidth,
    visionHeight,
  );

  List<T> compObserved = compVisible
      .where((comp) => fieldOfVision.overlaps(comp.toRect()))
      .toList();

  if (compObserved.isNotEmpty) {
    observed(compObserved);
  } else {
    notObserved?.call();
  }
}