Advertisement
ignacy123

MINECRFAT in Godot Engine - Spatial

Aug 3rd, 2023 (edited)
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.97 KB | None | 0 0
  1. extends Spatial
  2.  
  3. var cube_size = 1.0
  4. var chunk_size = 64
  5. var noise = OpenSimplexNoise.new()
  6. var gridmap
  7. var mesh_library = MeshLibrary.new()
  8. var world_lowest = -4
  9.  
  10. func _ready():
  11. gridmap = get_node("GridMap")
  12. gridmap.set_cell_size(Vector3(cube_size, cube_size, cube_size))
  13. randomize()
  14. noise.seed = int(rand_range(0, 10000))
  15.  
  16. initialize_MeshLib()
  17. generate_map(2)
  18.  
  19. func initialize_MeshLib():
  20. var cube_mesh = CubeMesh.new()
  21. cube_mesh.size = Vector3(cube_size, cube_size, cube_size)
  22. var collision_shape = BoxShape.new()
  23. collision_shape.extents = cube_mesh.size
  24.  
  25. var grass_material = SpatialMaterial.new()
  26. grass_material.albedo_texture = load("res://textures/grass.png")
  27. var leaves_material = SpatialMaterial.new()
  28. leaves_material.albedo_texture = load("res://textures/leaves.png")
  29. var wood_material = SpatialMaterial.new()
  30. wood_material.albedo_texture = load("res://textures/wood.png")
  31.  
  32. var grass_mesh = ArrayMesh.new()
  33. var arrays = cube_mesh.surface_get_arrays(0)
  34. grass_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
  35. grass_mesh.surface_set_material(0, grass_material)
  36. mesh_library.create_item(0)
  37. mesh_library.set_item_mesh(0, grass_mesh)
  38. mesh_library.set_item_shapes(0, [collision_shape])
  39.  
  40. var wood_mesh = ArrayMesh.new()
  41. wood_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
  42. wood_mesh.surface_set_material(0, wood_material)
  43. mesh_library.create_item(1)
  44. mesh_library.set_item_mesh(1, wood_mesh)
  45. mesh_library.set_item_shapes(1, [collision_shape])
  46.  
  47. var leaves_mesh = ArrayMesh.new()
  48. leaves_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
  49. leaves_mesh.surface_set_material(0, leaves_material)
  50. mesh_library.create_item(2)
  51. mesh_library.set_item_mesh(2, leaves_mesh)
  52. mesh_library.set_item_shapes(2, [collision_shape])
  53.  
  54. ResourceSaver.save("res://MyMeshLibrary.tres", mesh_library)
  55. gridmap.set_mesh_library(mesh_library)
  56. gridmap.set_cell_size(Vector3(1, 1, 1))
  57.  
  58. func generate_map(size):
  59. for x in range(-size / 2, size / 2):
  60. for y in range(-size / 2, size / 2):
  61. generate_chunk(x, y)
  62.  
  63. func generate_chunk(x, z):
  64. for i in range(0, chunk_size):
  65. for j in range(0, chunk_size):
  66. var height = int(noise.get_noise_2d(x * chunk_size + i, z * chunk_size + j) * 128 / 6)
  67. var is_tree = rand_range(0, 1000)
  68. if(is_tree < 5 and height > world_lowest):
  69. create_tree(Vector3(x * chunk_size + i, height, z * chunk_size + j))
  70. gridmap.set_cell_item(x * chunk_size + i, world_lowest - 1, z * chunk_size + j, 0)
  71. for y in range(world_lowest, height):
  72. gridmap.set_cell_item(x * chunk_size + i, y, z * chunk_size + j, 0)
  73.  
  74. func create_tree(pos):
  75. for i in range(6):
  76. gridmap.set_cell_item(pos.x, pos.y + i, pos.z, 1)
  77. for x in range(pos.x - 2, pos.x + 3):
  78. for z in range(pos.z - 2, pos.z + 3):
  79. for y in range(pos.y + 4, pos.y + 7):
  80. gridmap.set_cell_item(x, y, z, 2)
  81.  
  82.  
  83. # tekstury:
  84. # https://drive.google.com/drive/folders/1MuhP_7Q3HTGw9TcCPMZb8mb9aAMKF71r?usp=drive_link
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement