Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- extends Spatial
- var cube_size = 1.0
- var chunk_size = 64
- var noise = OpenSimplexNoise.new()
- var gridmap
- var mesh_library = MeshLibrary.new()
- var world_lowest = -4
- func _ready():
- gridmap = get_node("GridMap")
- gridmap.set_cell_size(Vector3(cube_size, cube_size, cube_size))
- randomize()
- noise.seed = int(rand_range(0, 10000))
- initialize_MeshLib()
- generate_map(2)
- func initialize_MeshLib():
- var cube_mesh = CubeMesh.new()
- cube_mesh.size = Vector3(cube_size, cube_size, cube_size)
- var collision_shape = BoxShape.new()
- collision_shape.extents = cube_mesh.size
- var grass_material = SpatialMaterial.new()
- grass_material.albedo_texture = load("res://textures/grass.png")
- var leaves_material = SpatialMaterial.new()
- leaves_material.albedo_texture = load("res://textures/leaves.png")
- var wood_material = SpatialMaterial.new()
- wood_material.albedo_texture = load("res://textures/wood.png")
- var grass_mesh = ArrayMesh.new()
- var arrays = cube_mesh.surface_get_arrays(0)
- grass_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
- grass_mesh.surface_set_material(0, grass_material)
- mesh_library.create_item(0)
- mesh_library.set_item_mesh(0, grass_mesh)
- mesh_library.set_item_shapes(0, [collision_shape])
- var wood_mesh = ArrayMesh.new()
- wood_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
- wood_mesh.surface_set_material(0, wood_material)
- mesh_library.create_item(1)
- mesh_library.set_item_mesh(1, wood_mesh)
- mesh_library.set_item_shapes(1, [collision_shape])
- var leaves_mesh = ArrayMesh.new()
- leaves_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
- leaves_mesh.surface_set_material(0, leaves_material)
- mesh_library.create_item(2)
- mesh_library.set_item_mesh(2, leaves_mesh)
- mesh_library.set_item_shapes(2, [collision_shape])
- ResourceSaver.save("res://MyMeshLibrary.tres", mesh_library)
- gridmap.set_mesh_library(mesh_library)
- gridmap.set_cell_size(Vector3(1, 1, 1))
- func generate_map(size):
- for x in range(-size / 2, size / 2):
- for y in range(-size / 2, size / 2):
- generate_chunk(x, y)
- func generate_chunk(x, z):
- for i in range(0, chunk_size):
- for j in range(0, chunk_size):
- var height = int(noise.get_noise_2d(x * chunk_size + i, z * chunk_size + j) * 128 / 6)
- var is_tree = rand_range(0, 1000)
- if(is_tree < 5 and height > world_lowest):
- create_tree(Vector3(x * chunk_size + i, height, z * chunk_size + j))
- gridmap.set_cell_item(x * chunk_size + i, world_lowest - 1, z * chunk_size + j, 0)
- for y in range(world_lowest, height):
- gridmap.set_cell_item(x * chunk_size + i, y, z * chunk_size + j, 0)
- func create_tree(pos):
- for i in range(6):
- gridmap.set_cell_item(pos.x, pos.y + i, pos.z, 1)
- for x in range(pos.x - 2, pos.x + 3):
- for z in range(pos.z - 2, pos.z + 3):
- for y in range(pos.y + 4, pos.y + 7):
- gridmap.set_cell_item(x, y, z, 2)
- # tekstury:
- # https://drive.google.com/drive/folders/1MuhP_7Q3HTGw9TcCPMZb8mb9aAMKF71r?usp=drive_link
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement