RustSetonixPlugin.build constructor

RustSetonixPlugin.build(
  1. RustPlugin builder(
    1. PluginCallback
    ),
  2. PluginSystem pluginSystem, {
  3. void onPrint(
    1. String
    )?,
})

Implementation

factory RustSetonixPlugin.build(
  RustPlugin Function(PluginCallback) builder,
  PluginSystem pluginSystem, {
  void Function(String)? onPrint,
}) {
  final callback = PluginCallback.default_();
  final plugin = builder(callback);
  final instance = RustSetonixPlugin._(plugin);
  if (onPrint != null) {
    callback.changeOnPrint(onPrint: onPrint);
  }
  callback.changeProcessEvent(processEvent: (eventSerizalized, force) {
    final event = WorldEventMapper.fromJson(eventSerizalized);
    instance.process(event, force: force ?? false);
  });
  callback.changeSendEvent(sendEvent: (eventSerizalized, target) {
    final event = PlayableWorldEventMapper.fromJson(eventSerizalized);
    instance.sendEvent(event, target ?? kAnyChannel);
  });
  callback.changeStateFieldAccess(stateFieldAccess: (field) {
    final state = pluginSystem.stateGetter();
    return switch (field) {
      StateFieldAccess.info => state.info.toJson(),
      StateFieldAccess.table => state.table.toJson(),
      StateFieldAccess.tableName => jsonEncode(state.tableName),
      StateFieldAccess.players => jsonEncode(pluginSystem.playersGetter()),
      StateFieldAccess.teamMembers => jsonEncode(state.teamMembers),
    };
  });
  instance.eventSystem.on<WorldEvent>((e) {
    instance.plugin.runEvent(
      eventType: e.clientEvent.runtimeType.toString(),
      event: e.clientEvent.toJson(),
      serverEvent: e.serverEvent.toJson(),
      target: e.target,
      source: e.source,
    );
  });
  return instance;
}