// Copyright (c) 2023 Lachlan McDonald
// This work is licensed under the MIT License (MIT)
// https://github.com/lachlanmcdonald/magicavoxel-shaders
//
// xs brush/tiles [Width] [Height] [Depth] [Offset X] [Offset Y] [Offset Z]
//
// xs_begin
// author : '@lmcdx.bsky.social'
// arg : { name = 'Width'  var = 'm_width'  range = '1 256'  value = '2'  step = '1'  precision = '0' }
// arg : { name = 'Height'  var = 'm_height'  range = '1 256'  value = '2'  step = '1'  precision = '0' }
// arg : { name = 'Depth'  var = 'm_depth'  range = '1 256'  value = '2'  step = '1'  precision = '0' }
// arg : { name = 'Offset X'  var = 'm_offset_x'  range = '0 256'  value = '0'  step = '1'  precision = '0' }
// arg : { name = 'Offset Y'  var = 'm_offset_y'  range = '0 256'  value = '0'  step = '1'  precision = '0' }
// arg : { name = 'Offset Z'  var = 'm_offset_z'  range = '0 256'  value = '0'  step = '1'  precision = '0' }
// xs_end

vec3 dim = vec3(m_width, m_height, m_depth);
vec3 offset = vec3(m_offset_x, m_offset_y, m_offset_z);

float pal(float p) {
	float f = floor(mix(0.0, float(i_num_color_sels), p));
	return color_sel(f);
}

float map(vec3 v) {
	if (mod(v.x + offset.x, dim.x * 2.0) < dim.x) {
		if (mod(v.y + offset.y, dim.y * 2.0) < dim.y) {
			if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) {
				return pal(0.0);
			} else {
				return pal(1.0);
			}
		} else {
			if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) {
				return pal(1.0);
			} else {
				return pal(0.0);
			}
		}
	} else {
		if (mod(v.y + offset.y, dim.y * 2.0) < dim.y) {
			if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) {
				return pal(1.0);
			} else {
				return pal(0.0);
			}
		} else {
			if (mod(v.z + offset.z, dim.z * 2.0) < dim.z) {
				return pal(0.0);
			} else {
				return pal(1.0);
			}
		}
	}
}