#include <metal_stdlib>

using namespace metal;
struct LeftOver {
  /* 0x0000 */ float time;
  /* 0x0004 */ uint padding;
  /* 0x0008 */ int8_t tint_pad[8];
  /* 0x0010 */ float4x4 worldViewProjection;
  /* 0x0050 */ packed_float2 outputSize;
  /* 0x0058 */ packed_float2 stageSize;
  /* 0x0060 */ packed_float2 spriteMapSize;
  /* 0x0068 */ float stageScale;
  /* 0x006c */ float spriteCount;
  /* 0x0070 */ packed_float3 colorMul;
  /* 0x007c */ int8_t tint_pad_1[4];
};
struct main_out {
  float4 glFragColor_1;
};
struct tint_symbol_2 {
  float3 vPosition_param [[user(locn0)]];
  float2 vUV_param [[user(locn1)]];
  float2 tUV_param [[user(locn2)]];
  float2 stageUnits_1_param [[user(locn3)]];
  float2 levelUnits_param [[user(locn4)]];
  float2 tileID_1_param [[user(locn5)]];
};
struct tint_symbol_3 {
  float4 glFragColor_1 [[color(0)]];
};

float4x4 getFrameData_f1_(constant LeftOver& x_20, thread float* const frameID, texture2d<float, access::sample> tint_symbol_6, sampler tint_symbol_7) {
  float fX = 0.0f;
  float const x_15 = *(frameID);
  float const x_25 = x_20.spriteCount;
  fX = (x_15 / x_25);
  float const x_37 = fX;
  float4 const x_40 = tint_symbol_6.sample(tint_symbol_7, float2(x_37, 0.0f), bias(0.0f));
  float const x_44 = fX;
  float4 const x_47 = tint_symbol_6.sample(tint_symbol_7, float2(x_44, 0.25f), bias(0.0f));
  float const x_51 = fX;
  float4 const x_54 = tint_symbol_6.sample(tint_symbol_7, float2(x_51, 0.5f), bias(0.0f));
  return float4x4(float4(x_40.x, x_40.y, x_40.z, x_40.w), float4(x_47.x, x_47.y, x_47.z, x_47.w), float4(x_54.x, x_54.y, x_54.z, x_54.w), float4(float4(0.0f, 0.0f, 0.0f, 0.0f).x, float4(0.0f, 0.0f, 0.0f, 0.0f).y, float4(0.0f, 0.0f, 0.0f, 0.0f).z, float4(0.0f, 0.0f, 0.0f, 0.0f).w));
}

void main_1(constant LeftOver& x_20, thread float2* const tint_symbol_8, texture2d<float, access::sample> tint_symbol_9, sampler tint_symbol_10, texture2d<float, access::sample> tint_symbol_11, texture2d<float, access::sample> tint_symbol_12, sampler tint_symbol_13, thread float* const tint_symbol_14, texture2d<float, access::sample> tint_symbol_15, sampler tint_symbol_16, texture2d<float, access::sample> tint_symbol_17, sampler tint_symbol_18, thread float4* const tint_symbol_19) {
  float4 color = 0.0f;
  float2 tileUV = 0.0f;
  float2 tileID = 0.0f;
  float2 sheetUnits = 0.0f;
  float spriteUnits = 0.0f;
  float2 stageUnits = 0.0f;
  int i = 0;
  float frameID_1 = 0.0f;
  float4 animationData = 0.0f;
  float f = 0.0f;
  float4x4 frameData = float4x4(0.0f);
  float param = 0.0f;
  float2 frameSize = 0.0f;
  float2 offset_1 = 0.0f;
  float2 ratio = 0.0f;
  float4 nc = 0.0f;
  float alpha = 0.0f;
  float3 mixed = 0.0f;
  color = float4(0.0f, 0.0f, 0.0f, 0.0f);
  float2 const x_86 = *(tint_symbol_8);
  tileUV = fract(x_86);
  float const x_91 = tileUV.y;
  tileUV.y = (1.0f - x_91);
  float2 const x_95 = *(tint_symbol_8);
  tileID = floor(x_95);
  float2 const x_101 = x_20.spriteMapSize;
  sheetUnits = (float2(1.0f, 1.0f) / x_101);
  float const x_106 = x_20.spriteCount;
  spriteUnits = (1.0f / x_106);
  float2 const x_111 = x_20.stageSize;
  stageUnits = (float2(1.0f, 1.0f) / x_111);
  i = 0;
  while (true) {
    int const x_122 = i;
    if ((x_122 < 2)) {
    } else {
      break;
    }
    int const x_126 = i;
    switch(x_126) {
      case 1: {
        float2 const x_150 = tileID;
        float2 const x_154 = x_20.stageSize;
        float4 const x_156 = tint_symbol_9.sample(tint_symbol_10, ((x_150 + float2(0.5f, 0.5f)) / x_154), bias(0.0f));
        frameID_1 = x_156.x;
        break;
      }
      case 0: {
        float2 const x_136 = tileID;
        float2 const x_140 = x_20.stageSize;
        float4 const x_142 = tint_symbol_11.sample(tint_symbol_10, ((x_136 + float2(0.5f, 0.5f)) / x_140), bias(0.0f));
        frameID_1 = x_142.x;
        break;
      }
      default: {
        break;
      }
    }
    float const x_166 = frameID_1;
    float const x_169 = x_20.spriteCount;
    float4 const x_172 = tint_symbol_12.sample(tint_symbol_13, float2(((x_166 + 0.5f) / x_169), 0.0f), bias(0.0f));
    animationData = x_172;
    float const x_174 = animationData.y;
    if ((x_174 > 0.0f)) {
      float const x_181 = x_20.time;
      float const x_184 = animationData.z;
      *(tint_symbol_14) = fmod((x_181 * x_184), 1.0f);
      f = 0.0f;
      while (true) {
        float const x_193 = f;
        if ((x_193 < 8.0f)) {
        } else {
          break;
        }
        float const x_197 = animationData.y;
        float const x_198 = *(tint_symbol_14);
        if ((x_197 > x_198)) {
          float const x_203 = animationData.x;
          frameID_1 = x_203;
          break;
        }
        float const x_208 = frameID_1;
        float const x_211 = x_20.spriteCount;
        float const x_214 = f;
        float4 const x_217 = tint_symbol_12.sample(tint_symbol_13, float2(((x_208 + 0.5f) / x_211), (0.125f * x_214)), bias(0.0f));
        animationData = x_217;
        {
          float const x_218 = f;
          f = (x_218 + 1.0f);
        }
      }
    }
    float const x_222 = frameID_1;
    param = (x_222 + 0.5f);
    float4x4 const x_225 = getFrameData_f1_(x_20, &(param), tint_symbol_15, tint_symbol_16);
    frameData = x_225;
    float4 const x_228 = frameData[0];
    float2 const x_231 = x_20.spriteMapSize;
    frameSize = (float2(x_228.w, x_228.z) / x_231);
    float4 const x_235 = frameData[0];
    float2 const x_237 = sheetUnits;
    offset_1 = (float2(x_235.x, x_235.y) * x_237);
    float4 const x_241 = frameData[2];
    float4 const x_244 = frameData[0];
    ratio = (float2(x_241.x, x_241.y) / float2(x_244.w, x_244.z));
    float const x_248 = frameData[2].z;
    if ((x_248 == 1.0f)) {
      float2 const x_252 = tileUV;
      tileUV = float2(x_252.y, x_252.x);
    }
    int const x_254 = i;
    if ((x_254 == 0)) {
      float2 const x_263 = tileUV;
      float2 const x_264 = frameSize;
      float2 const x_266 = offset_1;
      float4 const x_268 = tint_symbol_17.sample(tint_symbol_18, ((x_263 * x_264) + x_266));
      color = x_268;
    } else {
      float2 const x_274 = tileUV;
      float2 const x_275 = frameSize;
      float2 const x_277 = offset_1;
      float4 const x_279 = tint_symbol_17.sample(tint_symbol_18, ((x_274 * x_275) + x_277));
      nc = x_279;
      float const x_283 = color.w;
      float const x_285 = nc.w;
      alpha = fmin((x_283 + x_285), 1.0f);
      float4 const x_290 = color;
      float4 const x_292 = nc;
      float const x_295 = nc.w;
      mixed = mix(float3(x_290.x, x_290.y, x_290.z), float3(x_292.x, x_292.y, x_292.z), float3(x_295, x_295, x_295));
      float3 const x_298 = mixed;
      float const x_299 = alpha;
      color = float4(x_298.x, x_298.y, x_298.z, x_299);
    }
    {
      int const x_304 = i;
      i = as_type<int>((as_type<uint>(x_304) + as_type<uint>(1)));
    }
  }
  float3 const x_310 = x_20.colorMul;
  float4 const x_311 = color;
  float3 const x_313 = (float3(x_311.x, x_311.y, x_311.z) * x_310);
  float4 const x_314 = color;
  color = float4(x_313.x, x_313.y, x_313.z, x_314.w);
  float4 const x_318 = color;
  *(tint_symbol_19) = x_318;
  return;
}

fragment tint_symbol_3 tint_symbol(texture2d<float, access::sample> tint_symbol_26 [[texture(6)]], sampler tint_symbol_27 [[sampler(4)]], texture2d<float, access::sample> tint_symbol_28 [[texture(5)]], texture2d<float, access::sample> tint_symbol_29 [[texture(8)]], sampler tint_symbol_30 [[sampler(7)]], texture2d<float, access::sample> tint_symbol_32 [[texture(3)]], sampler tint_symbol_33 [[sampler(2)]], texture2d<float, access::sample> tint_symbol_34 [[texture(1)]], sampler tint_symbol_35 [[sampler(0)]], tint_symbol_2 tint_symbol_1 [[stage_in]], constant LeftOver& x_20 [[buffer(9)]]) {
  thread float2 tint_symbol_20 = 0.0f;
  thread float2 tint_symbol_21 = 0.0f;
  thread float2 tint_symbol_22 = 0.0f;
  thread float2 tint_symbol_23 = 0.0f;
  thread float3 tint_symbol_24 = 0.0f;
  thread float2 tint_symbol_25 = 0.0f;
  thread float tint_symbol_31 = 0.0f;
  thread float4 tint_symbol_36 = 0.0f;
  float2 const tUV_param = tint_symbol_1.tUV_param;
  float2 const tileID_1_param = tint_symbol_1.tileID_1_param;
  float2 const levelUnits_param = tint_symbol_1.levelUnits_param;
  float2 const stageUnits_1_param = tint_symbol_1.stageUnits_1_param;
  float3 const vPosition_param = tint_symbol_1.vPosition_param;
  float2 const vUV_param = tint_symbol_1.vUV_param;
  tint_symbol_20 = tUV_param;
  tint_symbol_21 = tileID_1_param;
  tint_symbol_22 = levelUnits_param;
  tint_symbol_23 = stageUnits_1_param;
  tint_symbol_24 = vPosition_param;
  tint_symbol_25 = vUV_param;
  main_1(x_20, &(tint_symbol_20), tint_symbol_26, tint_symbol_27, tint_symbol_28, tint_symbol_29, tint_symbol_30, &(tint_symbol_31), tint_symbol_32, tint_symbol_33, tint_symbol_34, tint_symbol_35, &(tint_symbol_36));
  main_out const tint_symbol_4 = {.glFragColor_1=tint_symbol_36};
  tint_symbol_3 const tint_symbol_5 = {.glFragColor_1=tint_symbol_4.glFragColor_1};
  return tint_symbol_5;
}

