Fix blocky game generator
parent
55fd0105db
commit
9069bfaaa6
|
@ -3,7 +3,7 @@
|
||||||
[ext_resource path="res://blocky_game/blocks/voxel_library.tres" type="VoxelLibrary" id=1]
|
[ext_resource path="res://blocky_game/blocks/voxel_library.tres" type="VoxelLibrary" id=1]
|
||||||
[ext_resource path="res://blocky_game/blocks/terrain_material.tres" type="Material" id=2]
|
[ext_resource path="res://blocky_game/blocks/terrain_material.tres" type="Material" id=2]
|
||||||
[ext_resource path="res://blocky_game/blocks/terrain_material_transparent.tres" type="Material" id=3]
|
[ext_resource path="res://blocky_game/blocks/terrain_material_transparent.tres" type="Material" id=3]
|
||||||
[ext_resource path="res://blocky_game/generator/world_generator.tres" type="VoxelGenerator" id=4]
|
[ext_resource path="res://blocky_game/generator/world_generator.tres" type="VoxelGeneratorScript" id=4]
|
||||||
[ext_resource path="res://blocky_game/blocky_game.gd" type="Script" id=5]
|
[ext_resource path="res://blocky_game/blocky_game.gd" type="Script" id=5]
|
||||||
[ext_resource path="res://blocky_game/player/character_avatar.tscn" type="PackedScene" id=6]
|
[ext_resource path="res://blocky_game/player/character_avatar.tscn" type="PackedScene" id=6]
|
||||||
[ext_resource path="res://blocky_game/blocks/stairs/stairs_nx.obj" type="ArrayMesh" id=7]
|
[ext_resource path="res://blocky_game/blocks/stairs/stairs_nx.obj" type="ArrayMesh" id=7]
|
||||||
|
@ -61,7 +61,6 @@ environment = SubResource( 2 )
|
||||||
[node name="VoxelTerrain" type="VoxelTerrain" parent="."]
|
[node name="VoxelTerrain" type="VoxelTerrain" parent="."]
|
||||||
stream = SubResource( 3 )
|
stream = SubResource( 3 )
|
||||||
voxel_library = ExtResource( 1 )
|
voxel_library = ExtResource( 1 )
|
||||||
viewer_path = NodePath("../CharacterAvatar")
|
|
||||||
generate_collisions = false
|
generate_collisions = false
|
||||||
run_stream_in_editor = false
|
run_stream_in_editor = false
|
||||||
material/0 = ExtResource( 2 )
|
material/0 = ExtResource( 2 )
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#tool
|
#tool
|
||||||
extends VoxelGenerator
|
extends VoxelGeneratorScript
|
||||||
|
|
||||||
const Structure = preload("./structure.gd")
|
const Structure = preload("./structure.gd")
|
||||||
const TreeGenerator = preload("./tree_generator.gd")
|
const TreeGenerator = preload("./tree_generator.gd")
|
||||||
|
@ -62,11 +62,11 @@ func _init():
|
||||||
_heightmap_noise.octaves = 4
|
_heightmap_noise.octaves = 4
|
||||||
|
|
||||||
|
|
||||||
func get_used_channels_mask() -> int:
|
func _get_used_channels_mask() -> int:
|
||||||
return 1 << _CHANNEL
|
return 1 << _CHANNEL
|
||||||
|
|
||||||
|
|
||||||
func generate_block(buffer: VoxelBuffer, origin_in_voxels: Vector3, lod: int):
|
func _generate_block(buffer: VoxelBuffer, origin_in_voxels: Vector3, lod: int):
|
||||||
# Assuming input is cubic in our use case (it doesn't have to be!)
|
# Assuming input is cubic in our use case (it doesn't have to be!)
|
||||||
var block_size := int(buffer.get_size().x)
|
var block_size := int(buffer.get_size().x)
|
||||||
var oy := int(origin_in_voxels.y)
|
var oy := int(origin_in_voxels.y)
|
||||||
|
@ -89,7 +89,7 @@ func generate_block(buffer: VoxelBuffer, origin_in_voxels: Vector3, lod: int):
|
||||||
|
|
||||||
else:
|
else:
|
||||||
var rng := RandomNumberGenerator.new()
|
var rng := RandomNumberGenerator.new()
|
||||||
rng.seed = get_chunk_seed_2d(chunk_pos)
|
rng.seed = _get_chunk_seed_2d(chunk_pos)
|
||||||
|
|
||||||
var gx : int
|
var gx : int
|
||||||
var gz := int(origin_in_voxels.z)
|
var gz := int(origin_in_voxels.z)
|
||||||
|
@ -128,7 +128,6 @@ func generate_block(buffer: VoxelBuffer, origin_in_voxels: Vector3, lod: int):
|
||||||
# Surface block
|
# Surface block
|
||||||
buffer.set_voxel(WATER_TOP, x, block_size - 1, z, _CHANNEL)
|
buffer.set_voxel(WATER_TOP, x, block_size - 1, z, _CHANNEL)
|
||||||
|
|
||||||
|
|
||||||
gx += 1
|
gx += 1
|
||||||
|
|
||||||
gz += 1
|
gz += 1
|
||||||
|
@ -139,14 +138,14 @@ func generate_block(buffer: VoxelBuffer, origin_in_voxels: Vector3, lod: int):
|
||||||
var voxel_tool := buffer.get_voxel_tool()
|
var voxel_tool := buffer.get_voxel_tool()
|
||||||
var structure_instances := []
|
var structure_instances := []
|
||||||
|
|
||||||
get_tree_instances_in_chunk(chunk_pos, origin_in_voxels, block_size, structure_instances)
|
_get_tree_instances_in_chunk(chunk_pos, origin_in_voxels, block_size, structure_instances)
|
||||||
|
|
||||||
# Relative to current block
|
# Relative to current block
|
||||||
var block_aabb := AABB(Vector3(), buffer.get_size() + Vector3(1, 1, 1))
|
var block_aabb := AABB(Vector3(), buffer.get_size() + Vector3(1, 1, 1))
|
||||||
|
|
||||||
for dir in _moore_dirs:
|
for dir in _moore_dirs:
|
||||||
var ncpos : Vector3 = (chunk_pos + dir).round()
|
var ncpos : Vector3 = (chunk_pos + dir).round()
|
||||||
get_tree_instances_in_chunk(ncpos, origin_in_voxels, block_size, structure_instances)
|
_get_tree_instances_in_chunk(ncpos, origin_in_voxels, block_size, structure_instances)
|
||||||
|
|
||||||
for structure_instance in structure_instances:
|
for structure_instance in structure_instances:
|
||||||
var pos : Vector3 = structure_instance[0]
|
var pos : Vector3 = structure_instance[0]
|
||||||
|
@ -160,11 +159,11 @@ func generate_block(buffer: VoxelBuffer, origin_in_voxels: Vector3, lod: int):
|
||||||
buffer.optimize()
|
buffer.optimize()
|
||||||
|
|
||||||
|
|
||||||
func get_tree_instances_in_chunk(
|
func _get_tree_instances_in_chunk(
|
||||||
cpos: Vector3, offset: Vector3, chunk_size: int, tree_instances: Array):
|
cpos: Vector3, offset: Vector3, chunk_size: int, tree_instances: Array):
|
||||||
|
|
||||||
var rng := RandomNumberGenerator.new()
|
var rng := RandomNumberGenerator.new()
|
||||||
rng.seed = get_chunk_seed_2d(cpos)
|
rng.seed = _get_chunk_seed_2d(cpos)
|
||||||
|
|
||||||
for i in 4:
|
for i in 4:
|
||||||
var pos := Vector3(rng.randi() % chunk_size, 0, rng.randi() % chunk_size)
|
var pos := Vector3(rng.randi() % chunk_size, 0, rng.randi() % chunk_size)
|
||||||
|
@ -182,7 +181,7 @@ func get_tree_instances_in_chunk(
|
||||||
# return cpos.x ^ (13 * int(cpos.y)) ^ (31 * int(cpos.z))
|
# return cpos.x ^ (13 * int(cpos.y)) ^ (31 * int(cpos.z))
|
||||||
|
|
||||||
|
|
||||||
static func get_chunk_seed_2d(cpos: Vector3) -> int:
|
static func _get_chunk_seed_2d(cpos: Vector3) -> int:
|
||||||
return int(cpos.x) ^ (31 * int(cpos.z))
|
return int(cpos.x) ^ (31 * int(cpos.z))
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[gd_resource type="VoxelGenerator" load_steps=2 format=2]
|
[gd_resource type="VoxelGeneratorScript" load_steps=2 format=2]
|
||||||
|
|
||||||
[ext_resource path="res://blocky_game/generator/generator.gd" type="Script" id=1]
|
[ext_resource path="res://blocky_game/generator/generator.gd" type="Script" id=1]
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue