[[block]]
struct LeftOver {
  time : f32;
  [[size(12)]]
  padding : u32;
  worldViewProjection : mat4x4<f32>;
  outputSize : vec2<f32>;
  stageSize : vec2<f32>;
  spriteMapSize : vec2<f32>;
  stageScale : f32;
  spriteCount : f32;
  colorMul : vec3<f32>;
};

[[group(2), binding(9)]] var<uniform> x_20 : LeftOver;

[[group(2), binding(3)]] var frameMapTexture : texture_2d<f32>;

[[group(2), binding(2)]] var frameMapSampler : sampler;

var<private> tUV : vec2<f32>;

[[group(2), binding(5)]] var tileMapsTexture0 : texture_2d<f32>;

[[group(2), binding(4)]] var tileMapsSampler : sampler;

[[group(2), binding(6)]] var tileMapsTexture1 : texture_2d<f32>;

[[group(2), binding(8)]] var animationMapTexture : texture_2d<f32>;

[[group(2), binding(7)]] var animationMapSampler : sampler;

var<private> mt : f32;

[[group(2), binding(1)]] var spriteSheetTexture : texture_2d<f32>;

[[group(2), binding(0)]] var spriteSheetSampler : sampler;

var<private> glFragColor : vec4<f32>;

var<private> tileID_1 : vec2<f32>;

var<private> levelUnits : vec2<f32>;

var<private> stageUnits_1 : vec2<f32>;

var<private> vPosition : vec3<f32>;

var<private> vUV : vec2<f32>;

fn getFrameData_f1_(frameID : ptr<function, f32>) -> mat4x4<f32> {
  var fX : f32;
  let x_15 : f32 = *(frameID);
  let x_25 : f32 = x_20.spriteCount;
  fX = (x_15 / x_25);
  let x_37 : f32 = fX;
  let x_40 : vec4<f32> = textureSampleBias(frameMapTexture, frameMapSampler, vec2<f32>(x_37, 0.0), 0.0);
  let x_44 : f32 = fX;
  let x_47 : vec4<f32> = textureSampleBias(frameMapTexture, frameMapSampler, vec2<f32>(x_44, 0.25), 0.0);
  let x_51 : f32 = fX;
  let x_54 : vec4<f32> = textureSampleBias(frameMapTexture, frameMapSampler, vec2<f32>(x_51, 0.5), 0.0);
  return mat4x4<f32>(vec4<f32>(x_40.x, x_40.y, x_40.z, x_40.w), vec4<f32>(x_47.x, x_47.y, x_47.z, x_47.w), vec4<f32>(x_54.x, x_54.y, x_54.z, x_54.w), vec4<f32>(vec4<f32>(0.0, 0.0, 0.0, 0.0).x, vec4<f32>(0.0, 0.0, 0.0, 0.0).y, vec4<f32>(0.0, 0.0, 0.0, 0.0).z, vec4<f32>(0.0, 0.0, 0.0, 0.0).w));
}

fn main_1() {
  var color : vec4<f32>;
  var tileUV : vec2<f32>;
  var tileID : vec2<f32>;
  var sheetUnits : vec2<f32>;
  var spriteUnits : f32;
  var stageUnits : vec2<f32>;
  var i : i32;
  var frameID_1 : f32;
  var animationData : vec4<f32>;
  var f : f32;
  var frameData : mat4x4<f32>;
  var param : f32;
  var frameSize : vec2<f32>;
  var offset_1 : vec2<f32>;
  var ratio : vec2<f32>;
  var nc : vec4<f32>;
  var alpha : f32;
  var mixed : vec3<f32>;
  color = vec4<f32>(0.0, 0.0, 0.0, 0.0);
  let x_86 : vec2<f32> = tUV;
  tileUV = fract(x_86);
  let x_91 : f32 = tileUV.y;
  tileUV.y = (1.0 - x_91);
  let x_95 : vec2<f32> = tUV;
  tileID = floor(x_95);
  let x_101 : vec2<f32> = x_20.spriteMapSize;
  sheetUnits = (vec2<f32>(1.0, 1.0) / x_101);
  let x_106 : f32 = x_20.spriteCount;
  spriteUnits = (1.0 / x_106);
  let x_111 : vec2<f32> = x_20.stageSize;
  stageUnits = (vec2<f32>(1.0, 1.0) / x_111);
  i = 0;
  loop {
    let x_122 : i32 = i;
    if ((x_122 < 2)) {
    } else {
      break;
    }
    let x_126 : i32 = i;
    switch(x_126) {
      case 1: {
        let x_150 : vec2<f32> = tileID;
        let x_154 : vec2<f32> = x_20.stageSize;
        let x_156 : vec4<f32> = textureSampleBias(tileMapsTexture1, tileMapsSampler, ((x_150 + vec2<f32>(0.5, 0.5)) / x_154), 0.0);
        frameID_1 = x_156.x;
      }
      case 0: {
        let x_136 : vec2<f32> = tileID;
        let x_140 : vec2<f32> = x_20.stageSize;
        let x_142 : vec4<f32> = textureSampleBias(tileMapsTexture0, tileMapsSampler, ((x_136 + vec2<f32>(0.5, 0.5)) / x_140), 0.0);
        frameID_1 = x_142.x;
      }
      default: {
      }
    }
    let x_166 : f32 = frameID_1;
    let x_169 : f32 = x_20.spriteCount;
    let x_172 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_166 + 0.5) / x_169), 0.0), 0.0);
    animationData = x_172;
    let x_174 : f32 = animationData.y;
    if ((x_174 > 0.0)) {
      let x_181 : f32 = x_20.time;
      let x_184 : f32 = animationData.z;
      mt = ((x_181 * x_184) % 1.0);
      f = 0.0;
      loop {
        let x_193 : f32 = f;
        if ((x_193 < 8.0)) {
        } else {
          break;
        }
        let x_197 : f32 = animationData.y;
        let x_198 : f32 = mt;
        if ((x_197 > x_198)) {
          let x_203 : f32 = animationData.x;
          frameID_1 = x_203;
          break;
        }
        let x_208 : f32 = frameID_1;
        let x_211 : f32 = x_20.spriteCount;
        let x_214 : f32 = f;
        let x_217 : vec4<f32> = textureSampleBias(animationMapTexture, animationMapSampler, vec2<f32>(((x_208 + 0.5) / x_211), (0.125 * x_214)), 0.0);
        animationData = x_217;

        continuing {
          let x_218 : f32 = f;
          f = (x_218 + 1.0);
        }
      }
    }
    let x_222 : f32 = frameID_1;
    param = (x_222 + 0.5);
    let x_225 : mat4x4<f32> = getFrameData_f1_(&(param));
    frameData = x_225;
    let x_228 : vec4<f32> = frameData[0];
    let x_231 : vec2<f32> = x_20.spriteMapSize;
    frameSize = (vec2<f32>(x_228.w, x_228.z) / x_231);
    let x_235 : vec4<f32> = frameData[0];
    let x_237 : vec2<f32> = sheetUnits;
    offset_1 = (vec2<f32>(x_235.x, x_235.y) * x_237);
    let x_241 : vec4<f32> = frameData[2];
    let x_244 : vec4<f32> = frameData[0];
    ratio = (vec2<f32>(x_241.x, x_241.y) / vec2<f32>(x_244.w, x_244.z));
    let x_248 : f32 = frameData[2].z;
    if ((x_248 == 1.0)) {
      let x_252 : vec2<f32> = tileUV;
      tileUV = vec2<f32>(x_252.y, x_252.x);
    }
    let x_254 : i32 = i;
    if ((x_254 == 0)) {
      let x_263 : vec2<f32> = tileUV;
      let x_264 : vec2<f32> = frameSize;
      let x_266 : vec2<f32> = offset_1;
      let x_268 : vec4<f32> = textureSample(spriteSheetTexture, spriteSheetSampler, ((x_263 * x_264) + x_266));
      color = x_268;
    } else {
      let x_274 : vec2<f32> = tileUV;
      let x_275 : vec2<f32> = frameSize;
      let x_277 : vec2<f32> = offset_1;
      let x_279 : vec4<f32> = textureSample(spriteSheetTexture, spriteSheetSampler, ((x_274 * x_275) + x_277));
      nc = x_279;
      let x_283 : f32 = color.w;
      let x_285 : f32 = nc.w;
      alpha = min((x_283 + x_285), 1.0);
      let x_290 : vec4<f32> = color;
      let x_292 : vec4<f32> = nc;
      let x_295 : f32 = nc.w;
      mixed = mix(vec3<f32>(x_290.x, x_290.y, x_290.z), vec3<f32>(x_292.x, x_292.y, x_292.z), vec3<f32>(x_295, x_295, x_295));
      let x_298 : vec3<f32> = mixed;
      let x_299 : f32 = alpha;
      color = vec4<f32>(x_298.x, x_298.y, x_298.z, x_299);
    }

    continuing {
      let x_304 : i32 = i;
      i = (x_304 + 1);
    }
  }
  let x_310 : vec3<f32> = x_20.colorMul;
  let x_311 : vec4<f32> = color;
  let x_313 : vec3<f32> = (vec3<f32>(x_311.x, x_311.y, x_311.z) * x_310);
  let x_314 : vec4<f32> = color;
  color = vec4<f32>(x_313.x, x_313.y, x_313.z, x_314.w);
  let x_318 : vec4<f32> = color;
  glFragColor = x_318;
  return;
}

struct main_out {
  [[location(0)]]
  glFragColor_1 : vec4<f32>;
};

[[stage(fragment)]]
fn main([[location(2)]] tUV_param : vec2<f32>, [[location(5)]] tileID_1_param : vec2<f32>, [[location(4)]] levelUnits_param : vec2<f32>, [[location(3)]] stageUnits_1_param : vec2<f32>, [[location(0)]] vPosition_param : vec3<f32>, [[location(1)]] vUV_param : vec2<f32>) -> main_out {
  tUV = tUV_param;
  tileID_1 = tileID_1_param;
  levelUnits = levelUnits_param;
  stageUnits_1 = stageUnits_1_param;
  vPosition = vPosition_param;
  vUV = vUV_param;
  main_1();
  return main_out(glFragColor);
}
