shader_type spatial;
render_mode specular_schlick_ggx, async_visible;

uniform sampler2D MapAlbedoTexture : hint_black_albedo;
uniform mat4 HexAffineInverse;
varying vec2 map_coord;

const mat2 _HexAffineInverse = mat2(vec2(1.333333, -0.6666667), vec2(0, -1.154701));

vec2 axial_to_offset(vec2 axial) {
	ivec2 axial_i = ivec2(axial);
    int x = axial_i.x;
    int y = axial_i.y;
    int off_y = y + (x - (x % 1)) / 2;
    return vec2(float(x), float(off_y));
}

void vertex() {
// Input:2
	mat4 model_matrix = WORLD_MATRIX;

	vec3 origin = vec4(WORLD_MATRIX * vec4(0, 0, 0, 1)).xyz;

	vec3 axial_coords = vec3(_HexAffineInverse * origin.xz, 0);

// Output:0
	map_coord = origin.xz * 0.25;
	map_coord = axial_to_offset(axial_coords.xy) * 0.25;
}

void fragment() {
// Input:3
	mat4 n_out3p0 = WORLD_MATRIX;

// TransformDecompose:5
	vec3 n_out5p0 = n_out3p0[0].xyz;
	vec3 n_out5p1 = n_out3p0[1].xyz;
	vec3 n_out5p2 = n_out3p0[2].xyz;
	vec3 n_out5p3 = n_out3p0[3].xyz;

// VectorOp:9
	vec3 n_in9p1 = vec3(1.00000, 1.00000, 1.00000);
	vec3 n_out9p0 = n_out5p3 * n_in9p1;

// TextureUniform:4
	vec3 n_out4p0;
	float n_out4p1;
	{
		vec4 n_tex_read = texture(MapAlbedoTexture, map_coord);
		n_out4p0 = n_tex_read.rgb;
		n_out4p1 = n_tex_read.a;
	}

// Output:0
	ALBEDO = n_out4p0;

}

void light() {
// Output:0

}