// Copyright (c) 2023 Lachlan McDonald // This work is licensed under the MIT License (MIT) // https://github.com/lachlanmcdonald/magicavoxel-shaders // // xs case [Color] // // xs_begin // author : '@lmcdx.bsky.social' // arg : { name = 'Color' var = 'm_color' range = '0 255' value = '1' step = '1' precision = '0' } // xs_end bool no_axis_mode = all(equal(ivec3(i_axis), ivec3(0))); bvec3 axis_mode = no_axis_mode ? bvec3(true) : equal(ivec3(i_axis), ivec3(1)); bool isSelectedPal(float p) { for (int i = 0; i < i_num_color_sels; i += 1) { if (p == color_sel(float(i))) { return true; } } return false; } float map(vec3 v) { float index = voxel(v); if (index == 0.0) { vec2 x_range = v.xx; vec2 y_range = v.yy; vec2 z_range = v.zz; if (axis_mode.x) { x_range.x = v.x - 1.0; x_range.y = v.x + 1.0; } if (axis_mode.y) { y_range.x = v.y - 1.0; y_range.y = v.y + 1.0; } if (axis_mode.z) { z_range.x = v.z - 1.0; z_range.y = v.z + 1.0; } for (float x = x_range.x; x <= x_range.y; x += 1.0) { for (float y = y_range.x; y <= y_range.y; y += 1.0) { for (float z = z_range.x; z <= z_range.y; z += 1.0) { float j = voxel(vec3(x, y, z)); if (isSelectedPal(j)) { return m_color; } } } } } return index; }