package codechicken.lib.lighting;

import codechicken.lib.render.CCRenderState;
import codechicken.lib.vec.BlockCoord;
import net.minecraft.block.Block;
import net.minecraft.block.state.IBlockState;
import net.minecraft.util.BlockPos;
import net.minecraft.world.IBlockAccess;

public class PlanarLightMatrix extends PlanarLightModel
{
    public static final int operationIndex = CCRenderState.registerOperation();
    public static PlanarLightMatrix instance = new PlanarLightMatrix();

    public IBlockAccess access;
    public BlockCoord pos = new BlockCoord();

    private int sampled = 0;
    public int[] brightness = new int[6];

    public PlanarLightMatrix() {
        super(PlanarLightModel.standardLightModel.colours);
    }

    public PlanarLightMatrix locate(IBlockAccess a, int x, int y, int z) {
        access = a;
        pos.set(x, y, z);
        sampled = 0;
        return this;
    }

    public int brightness(int side) {
        if((sampled & 1 << side) == 0) {
            BlockPos bp = pos.pos();
            IBlockState b = access.getBlockState(bp);
            brightness[side] = access.getCombinedLight(bp, b.getBlock().getLightValue(access, bp));
            sampled |= 1 << side;
        }
        return brightness[side];
    }

    @Override
    public boolean load() {
        CCRenderState.pipeline.addDependency(CCRenderState.sideAttrib);
        return true;
    }

    @Override
    public void operate() {
        super.operate();
        CCRenderState.setBrightness(brightness(CCRenderState.side));
    }

    @Override
    public int operationID() {
        return operationIndex;
    }
}