diff options
author | Lucas Fryzek <lucas.fryzek@fryzekconcepts.com> | 2023-09-10 20:15:31 -0400 |
---|---|---|
committer | Lucas Fryzek <lucas.fryzek@fryzekconcepts.com> | 2023-09-10 20:15:31 -0400 |
commit | 1e694fce7e4ba915861a5be543e40667b9da44ed (patch) | |
tree | abd0929fe486d81b14c4900fc48294fb4544f804 /scripts/level_gen.gd | |
parent | e2af60e3985317e9c4ec15e60f83bd8f5e49110e (diff) |
Add rock and tree prefab
Update world gen to start placing objects on world
Diffstat (limited to 'scripts/level_gen.gd')
-rw-r--r-- | scripts/level_gen.gd | 40 |
1 files changed, 34 insertions, 6 deletions
diff --git a/scripts/level_gen.gd b/scripts/level_gen.gd index 0e4cb21..b86da73 100644 --- a/scripts/level_gen.gd +++ b/scripts/level_gen.gd @@ -4,6 +4,10 @@ extends Node3D @export var height: int = 16 @export var depth: int = 16 +@export var scale_x: int = 10 +@export var scale_y: int = 10 +@export var scale_z: int = 10 + var map_grid: Array[float] = [] func map_grid_get(x: int, y: int, z: int): @@ -14,10 +18,10 @@ func gen_map_grid(): for z in depth: for y in height: for x in width: - if y <= 5: + if y <= 2: map_grid[z*height*width + y*width + x] = -1.0 else: - map_grid[z*height*width + y*width + x] = 0.0 + map_grid[z*height*width + y*width + x] = 10.0 # Called when the node enters the scene tree for the first time. func _ready(): @@ -49,15 +53,17 @@ func _ready(): for i in grid.size(): if grid[i][0] >= width or grid[i][1] >= height or grid[i][2] >= depth or \ grid[i][0] < 0 or grid[i][1] < 0 or grid[i][2] < 0: - cell.value[i] = 0.0 + cell.value[i] = 10.0 else: cell.value[i] = map_grid_get(grid[i][0], grid[i][1], grid[i][2]) - cell.position[i] = Vector3(grid[i][0], grid[i][1], grid[i][2]) + cell.position[i] = Vector3(grid[i][0]*scale_x, grid[i][1]*scale_y, grid[i][2]*scale_z) MarchingCubes.march_cube(cell, triangles, vertices) # Create the Mesh. arr_mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays) + var material = preload("res://materials/terrain.tres") + arr_mesh.surface_set_material(0, material) var m = MeshInstance3D.new() m.mesh = arr_mesh @@ -66,9 +72,31 @@ func _ready(): var collision_shape = CollisionShape3D.new() collision_shape.set_shape(col_mesh) - m.add_child(collision_shape) + var static_body = StaticBody3D.new() + + static_body.add_child(collision_shape) + static_body.add_child(m) + add_child(static_body) + + var tree_prefab = preload("res://prefab/tree.tscn") + + var space = get_world_3d().direct_space_state + + var random = RandomNumberGenerator.new() + random.randomize() + var num_trees = random.randi_range(5, 15) - add_child(m) + for i in num_trees: + var cast_pos = Vector3(random.randf_range(0, width*scale_x), height*scale_y, random.randf_range(0, depth*scale_z)) + var cast_dest = Vector3(cast_pos.x, 0, cast_pos.z) + var query = PhysicsRayQueryParameters3D.create(cast_pos, cast_dest) + var result = space.intersect_ray(query) + + if result: + var pos = result.position + var new_tree = tree_prefab.instantiate() + new_tree.position = pos + add_child(new_tree) # Called every frame. 'delta' is the elapsed time since the previous frame. func _process(_delta): |