Added a grid map

This commit is contained in:
2024-02-18 22:19:17 +01:00
parent 3b2d8514a3
commit 0c15f00942
7 changed files with 132 additions and 28 deletions

View File

@ -0,0 +1,10 @@
[gd_scene load_steps=3 format=3 uid="uid://hvc8oecqweko"]
[ext_resource type="Material" uid="uid://bdsblfaxbipaa" path="res://world/grass/GrassMaterial.tres" id="1_xchh7"]
[ext_resource type="MultiMesh" uid="uid://dog5aq5n2q025" path="res://assets/grass/grass.multimesh" id="2_cpr6g"]
[node name="Grass" type="MultiMeshInstance3D"]
layers = 2
material_override = ExtResource("1_xchh7")
cast_shadow = 0
multimesh = ExtResource("2_cpr6g")

View File

@ -0,0 +1,4 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://dcktsgvchnmfb"]
[resource]
albedo_color = Color(0.34902, 0.227451, 0.054902, 1)

View File

@ -0,0 +1,6 @@
[gd_resource type="StandardMaterial3D" format=3 uid="uid://cola8rc0eoi0t"]
[resource]
diffuse_mode = 3
albedo_color = Color(0.0117647, 0.501961, 0.376471, 1)
emission = Color(0.00294706, 0.262987, 0.194557, 1)

View File

@ -0,0 +1,55 @@
[gd_scene load_steps=6 format=3 uid="uid://bf6qbs2qutjhb"]
[ext_resource type="PackedScene" uid="uid://cm0rho6adv2p7" path="res://world/water/Water.tscn" id="1_mxp3e"]
[ext_resource type="Material" uid="uid://dcktsgvchnmfb" path="res://world/grid/DirtMaterial.tres" id="1_wtnut"]
[ext_resource type="Material" uid="uid://cola8rc0eoi0t" path="res://world/grid/GrassMaterial.tres" id="2_2jt0v"]
[sub_resource type="PlaneMesh" id="PlaneMesh_spjf4"]
[sub_resource type="BoxShape3D" id="BoxShape3D_f52mr"]
size = Vector3(2, 1, 2)
[node name="MeshLibrary" type="Node3D"]
[node name="Dirt" type="MeshInstance3D" parent="."]
mesh = SubResource("PlaneMesh_spjf4")
surface_material_override/0 = ExtResource("1_wtnut")
[node name="StaticBody3D" type="StaticBody3D" parent="Dirt"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Dirt/StaticBody3D"]
shape = SubResource("BoxShape3D_f52mr")
[node name="Grass" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 2, 0, 0)
layers = 2
mesh = SubResource("PlaneMesh_spjf4")
surface_material_override/0 = ExtResource("2_2jt0v")
[node name="StaticBody3D" type="StaticBody3D" parent="Grass"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Grass/StaticBody3D"]
shape = SubResource("BoxShape3D_f52mr")
[node name="Grass2" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 4, 0, 0)
layers = 2
mesh = SubResource("PlaneMesh_spjf4")
surface_material_override/0 = ExtResource("2_2jt0v")
[node name="StaticBody3D" type="StaticBody3D" parent="Grass2"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Grass2/StaticBody3D"]
shape = SubResource("BoxShape3D_f52mr")
[node name="Water" parent="." instance=ExtResource("1_mxp3e")]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 6, 0, 0)
[node name="StaticBody3D" type="StaticBody3D" parent="Water"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.5, 0)
[node name="CollisionShape3D" type="CollisionShape3D" parent="Water/StaticBody3D"]
shape = SubResource("BoxShape3D_f52mr")

View File

@ -0,0 +1,41 @@
class_name WorldGrid
extends GridMap
@export var moisture_noise: Noise
@export var temperature_noise: Noise
@export var altitude_noise: Noise
@export var grass: PackedScene
var width := 60
var depth := 60
var current_pos := Vector3i(0, 0, 0)
var old_pos := Vector3i(NAN, NAN, NAN)
func _process(_delta):
current_pos = local_to_map(Global.player.position)
if current_pos != old_pos:
generate_chunk()
old_pos = current_pos
func generate_chunk():
for x in range(-width, width):
for z in range(-depth, depth):
var tile_x := current_pos.x + x
var tile_z := current_pos.z + z
var pos := Vector3i(tile_x, 0, tile_z)
if get_cell_item(pos) != -1:
continue
var moisture := moisture_noise.get_noise_2d(tile_x, tile_z)
# var temperature = temperature_noise.get_noise_2d(tile_x, tile_z)
# var altitude = altitude_noise.get_noise_2d(tile_x, tile_z)
var index := floori((moisture + 1.0) * 2.0)
set_cell_item(pos, index)
if index == 1:
var node := grass.instantiate() as Node3D
node.position = (pos * 2) + Vector3i(1, 0, 1)
add_child(node)

View File

@ -4,7 +4,6 @@
[sub_resource type="PlaneMesh" id="PlaneMesh_cybb0"]
material = ExtResource("1_yiqgh")
size = Vector2(25, 25)
[node name="Water" type="MeshInstance3D"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 25, 0, 0)