_loadStepResources(sdkStepInterface) {
    // traverse step action graph to determine all package ids that need to be loaded for this step
    const resource_package_ids_seen = {};
    const unique_resource_package_ids = [];
    const load_promises = [];
    const loadActionResourcePackage = function (id) {
      if (id != null && resource_package_ids_seen[id] == null) {
        resource_package_ids_seen[id] = true;
        const pkg = PKGS.getPkgForIdentifier(id);
        if (pkg != null && pkg.length > 0) {
          // load resources with a unique package identifier
          // so we can release this package as needed
          // but anything else using this same package will be preserved
          const unique_resource_package_id = `${id}_${UtilsJavascript.generateIncrementalId()}`;
          unique_resource_package_ids.push(unique_resource_package_id);
          load_promises.push(PackageManager.getInstance().loadMinorPackage(unique_resource_package_id, pkg, 'game'));
        }
      }
    };
    for (let i = 0, il = sdkStepInterface.actionInterfaceSequence.length; i < il; i++) {
      const sdkActionInterface = sdkStepInterface.actionInterfaceSequence[i];
      const sequenceAction = sdkActionInterface.getSdkAction();

      // get resources for source
      const source = sequenceAction.getSource();
      if (source != null) {
        loadActionResourcePackage(PKGS.getCardGamePkgIdentifier(source.getId()));
      }

      // get resources for target
      const target = sequenceAction.getTarget();
      if (target != null) {
        loadActionResourcePackage(PKGS.getCardGamePkgIdentifier(target.getId()));
      }

      // get resources for modifier
      if (sequenceAction instanceof ModifierAction || sequenceAction instanceof SDK.ApplyModifierAction || sequenceAction instanceof SDK.RemoveModifierAction) {
        const modifier = sequenceAction.getModifier();
        if (modifier instanceof SDK.Modifier) {
          loadActionResourcePackage(modifier.getType());
        }
      }
    }

    sdkStepInterface.resourcePackageIds = unique_resource_package_ids;
    sdkStepInterface.loadPromise = Promise.all(load_promises);

    return sdkStepInterface.loadPromise;
  }
Loads all resources required to show a step by traversing that step's flattened action graph.
NOTE: the step's load promise can be found at "sdkStepInterface.loadPromise"
@param {SdkStepInterface} sdkStepInterface
@returns {Promise}
@private