diff --git a/block.gd b/block.gd index d97801f..139597f 100644 --- a/block.gd +++ b/block.gd @@ -1,53 +1,2 @@ -extends MeshInstance - - -var voxel_map = null - -var _normal_material = null -var _spawn_material = null -var _normal_pos = Vector3(0,0,0) -var _anim_time = 0 - - -func _ready(): - pass - - -func spawn(): -# _spawn_material = FixedMaterial.new() -# _spawn_material.set_texture(FixedMaterial.PARAM_DIFFUSE, voxel_map.material.get_texture(FixedMaterial.PARAM_DIFFUSE)) -# _spawn_material.set_parameter(FixedMaterial.PARAM_DIFFUSE, Color(1,1,1,0.5)) -# _spawn_material.set_flag(FixedMaterial.FLAG_USE_ALPHA, true) - #_spawn_material.set_blend_mode(Material.BLEND_MODE_MIX) - #set_material_override(_spawn_material) - #set_material_override(voxel_map.material) - _normal_pos = get_translation() - set_process(true) - - -func _process(delta): - _anim_time += delta - var k = _anim_time - if k < 1.0: - var pos = _normal_pos - pos.y -= (1-k)*(1-k) * 64.0 - set_translation(pos) - else: - set_translation(_normal_pos) - set_process(false) - -# var color = _spawn_material.get_parameter(FixedMaterial.PARAM_DIFFUSE) -# if color.a < 1.0: -# color.a += (0.1*delta) -# if color.a >= 1.0: -# set_material_override(voxel_map.material) -# set_process(false) -# _spawn_material = null -# else: -# color.r = color.a -# color.g = color.a -# color.b = color.a -# _spawn_material.set_parameter(FixedMaterial.PARAM_DIFFUSE, color) - diff --git a/block.tscn b/block.tscn index a6f8d60..a5dc757 100644 --- a/block.tscn +++ b/block.tscn @@ -1,6 +1,7 @@ [gd_scene load_steps=2 format=1] -[ext_resource path="res://block.gd" type="Script" id=1] +[ext_resource path="res://block_node.gd" type="Script" id=1] + [node name="Block" type="MeshInstance"] diff --git a/block_node.gd b/block_node.gd new file mode 100644 index 0000000..d97801f --- /dev/null +++ b/block_node.gd @@ -0,0 +1,53 @@ + +extends MeshInstance + + +var voxel_map = null + +var _normal_material = null +var _spawn_material = null +var _normal_pos = Vector3(0,0,0) +var _anim_time = 0 + + +func _ready(): + pass + + +func spawn(): +# _spawn_material = FixedMaterial.new() +# _spawn_material.set_texture(FixedMaterial.PARAM_DIFFUSE, voxel_map.material.get_texture(FixedMaterial.PARAM_DIFFUSE)) +# _spawn_material.set_parameter(FixedMaterial.PARAM_DIFFUSE, Color(1,1,1,0.5)) +# _spawn_material.set_flag(FixedMaterial.FLAG_USE_ALPHA, true) + #_spawn_material.set_blend_mode(Material.BLEND_MODE_MIX) + #set_material_override(_spawn_material) + #set_material_override(voxel_map.material) + _normal_pos = get_translation() + set_process(true) + + +func _process(delta): + _anim_time += delta + var k = _anim_time + if k < 1.0: + var pos = _normal_pos + pos.y -= (1-k)*(1-k) * 64.0 + set_translation(pos) + else: + set_translation(_normal_pos) + set_process(false) + +# var color = _spawn_material.get_parameter(FixedMaterial.PARAM_DIFFUSE) +# if color.a < 1.0: +# color.a += (0.1*delta) +# if color.a >= 1.0: +# set_material_override(voxel_map.material) +# set_process(false) +# _spawn_material = null +# else: +# color.r = color.a +# color.g = color.a +# color.b = color.a +# _spawn_material.set_parameter(FixedMaterial.PARAM_DIFFUSE, color) + + diff --git a/generator.gd b/generator.gd index b679784..f7fff85 100644 --- a/generator.gd +++ b/generator.gd @@ -2,14 +2,6 @@ extends Node const BLOCK_SIZE = 16 - -const SIDE_LEFT = 0 -const SIDE_RIGHT = 1 -const SIDE_BOTTOM = 2 -const SIDE_TOP = 3 -const SIDE_BACK = 4 -const SIDE_FRONT = 5 - const SORT_TIME = 1 const TILE_SIZE = 16 @@ -19,6 +11,8 @@ var min_y = -2 var max_y = 2 var view_radius = 8 +var VoxelType = preload("voxel_type.gd") + var _side_normals = [ Vector3(-1,0,0), Vector3(1,0,0), @@ -120,242 +114,6 @@ class BlockRequest: # line[x] = 0 -class VoxelType: - const GEOM_EMPTY = 0 - const GEOM_CUBE = 1 - const GEOM_XQUAD = 2 - const GEOM_MODEL = 3 - const GEOM_LIQUID = 4 - - var id = 0 - var name = "default" - var cube_side_uv4 = [] - var is_transparent = false - var geom_type = GEOM_CUBE - - # Mesh that will always be included in the voxel - var model_vertices = [] - var model_uv = [] - # Parts of the mesh that will appear only if connected sides are transparent - var model_side_vertices = [] - var model_side_uv = [] - var model_normals = [] - - func _init(id, name): - self.id = id - self.name = name - cube_side_uv4.resize(6) - set_all_atlas_pos(Vector2(0,0)) - - func set_side_atlas_pos(side, pos): - var s = 1.0 / 4.0 - # Apply a tiny padding to avoid tiling artefacts - var e = 0.001 - cube_side_uv4[side] = [ - s * (pos + Vector2(e,e)), - s * (pos + Vector2(1-e,e)), - s * (pos + Vector2(e,1-e)), - s * (pos + Vector2(1-e,1-e)) - ] - return self - - func set_all_atlas_pos(pos): - for i in range(0, 6): - set_side_atlas_pos(i, pos) - return self - - func set_tbs_atlas_pos(top_pos, bottom_pos, sides_pos): - set_side_atlas_pos(SIDE_LEFT, sides_pos) - set_side_atlas_pos(SIDE_RIGHT, sides_pos) - set_side_atlas_pos(SIDE_FRONT, sides_pos) - set_side_atlas_pos(SIDE_BACK, sides_pos) - set_side_atlas_pos(SIDE_TOP, top_pos) - set_side_atlas_pos(SIDE_BOTTOM, bottom_pos) - return self - - func set_geom(g): - geom_type = g - return self - - func set_transparent(trans): - is_transparent = trans - return self - - func compile(): - if geom_type == GEOM_CUBE: - model_side_vertices = _make_cube_vertex_offsets() - model_side_uv = _make_cube_side_uv6(cube_side_uv4) - - elif geom_type == GEOM_LIQUID: - model_side_vertices = _make_cube_vertex_offsets(15.0 / 16.0) - model_side_uv = _make_cube_side_uv6(cube_side_uv4) - - elif geom_type == GEOM_XQUAD: - var uv = cube_side_uv4 - model_uv = [ - uv[0][2], - uv[0][0], - uv[0][1], - uv[0][2], - uv[0][1], - uv[0][3], - - uv[0][3], - uv[0][2], - uv[0][1], - uv[0][2], - uv[0][0], - uv[0][1] - ] - model_vertices = [ - Vector3(0,0,0), - Vector3(0,1,0), - Vector3(1,1,1), - Vector3(0,0,0), - Vector3(1,1,1), - Vector3(1,0,1), - - Vector3(1,0,0), - Vector3(0,0,1), - Vector3(1,1,0), - Vector3(0,0,1), - Vector3(0,1,1), - Vector3(1,1,0) - ] - model_normals = [ - Vector3(-0.7, 0.0, 0.7), - Vector3(-0.7, 0.0, 0.7), - Vector3(-0.7, 0.0, 0.7), - Vector3(-0.7, 0.0, 0.7), - Vector3(-0.7, 0.0, 0.7), - Vector3(-0.7, 0.0, 0.7), - - Vector3(0.7, 0.0, 0.7), - Vector3(0.7, 0.0, 0.7), - Vector3(0.7, 0.0, 0.7), - Vector3(0.7, 0.0, 0.7), - Vector3(0.7, 0.0, 0.7), - Vector3(0.7, 0.0, 0.7) - ] - - else: - print("Unknown voxel geometry type") - - - static func _make_cube_vertex_offsets(sy=1): - var a = [ - [ - # LEFT - Vector3(0,0,0), - Vector3(0,sy,0), - Vector3(0,sy,1), - Vector3(0,0,0), - Vector3(0,sy,1), - Vector3(0,0,1), - ], - [ - # RIGHT - Vector3(1,0,0), - Vector3(1,sy,1), - Vector3(1,sy,0), - Vector3(1,0,0), - Vector3(1,0,1), - Vector3(1,sy,1) - ], - [ - # BOTTOM - Vector3(0,0,0), - Vector3(1,0,1), - Vector3(1,0,0), - Vector3(0,0,0), - Vector3(0,0,1), - Vector3(1,0,1) - ], - [ - # TOP - Vector3(0,sy,0), - Vector3(1,sy,0), - Vector3(1,sy,1), - Vector3(0,sy,0), - Vector3(1,sy,1), - Vector3(0,sy,1) - ], - [ - # BACK - Vector3(0,0,0), - Vector3(1,0,0), - Vector3(1,sy,0), - Vector3(0,0,0), - Vector3(1,sy,0), - Vector3(0,sy,0), - ], - [ - # FRONT - Vector3(1,0,1), - Vector3(0,0,1), - Vector3(1,sy,1), - Vector3(0,0,1), - Vector3(0,sy,1), - Vector3(1,sy,1) - ] - ] - return a - - static func _make_cube_side_uv6(sides_uv4): - var uvs = sides_uv4 - var uv6 = [ - [ - uvs[SIDE_LEFT][2], - uvs[SIDE_LEFT][0], - uvs[SIDE_LEFT][1], - uvs[SIDE_LEFT][2], - uvs[SIDE_LEFT][1], - uvs[SIDE_LEFT][3] - ], - [ - uvs[SIDE_RIGHT][2], - uvs[SIDE_RIGHT][1], - uvs[SIDE_RIGHT][0], - uvs[SIDE_RIGHT][2], - uvs[SIDE_RIGHT][3], - uvs[SIDE_RIGHT][1] - ], - [ - uvs[SIDE_BOTTOM][0], - uvs[SIDE_BOTTOM][3], - uvs[SIDE_BOTTOM][1], - uvs[SIDE_BOTTOM][0], - uvs[SIDE_BOTTOM][2], - uvs[SIDE_BOTTOM][3] - ], - [ - uvs[SIDE_TOP][0], - uvs[SIDE_TOP][1], - uvs[SIDE_TOP][3], - uvs[SIDE_TOP][0], - uvs[SIDE_TOP][3], - uvs[SIDE_TOP][2] - ], - [ - uvs[SIDE_BACK][2], - uvs[SIDE_BACK][3], - uvs[SIDE_BACK][1], - uvs[SIDE_BACK][2], - uvs[SIDE_BACK][1], - uvs[SIDE_BACK][0] - ], - [ - uvs[SIDE_FRONT][3], - uvs[SIDE_FRONT][2], - uvs[SIDE_FRONT][1], - uvs[SIDE_FRONT][2], - uvs[SIDE_FRONT][0], - uvs[SIDE_FRONT][1] - ], - ] - return uv6 - - func _ready(): _camera = get_parent().get_node("Camera") @@ -638,7 +396,7 @@ func generate_random(cubes, offset): cubes[z][y][x] = air return empty - + func _is_face_visible(vt, other_vt): return other_vt.id == 0 or (other_vt.is_transparent and other_vt != vt) @@ -687,28 +445,7 @@ func make_mesh(cubes, st_solid, st_transparent): st.add_uv(uvs[vi]) st.add_normal(normals[vi]) st.add_vertex(pos + vertices[vi]) - -# elif voxel_type.geom_type == VoxelType.GEOM_XQUAD: -# var pos = Vector3(x,y,z)-Vector3(1,1,1) -# pos.x += rand_range(-0.15, 0.15) -# pos.z += rand_range(-0.15, 0.15) -# var uvs = voxel_type.cube_side_uv4[0] -# -# st.add_normal(Vector3(-0.7,0,0.7)) -# st.add_uv(uvs[2]); st.add_vertex(pos) -# st.add_uv(uvs[0]); st.add_vertex(pos+Vector3(0,1,0)) -# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,1)) -# st.add_uv(uvs[2]); st.add_vertex(pos) -# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,1)) -# st.add_uv(uvs[3]); st.add_vertex(pos+Vector3(1,0,1)) -# -# st.add_normal(Vector3(0.7,0,0.7)) -# st.add_uv(uvs[3]); st.add_vertex(pos+Vector3(1,0,0)) -# st.add_uv(uvs[2]); st.add_vertex(pos+Vector3(0,0,1)) -# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,0)) -# st.add_uv(uvs[2]); st.add_vertex(pos+Vector3(0,0,1)) -# st.add_uv(uvs[0]); st.add_vertex(pos+Vector3(0,1,1)) -# st.add_uv(uvs[1]); st.add_vertex(pos+Vector3(1,1,0)) + diff --git a/new_scene.tscn b/new_scene.tscn index 972da4a..1e05735 100644 --- a/new_scene.tscn +++ b/new_scene.tscn @@ -1,9 +1,8 @@ -[gd_scene load_steps=10 format=1] +[gd_scene load_steps=7 format=1] [ext_resource path="res://debug_camera.gd" type="Script" id=1] [ext_resource path="res://generator.gd" type="Script" id=2] [ext_resource path="res://terrain.png" type="Texture" id=3] -[ext_resource path="res://block.gd" type="Script" id=4] [sub_resource type="FixedMaterial" id=1] @@ -81,44 +80,7 @@ textures/glow_tc = 0 textures/normal_tc = 0 textures/shade_param_tc = 0 -[sub_resource type="FixedMaterial" id=3] - -flags/visible = true -flags/double_sided = false -flags/invert_faces = false -flags/unshaded = false -flags/on_top = false -flags/lightmap_on_uv2 = true -flags/colarray_is_srgb = true -params/blend_mode = 0 -params/depth_draw = 1 -params/line_width = 1.0 -fixed_flags/use_alpha = false -fixed_flags/use_color_array = false -fixed_flags/use_point_size = false -fixed_flags/discard_alpha = false -fixed_flags/use_xy_normalmap = false -params/diffuse = Color( 1, 1, 1, 1 ) -params/specular = Color( 0, 0, 0, 1 ) -params/emission = Color( 0, 0, 0, 1 ) -params/specular_exp = 40 -params/detail_mix = 1.0 -params/normal_depth = 1 -params/shader = 0 -params/shader_param = 0.5 -params/glow = 0 -params/point_size = 1.0 -uv_xform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -textures/diffuse_tc = 0 -textures/detail_tc = 0 -textures/specular_tc = 0 -textures/emission_tc = 0 -textures/specular_exp_tc = 0 -textures/glow_tc = 0 -textures/normal_tc = 0 -textures/shade_param_tc = 0 - -[sub_resource type="Environment" id=4] +[sub_resource type="Environment" id=3] ambient_light/enabled = true ambient_light/color = Color( 0.378906, 0.378906, 0.378906, 1 ) @@ -162,22 +124,12 @@ bcs/contrast = 1.0 bcs/saturation = 1.0 srgb/enabled = false -[sub_resource type="Animation" id=5] - -length = 1.0 -loop = false -step = 0.1 -tracks/0/type = "value" -tracks/0/path = NodePath(".") -tracks/0/interp = 1 -tracks/0/keys = { "cont":true, "times":FloatArray( ), "transitions":FloatArray( ), "values":[ ] } - [node name="Node" type="Node"] [node name="Camera" type="Camera" parent="."] _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -transform/local = Transform( 0.815509, -0.351713, 0.459612, 0, 0.794154, 0.607717, -0.578744, -0.495599, 0.64764, 18.1809, 22.9505, 25.3826 ) +transform/local = Transform( 0.815509, -0.351713, 0.459612, 0, 0.794154, 0.607717, -0.578744, -0.495599, 0.64764, 18.1809, 4.88061, 25.3826 ) projection = 0 fov = 80.0 near = 0.1 @@ -189,6 +141,7 @@ environment = null h_offset = 0.0 v_offset = 0.0 script/script = ExtResource( 1 ) +__meta__ = { "_editor_collapsed":true } sensitivity = 0.4 min_angle = -90 max_angle = 90 @@ -261,125 +214,16 @@ phase_2/color = Color( 0, 0, 0, 1 ) phase_3/pos = 1.0 phase_3/color = Color( 0, 0, 0, 1 ) -[node name="TestCube" type="TestCube" parent="."] - -_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.63175, 0, 0 ) -layers = 1 -geometry/visible = true -geometry/material_override = null -geometry/cast_shadow = true -geometry/receive_shadows = true -geometry/range_begin = 0.0 -geometry/range_end = 0.0 -geometry/extra_cull_margin = 0.0 -geometry/billboard = false -geometry/billboard_y = false -geometry/depth_scale = false -geometry/visible_in_all_rooms = false -geometry/use_baked_light = false -geometry/baked_light_tex_id = 0 - -[node name="TestCube1" type="TestCube" parent="."] - -_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.63175, 0, 2.12836 ) -layers = 1 -geometry/visible = true -geometry/material_override = null -geometry/cast_shadow = true -geometry/receive_shadows = true -geometry/range_begin = 0.0 -geometry/range_end = 0.0 -geometry/extra_cull_margin = 0.0 -geometry/billboard = false -geometry/billboard_y = false -geometry/depth_scale = false -geometry/visible_in_all_rooms = false -geometry/use_baked_light = false -geometry/baked_light_tex_id = 0 - -[node name="TestCube2" type="TestCube" parent="."] - -_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -1.39143, 0, 0 ) -layers = 1 -geometry/visible = true -geometry/material_override = null -geometry/cast_shadow = true -geometry/receive_shadows = true -geometry/range_begin = 0.0 -geometry/range_end = 0.0 -geometry/extra_cull_margin = 0.0 -geometry/billboard = false -geometry/billboard_y = false -geometry/depth_scale = false -geometry/visible_in_all_rooms = false -geometry/use_baked_light = false -geometry/baked_light_tex_id = 0 - -[node name="TestCube3" type="TestCube" parent="."] - -_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -transform/local = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -3.63175, 2.18131, 0 ) -layers = 1 -geometry/visible = true -geometry/material_override = null -geometry/cast_shadow = true -geometry/receive_shadows = true -geometry/range_begin = 0.0 -geometry/range_end = 0.0 -geometry/extra_cull_margin = 0.0 -geometry/billboard = false -geometry/billboard_y = false -geometry/depth_scale = false -geometry/visible_in_all_rooms = false -geometry/use_baked_light = false -geometry/baked_light_tex_id = 0 - [node name="VoxelMap" type="Node" parent="."] script/script = ExtResource( 2 ) material = SubResource( 1 ) transparent_material = SubResource( 2 ) -[node name="Block" type="MeshInstance" parent="."] - -_import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -visibility/visible = false -layers = 1 -geometry/visible = true -geometry/material_override = SubResource( 3 ) -geometry/cast_shadow = true -geometry/receive_shadows = true -geometry/range_begin = 0.0 -geometry/range_end = 0.0 -geometry/extra_cull_margin = 0.0 -geometry/billboard = false -geometry/billboard_y = false -geometry/depth_scale = false -geometry/visible_in_all_rooms = false -geometry/use_baked_light = false -geometry/baked_light_tex_id = 0 -mesh/mesh = null -mesh/skeleton = NodePath("..") -script/script = ExtResource( 4 ) - [node name="WorldEnvironment" type="WorldEnvironment" parent="."] _import_transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0 ) -environment = SubResource( 4 ) - -[node name="AnimationPlayer" type="AnimationPlayer" parent="."] - -playback/process_mode = 1 -playback/default_blend_time = 0.0 -root/root = NodePath("..") -anims/NewAnim = SubResource( 5 ) -playback/active = true -playback/speed = 1.0 -blend_times = [ ] -autoplay = "" +environment = SubResource( 3 ) [node name="DirectionalLight" type="DirectionalLight" parent="."] diff --git a/voxel_type.gd b/voxel_type.gd new file mode 100644 index 0000000..798463e --- /dev/null +++ b/voxel_type.gd @@ -0,0 +1,247 @@ + +# TODO Move this to VoxelMap +# Still here, because accessing constants from another script don't work... (issue 4457) +const ATLAS_SIZE = 4 + +const SIDE_LEFT = 0 +const SIDE_RIGHT = 1 +const SIDE_BOTTOM = 2 +const SIDE_TOP = 3 +const SIDE_BACK = 4 +const SIDE_FRONT = 5 + +const GEOM_EMPTY = 0 +const GEOM_CUBE = 1 +const GEOM_XQUAD = 2 +const GEOM_MODEL = 3 +const GEOM_LIQUID = 4 + +var id = 0 +var name = "default" +var cube_side_uv4 = [] +var is_transparent = false +var geom_type = GEOM_CUBE + +# Mesh that will always be included in the voxel +var model_vertices = [] +var model_uv = [] +# Parts of the mesh that will appear only if connected sides are transparent +var model_side_vertices = [] +var model_side_uv = [] +var model_normals = [] + +func _init(id, name): + self.id = id + self.name = name + cube_side_uv4.resize(6) + set_all_atlas_pos(Vector2(0,0)) + +func set_side_atlas_pos(side, pos): + var s = 1.0 / float(ATLAS_SIZE) + # Apply a tiny padding to avoid tiling artefacts + var e = 0.001 + cube_side_uv4[side] = [ + s * (pos + Vector2(e,e)), + s * (pos + Vector2(1-e,e)), + s * (pos + Vector2(e,1-e)), + s * (pos + Vector2(1-e,1-e)) + ] + return self + +func set_all_atlas_pos(pos): + for i in range(0, 6): + set_side_atlas_pos(i, pos) + return self + +func set_tbs_atlas_pos(top_pos, bottom_pos, sides_pos): + set_side_atlas_pos(SIDE_LEFT, sides_pos) + set_side_atlas_pos(SIDE_RIGHT, sides_pos) + set_side_atlas_pos(SIDE_FRONT, sides_pos) + set_side_atlas_pos(SIDE_BACK, sides_pos) + set_side_atlas_pos(SIDE_TOP, top_pos) + set_side_atlas_pos(SIDE_BOTTOM, bottom_pos) + return self + +func set_geom(g): + geom_type = g + return self + +func set_transparent(trans): + is_transparent = trans + return self + +func compile(): + if geom_type == GEOM_CUBE: + model_side_vertices = _make_cube_vertex_offsets() + model_side_uv = _make_cube_side_uv6(cube_side_uv4) + + elif geom_type == GEOM_LIQUID: + model_side_vertices = _make_cube_vertex_offsets(15.0 / 16.0) + model_side_uv = _make_cube_side_uv6(cube_side_uv4) + + elif geom_type == GEOM_XQUAD: + var uv = cube_side_uv4 + model_uv = [ + uv[0][2], + uv[0][0], + uv[0][1], + uv[0][2], + uv[0][1], + uv[0][3], + + uv[0][3], + uv[0][2], + uv[0][1], + uv[0][2], + uv[0][0], + uv[0][1] + ] + model_vertices = [ + Vector3(0,0,0), + Vector3(0,1,0), + Vector3(1,1,1), + Vector3(0,0,0), + Vector3(1,1,1), + Vector3(1,0,1), + + Vector3(1,0,0), + Vector3(0,0,1), + Vector3(1,1,0), + Vector3(0,0,1), + Vector3(0,1,1), + Vector3(1,1,0) + ] + model_normals = [ + Vector3(-0.7, 0.0, 0.7), + Vector3(-0.7, 0.0, 0.7), + Vector3(-0.7, 0.0, 0.7), + Vector3(-0.7, 0.0, 0.7), + Vector3(-0.7, 0.0, 0.7), + Vector3(-0.7, 0.0, 0.7), + + Vector3(0.7, 0.0, 0.7), + Vector3(0.7, 0.0, 0.7), + Vector3(0.7, 0.0, 0.7), + Vector3(0.7, 0.0, 0.7), + Vector3(0.7, 0.0, 0.7), + Vector3(0.7, 0.0, 0.7) + ] + + else: + print("Unknown voxel geometry type") + + +static func _make_cube_vertex_offsets(sy=1): + var a = [ + [ + # LEFT + Vector3(0,0,0), + Vector3(0,sy,0), + Vector3(0,sy,1), + Vector3(0,0,0), + Vector3(0,sy,1), + Vector3(0,0,1), + ], + [ + # RIGHT + Vector3(1,0,0), + Vector3(1,sy,1), + Vector3(1,sy,0), + Vector3(1,0,0), + Vector3(1,0,1), + Vector3(1,sy,1) + ], + [ + # BOTTOM + Vector3(0,0,0), + Vector3(1,0,1), + Vector3(1,0,0), + Vector3(0,0,0), + Vector3(0,0,1), + Vector3(1,0,1) + ], + [ + # TOP + Vector3(0,sy,0), + Vector3(1,sy,0), + Vector3(1,sy,1), + Vector3(0,sy,0), + Vector3(1,sy,1), + Vector3(0,sy,1) + ], + [ + # BACK + Vector3(0,0,0), + Vector3(1,0,0), + Vector3(1,sy,0), + Vector3(0,0,0), + Vector3(1,sy,0), + Vector3(0,sy,0), + ], + [ + # FRONT + Vector3(1,0,1), + Vector3(0,0,1), + Vector3(1,sy,1), + Vector3(0,0,1), + Vector3(0,sy,1), + Vector3(1,sy,1) + ] + ] + return a + +static func _make_cube_side_uv6(sides_uv4): + var uvs = sides_uv4 + var uv6 = [ + [ + uvs[SIDE_LEFT][2], + uvs[SIDE_LEFT][0], + uvs[SIDE_LEFT][1], + uvs[SIDE_LEFT][2], + uvs[SIDE_LEFT][1], + uvs[SIDE_LEFT][3] + ], + [ + uvs[SIDE_RIGHT][2], + uvs[SIDE_RIGHT][1], + uvs[SIDE_RIGHT][0], + uvs[SIDE_RIGHT][2], + uvs[SIDE_RIGHT][3], + uvs[SIDE_RIGHT][1] + ], + [ + uvs[SIDE_BOTTOM][0], + uvs[SIDE_BOTTOM][3], + uvs[SIDE_BOTTOM][1], + uvs[SIDE_BOTTOM][0], + uvs[SIDE_BOTTOM][2], + uvs[SIDE_BOTTOM][3] + ], + [ + uvs[SIDE_TOP][0], + uvs[SIDE_TOP][1], + uvs[SIDE_TOP][3], + uvs[SIDE_TOP][0], + uvs[SIDE_TOP][3], + uvs[SIDE_TOP][2] + ], + [ + uvs[SIDE_BACK][2], + uvs[SIDE_BACK][3], + uvs[SIDE_BACK][1], + uvs[SIDE_BACK][2], + uvs[SIDE_BACK][1], + uvs[SIDE_BACK][0] + ], + [ + uvs[SIDE_FRONT][3], + uvs[SIDE_FRONT][2], + uvs[SIDE_FRONT][1], + uvs[SIDE_FRONT][2], + uvs[SIDE_FRONT][0], + uvs[SIDE_FRONT][1] + ], + ] + return uv6 + +