summaryrefslogtreecommitdiffstats
path: root/world/chunk
diff options
context:
space:
mode:
Diffstat (limited to 'world/chunk')
-rw-r--r--world/chunk/Chunk.gd1
-rw-r--r--world/chunk/Chunk.tscn6
-rw-r--r--world/chunk/ChunkGen.gd121
-rw-r--r--world/chunk/ChunkLoader.gd3
4 files changed, 99 insertions, 32 deletions
diff --git a/world/chunk/Chunk.gd b/world/chunk/Chunk.gd
index 4356caf..d1f91f7 100644
--- a/world/chunk/Chunk.gd
+++ b/world/chunk/Chunk.gd
@@ -11,6 +11,7 @@ onready var _collision_enabled = lod_close.collision_layer
func _ready():
lod_update()
+ $"Coords".text = str(ChunkLoader.v2_coords(self.transform.origin))
func lod_update():
match lod:
diff --git a/world/chunk/Chunk.tscn b/world/chunk/Chunk.tscn
index 5377ae9..3dbff96 100644
--- a/world/chunk/Chunk.tscn
+++ b/world/chunk/Chunk.tscn
@@ -44,3 +44,9 @@ _mesh = SubResource( 4 )
[node name="lod_close" type="StaticBody" parent="gen_tree"]
collision_layer = 8
collision_mask = 0
+
+[node name="Coords" type="Label3D" parent="."]
+pixel_size = 0.3
+billboard = 1
+double_sided = false
+text = "OwO"
diff --git a/world/chunk/ChunkGen.gd b/world/chunk/ChunkGen.gd
index 994d624..7420ae7 100644
--- a/world/chunk/ChunkGen.gd
+++ b/world/chunk/ChunkGen.gd
@@ -7,9 +7,8 @@ var _seed
var monuments = []
func _ready():
- #randomize()
- #self._seed = randi()
- self._seed = 0
+ randomize()
+ self._seed = randi()
self.noise.seed = self._seed
self.noise.seed = 0
self.noise.period = 16
@@ -17,8 +16,9 @@ func _ready():
self.rng.seed = self._seed
func setup_monuments():
- monuments.push_back(DockMonument.new(Transform(Basis().rotated(Vector3.UP,0.0),Vector3(0.0,0.0,-600.0))))
- monuments.push_back(DockMonument.new(Transform(Basis().rotated(Vector3.UP,PI),Vector3(0.0,0.0,600.0))))
+ monuments.push_back(lighthouseMonument.new(Transform(Basis(),Vector3(300.0,0.0,-300.0))))
+ monuments.push_back(lighthouseMonument.new(Transform(Basis(),Vector3(0.0,0.0,-1000.0))))
+ monuments.push_back(lighthouseMonument.new(Transform(Basis(),Vector3(-500.0,0.0,-2500.0))))
func rng_2dv(coords:Vector2):
self.rng.seed = hash(coords)
@@ -41,9 +41,9 @@ func get_monument_at_chunk(chunk_coords:Vector2):
return null
func gen_monument(chunk, monument):
- var offset_to_origin = monument.origin_chunk - ChunkLoader.v2_coords(chunk.transform.origin)
var inst = monument.scene.instance()
- inst.transform.origin = ChunkLoader.v3_coords(offset_to_origin)
+ var offset_to_origin = monument.xform.origin - chunk.transform.origin
+ inst.transform.origin = offset_to_origin
inst.transform.basis = monument.xform.basis
chunk.add_child(inst)
@@ -69,48 +69,109 @@ func make_multimesh(name,cnt,mesh):
var multi = MultiMesh.new()
multi_inst.multimesh = multi
multi.transform_format = MultiMesh.TRANSFORM_3D
+ multi.mesh = mesh
multi.instance_count = cnt
multi.visible_instance_count = 0
- multi.mesh = mesh
return multi_inst
-var rock_mesh = preload("res://world/obstacles/Rock_mesh.tres")
-var rock_mat = preload("res://world/obstacles/Rock_mat.tres")
+var rock1_mesh = preload("res://world/obstacles/rock/rock_1.obj")
+var rock2_mesh = preload("res://world/obstacles/rock/rock_2.obj")
+var rock3_mesh = preload("res://world/obstacles/rock/rock_3.obj")
+var rock4_mesh = preload("res://world/obstacles/rock/rock_4.obj")
+var rock_mat = preload("res://world/obstacles/rock/rock_material.tres")
func gen_rocks(chunk,tree):
- rock_mesh.material = rock_mat
- var multi = make_multimesh("rocks",200,rock_mesh)
- tree.add_child(multi)
- iterate_chunk(chunk, multi.multimesh, Vector2(10.0,10.0), funcref(self,"rock_rng"), [0.4,0.6,1.0,4.0,1.0,funcref(self,"make_rock")])
-
-var rock_lowres_mesh = preload("res://world/obstacles/Rock_lowres_mesh.tres")
+ var rocks1 = make_multimesh("rocks1",100,rock1_mesh)
+ var rocks2 = make_multimesh("rocks2",100,rock2_mesh)
+ var rocks3 = make_multimesh("rocks3",100,rock3_mesh)
+ var rocks4 = make_multimesh("rocks4",100,rock4_mesh)
+ rocks1.material_override = rock_mat
+ rocks2.material_override = rock_mat
+ rocks3.material_override = rock_mat
+ rocks4.material_override = rock_mat
+ tree.add_child(rocks1)
+ tree.add_child(rocks2)
+ tree.add_child(rocks3)
+ tree.add_child(rocks4)
+ iterate_chunk(chunk, rocks1.multimesh, Vector2(10.0,10.0), funcref(self,"rock_rng"), [1,funcref(self,"make_rock")])
+ iterate_chunk(chunk, rocks2.multimesh, Vector2(10.0,10.0), funcref(self,"rock_rng"), [3,funcref(self,"make_rock")])
+ iterate_chunk(chunk, rocks3.multimesh, Vector2(10.0,10.0), funcref(self,"rock_rng"), [4,funcref(self,"make_rock")])
+ iterate_chunk(chunk, rocks4.multimesh, Vector2(10.0,10.0), funcref(self,"rock_rng"), [2,funcref(self,"make_rock")])
+
+var rock_lowres_mesh = preload("res://world/obstacles/rock/rock_lowres_mesh.tres")
func gen_lowres_rocks(chunk,tree):
rock_lowres_mesh.material = rock_mat
var multi = make_multimesh("rocks",50,rock_lowres_mesh)
tree.add_child(multi)
- iterate_chunk(chunk, multi.multimesh, Vector2(20.0,20.0), funcref(self,"rock_rng"), [0.4,0.6,2.0,8.0,0.5,funcref(self,"make_rock")])
+ iterate_chunk(chunk, multi.multimesh, Vector2(20.0,20.0), funcref(self,"rock_rng"), [0,funcref(self,"make_rock")])
-var rock_coll = preload("res://world/obstacles/Rock_coll.tres")
+var rock_coll = preload("res://world/obstacles/rock/rock_collision.tres")
func gen_rock_hitboxes(chunk,tree):
- iterate_chunk(chunk, tree, Vector2(20.0,20.0), funcref(self,"rock_rng"), [0.4,0.6,1.0,4.0,1.0,funcref(self,"make_rock_hitbox")])
+ iterate_chunk(chunk, tree, Vector2(20.0,20.0), funcref(self,"rock_rng"), [0,funcref(self,"make_rock_hitbox")])
func rock_rng(chunk,rocks,chunk_coords:Vector2,data):
var coords = ChunkLoader.v3_coords(chunk_coords)
var basis = Basis()
+
var world_coords = chunk_coords + ChunkLoader.v2_coords(chunk.transform.origin)
self.rng_2dv(world_coords)
- var rng_val = self.rng.randf_range(0.0,TAU)
- basis = Basis(Vector3.UP,rng_val) * basis
var noise_val = self.noise.get_noise_2dv(world_coords * 0.125)
- if noise_val < data[0]:
+
+ #threshold to generate a rock
+ var noise_min_pointy = 0.4
+ var noise_max_pointy = 0.5
+ var noise_max_round = 0.7
+
+ if noise_val < noise_min_pointy:
return
- noise_val = min(noise_val,data[1])
- noise_val -= data[0]
- noise_val /= data[1] - data[0]
- noise_val = lerp(data[2],data[3],noise_val)
- basis = basis.scaled(Vector3.ONE*noise_val)
- basis = basis.scaled(Vector3(1.0,data[4],1.0))
- coords.y += (noise_val*data[4]*5.0)-5.0
- data[5].call_func(rocks,Transform(basis,coords))
+
+ var rock = self.rng.randi_range(1,4)
+ #choose a rock
+ if data[0] != 0:
+ if noise_val <= noise_max_pointy:
+ if rock != data[0]:
+ return
+ else:
+ if ((rock%2)+1) != data[0]:
+ return
+
+ #normalize noise from 0.0 to 1.0
+ noise_val = min(noise_val,noise_max_round)
+ noise_val -= noise_min_pointy
+ noise_val /= noise_max_round - noise_min_pointy
+
+ #random rotation
+ var rng_val = self.rng.randf_range(0.0,TAU)
+ basis = Basis(Vector3.UP,rng_val) * basis
+
+ #scale based on noise
+ var scale_min = 0.167
+ var scale_max = 0.667
+ var scale = lerp(scale_min,scale_max,noise_val)
+ basis = basis.scaled(Vector3.ONE*scale)
+
+ #scale the pointy rocks taller
+ if rock == 3 || rock == 4:
+ rng_val = self.rng.randf_range(1.0,1.25)
+ scale = rng_val * scale
+ basis = basis.scaled(Vector3(1.0,rng_val,1.0))
+
+ #normalize height
+ match rock:
+ 0:
+ coords.y += 30.0 * scale
+ 1:
+ coords.y += 31.5 * scale
+ 2:
+ coords.y += 27.5 * scale
+ 3:
+ coords.y += 42.5 * scale
+ 4:
+ coords.y += 40.0 * scale
+
+ #shift them all slightly down
+ coords.y -= 5.0
+
+ data[1].call_func(rocks,Transform(basis,coords))
func make_rock(rocks,xform:Transform):
rocks.visible_instance_count += 1
diff --git a/world/chunk/ChunkLoader.gd b/world/chunk/ChunkLoader.gd
index 0ea422a..5b1c2c0 100644
--- a/world/chunk/ChunkLoader.gd
+++ b/world/chunk/ChunkLoader.gd
@@ -126,6 +126,5 @@ func finish_chunk(chunk):
var coords = v2_coords(chunk.transform.origin)
loaded_chunks[coords] = weakref(chunk)
var monument = ChunkGen.get_monument_at_chunk(coords)
- if monument != null:
- if monument.loaded_chunk == null:
+ if monument != null && monument.loaded_chunk == null:
monument.loaded_chunk = coords