MethodLerpBuilder function

Method MethodLerpBuilder({
  1. required String className,
  2. required List<FieldInfo> fields,
  3. required DartEmitter emitter,
})

Implementation

Method MethodLerpBuilder({
  required String className,
  required List<FieldInfo> fields,
  required DartEmitter emitter,
}) {
  final lerpStatements = fields.map((f) {
    return '${f.name}: ${f.lerpExpression.accept(emitter)}';
  }).join(', ');

  return Method((builder) {
    builder.annotations.add(refer('override'));
    builder.name = 'lerp';
    builder.returns = refer(className);
    builder.requiredParameters.add(Parameter((builder) {
      builder.name = 'other';
      builder.type = refer('$className?');
    }));
    builder.requiredParameters.add(Parameter((builder) {
      builder.name = 't';
      builder.type = refer('double');
    }));
    builder.body = Code('''
    if (other == null) return this;

    return $className(
      $lerpStatements,
    );
  ''');
  });
}