package net.vulkanmod.mixin.texture.update;

import com.mojang.blaze3d.textures.GpuTexture;
import net.minecraft.class_7764;
import net.vulkanmod.render.engine.VkGpuTexture;
import net.vulkanmod.render.texture.SpriteUpdateUtil;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

@Mixin({class_7764.class_7765.class})
public class MSpriteContents {
   @Shadow
   int field_40545;
   @Shadow
   int field_40544;
   @Shadow
   @Final
   class_7764.class_5790 field_40546;

   @Inject(
      method = {"method_45824"},
      at = {@At("HEAD")},
      cancellable = true
   )
   private void checkUpload(int i, int j, GpuTexture gpuTexture, CallbackInfo ci) {
      if (!SpriteUpdateUtil.doUploadFrame()) {
         ++this.field_40545;
         class_7764.class_5791 frameInfo = (class_7764.class_5791)this.field_40546.field_28472.get(this.field_40544);
         if (this.field_40545 >= frameInfo.comp_3446) {
            this.field_40544 = (this.field_40544 + 1) % this.field_40546.field_28472.size();
            this.field_40545 = 0;
         }

         ci.cancel();
      } else {
         SpriteUpdateUtil.addTransitionedLayout(((VkGpuTexture)gpuTexture).getVulkanImage());
      }

   }
}
