package mekanism.client.render.ctm;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
import net.minecraft.client.renderer.block.model.BakedQuad;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.BlockRenderLayer;
import net.minecraft.util.ResourceLocation;
public class TextureCTM
{
public TextureSpriteCallback[] sprites;
public TextureCTM(TextureSpriteCallback[] sprites)
{
this.sprites = sprites;
}
public List<BakedQuad> transformQuad(BakedQuad bq, CTMBlockRenderContext context, int quadGoal)
{
Quad quad = Quad.from(bq, DefaultVertexFormats.ITEM);
if(context == null)
{
return Collections.singletonList(quad.transformUVs(sprites[0].getSprite()).rebake());
}
Quad[] quads = quad.subdivide(4);
int[] ctm = ((CTMBlockRenderContext)context).getCTM(bq.getFace()).getSubmapIndices();
for(int i = 0; i < quads.length; i++)
{
Quad q = quads[i];
if(q != null)
{
int ctmid = q.getUVs().normalize().getQuadrant();
quads[i] = q.grow().transformUVs(sprites[ctm[ctmid] > 15 ? 0 : 1].getSprite(), CTM.uvs[ctm[ctmid]].normalize());
}
}
return Arrays.stream(quads).filter(Objects::nonNull).map(q -> q.rebake()).collect(Collectors.toList());
}
public TextureAtlasSprite getParticle()
{
return sprites[0].getSprite();
}
public Collection<ResourceLocation> getTextures()
{
return Arrays.stream(sprites).map(TextureSpriteCallback::getLocation).collect(Collectors.toList());
}
}