fromOldGdxPacker static method

Future<SpriteBatch> fromOldGdxPacker(
  1. String path, {
  2. bool flippable = false,
  3. Paint? flipPaint,
})

Implementation

static Future<SpriteBatch> fromOldGdxPacker(String path,
    {bool flippable = false, Paint? flipPaint}) async {
  (int, int) getTupple(String data) {
    final split = data.split(',');
    return (int.parse(split[0]), int.parse(split[1]));
  }

  ({String name, Rect rect, int? index}) getInfo(List<String> lines, int idx) {
    late Size size;
    late Offset offset;
    int? index;

    for (int i = 1; i < 7; i++) {
      final [tag, data] = lines[idx + i].trim().split(':');
      switch (tag) {
        case "xy":
          final pos = getTupple(data);
          offset = Offset(pos.$1.toDouble(), pos.$2.toDouble());
          break;
        case "size":
          final wh = getTupple(data);
          size = Size(wh.$1.toDouble(), wh.$2.toDouble());
          break;
        case "index":
          if (data != "-1") {
            index = int.parse(data);
          }
          break;
      }
    }

    return (name: lines[idx].trim(), rect: offset & size, index: index);
  }

  final atlas = await rootBundle.loadString(path);

  final textures = <String, Rect>{};
  final framesMap = <String, SplayTreeMap<int, Rect>>{};
  final lines = atlas.split('\n');

  for (int i = 6; i < lines.length - 1; i += 7) {
    final info = getInfo(lines, i);
    if (info.index != null) {
      if (!framesMap.containsKey(info.name)) framesMap[info.name] = SplayTreeMap<int, Rect>();
      framesMap[info.name]![info.index!] = info.rect;
    } else {
      textures[info.name] = info.rect;
    }
  }

  final pathSplit = path.split("/");
  pathSplit.removeLast();
  pathSplit.add(lines[1]);

  final image = await ImageUtils.loadImageFromAssets(pathSplit.join("/"));
  assert(image != null, "Batch image could not be loaded !");

  return SpriteBatch._(
    image:
        flippable ? await ImageUtils.generateFlipped(image!, flipPaint ?? _emptyPaint) : image!,
    textures: textures,
    frames: framesMap.map((key, value) => MapEntry(key, value.values.toList())),
  );
}