Now About Social Code
summaryrefslogtreecommitdiff
path: root/scripts/level_gen.gd
diff options
context:
space:
mode:
authorLucas Fryzek <lucas.fryzek@fryzekconcepts.com>2023-09-10 20:15:31 -0400
committerLucas Fryzek <lucas.fryzek@fryzekconcepts.com>2023-09-10 20:15:31 -0400
commit1e694fce7e4ba915861a5be543e40667b9da44ed (patch)
treeabd0929fe486d81b14c4900fc48294fb4544f804 /scripts/level_gen.gd
parente2af60e3985317e9c4ec15e60f83bd8f5e49110e (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.gd40
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):