From a429c3590de8300e877cc48be8aa88d287171f52 Mon Sep 17 00:00:00 2001 From: Valentin Stark Date: Thu, 16 Feb 2023 21:13:14 +0100 Subject: [PATCH] base map generation --- GridMap.tscn | 40 +++++++++++++++++++++++++++++++ MeshLib.tscn | 46 ++++++++++++++++++++++++++++++++++++ Player.gd | 20 ++++++++++++++++ ProceduralGenerator.gd | 52 +++++++++++++++++++++++++++++++++++++++++ default_env.tres | 7 ++++++ icon.png | Bin 0 -> 3305 bytes icon.png.import | 35 +++++++++++++++++++++++++++ meshes.meshlib | Bin 0 -> 202609 bytes project.godot | 26 +++++++++++++++++++++ 9 files changed, 226 insertions(+) create mode 100644 GridMap.tscn create mode 100644 MeshLib.tscn create mode 100644 Player.gd create mode 100644 ProceduralGenerator.gd create mode 100644 default_env.tres create mode 100644 icon.png create mode 100644 icon.png.import create mode 100644 meshes.meshlib create mode 100644 project.godot diff --git a/GridMap.tscn b/GridMap.tscn new file mode 100644 index 0000000..f4095f4 --- /dev/null +++ b/GridMap.tscn @@ -0,0 +1,40 @@ +[gd_scene load_steps=5 format=2] + +[ext_resource path="res://ProceduralGenerator.gd" type="Script" id=1] +[ext_resource path="res://meshes.meshlib" type="MeshLibrary" id=2] +[ext_resource path="res://Player.gd" type="Script" id=3] + +[sub_resource type="CapsuleMesh" id=1] + +[node name="Spatial" type="Spatial"] + +[node name="GridMap" type="GridMap" parent="."] +mesh_library = ExtResource( 2 ) +cell_size = Vector3( 1, 1, 1 ) +cell_octant_size = 512 +cell_center_x = false +cell_center_y = false +cell_center_z = false +script = ExtResource( 1 ) +__meta__ = { +"_editor_clip_": 0 +} +ChunkWidth = 64 +ChunkHeight = 64 + +[node name="Player" type="Spatial" parent="GridMap"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 20, 0 ) +script = ExtResource( 3 ) + +[node name="MeshInstance" type="MeshInstance" parent="GridMap/Player"] +transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 0, 0 ) +mesh = SubResource( 1 ) + +[node name="Camera" type="Camera" parent="GridMap/Player"] +transform = Transform( 1, 0, 0, 0, -4.37114e-08, 1, 0, -1, -4.37114e-08, 0, 10, 0 ) + +[node name="MapUpdateTimer" type="Timer" parent="GridMap"] +wait_time = 0.1 +autostart = true + +[connection signal="timeout" from="GridMap/MapUpdateTimer" to="GridMap" method="_on_MapUpdateTimer_timeout"] diff --git a/MeshLib.tscn b/MeshLib.tscn new file mode 100644 index 0000000..5b0094f --- /dev/null +++ b/MeshLib.tscn @@ -0,0 +1,46 @@ +[gd_scene load_steps=8 format=2] + +[sub_resource type="CubeMesh" id=1] + +[sub_resource type="SpatialMaterial" id=2] +albedo_color = Color( 0.266667, 0.211765, 0.74902, 1 ) + +[sub_resource type="SpatialMaterial" id=3] +albedo_color = Color( 0.054902, 0.588235, 0.843137, 1 ) + +[sub_resource type="SpatialMaterial" id=4] +albedo_color = Color( 0.882353, 0.811765, 0.0588235, 1 ) + +[sub_resource type="SpatialMaterial" id=5] +albedo_color = Color( 0.121569, 0.756863, 0.32549, 1 ) + +[sub_resource type="SpatialMaterial" id=6] +albedo_color = Color( 0.611765, 0.611765, 0.611765, 1 ) + +[sub_resource type="SpatialMaterial" id=7] + +[node name="MeshLib" type="Spatial"] + +[node name="Tile_DeepWaterBlock" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 2 ) + +[node name="Tile_WaterBlock" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 3 ) + +[node name="Tile_SandBlock" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 4 ) + +[node name="Tile_GrassBlock" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 5 ) + +[node name="Tile_StoneBlock" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 6 ) + +[node name="Tile_SnowBlock" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 7 ) diff --git a/Player.gd b/Player.gd new file mode 100644 index 0000000..fb99e61 --- /dev/null +++ b/Player.gd @@ -0,0 +1,20 @@ +extends Spatial + + +const SPEED = 0.25 + + +func _physics_process(delta): + # Movement + var motion = Vector3() + + if Input.is_action_pressed("ui_up"): + motion.z += -1.0 + if Input.is_action_pressed("ui_down"): + motion.z += 1.0 + if Input.is_action_pressed("ui_left"): + motion.x += -1.0 + if Input.is_action_pressed("ui_right"): + motion.x += 1.0 + + global_transform.origin += motion * SPEED diff --git a/ProceduralGenerator.gd b/ProceduralGenerator.gd new file mode 100644 index 0000000..54af773 --- /dev/null +++ b/ProceduralGenerator.gd @@ -0,0 +1,52 @@ +extends GridMap + +export(int) var ChunkWidth: int = 0 +export(int) var ChunkHeight: int = 0 + +var heightMapTexture = NoiseTexture.new() + +onready var player = $Player + +func _ready(): + randomize() + heightMapTexture.width = 512 + heightMapTexture.height = 512 + heightMapTexture.noise = OpenSimplexNoise.new() + heightMapTexture.noise.seed = randi() + + print("Seed: " + str(heightMapTexture.noise.seed)) + + setGridChunk(0, ChunkWidth, 0, ChunkHeight) + +func generateGridChunk(playerPos: Vector3) -> void: + clear() + var chunkCenter = world_to_map(playerPos) + var rowStart: float = chunkCenter.z - (ChunkHeight / 2) + var rowEnd: float = chunkCenter.z + (ChunkHeight / 2) + var columnStart: float = chunkCenter.x - (ChunkWidth / 2) + var columnEnd: float = chunkCenter.x + (ChunkWidth / 2) + setGridChunk(columnStart, columnEnd, rowStart, rowEnd) + +func setGridChunk(columnStart: float, columnEnd: float, rowStart: float, rowEnd: float) -> void: + if columnStart < 0 : + columnStart = 0 + if rowStart < 0 : + rowStart = 0 + if columnEnd > heightMapTexture.width : + columnEnd = heightMapTexture.width - 1 + if rowEnd > heightMapTexture.height : + rowEnd = heightMapTexture.height - 1 + + for mz in range(rowStart, rowEnd): + for mx in range(columnStart, columnEnd): + var noiseValue: float = heightMapTexture.noise.get_noise_2d(mx, mz) + var weight: float = (noiseValue + 1) / 2 + var height: float = floor(lerp(0, 8, weight)) * 2 + for my in range(0, height): + var meshID = floor(my / 2) + set_cell_item(mx, my * 2, mz, meshID, 0) + + + +func _on_MapUpdateTimer_timeout(): + generateGridChunk(player.global_transform.origin) diff --git a/default_env.tres b/default_env.tres new file mode 100644 index 0000000..20207a4 --- /dev/null +++ b/default_env.tres @@ -0,0 +1,7 @@ +[gd_resource type="Environment" load_steps=2 format=2] + +[sub_resource type="ProceduralSky" id=1] + +[resource] +background_mode = 2 +background_sky = SubResource( 1 ) diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c98fbb601c83c81ec8c22b1dba7d1d57c62b323c GIT binary patch literal 3305 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 literal 0 HcmV?d00001 diff --git a/icon.png.import b/icon.png.import new file mode 100644 index 0000000..a4c02e6 --- /dev/null +++ b/icon.png.import @@ -0,0 +1,35 @@ +[remap] + +importer="texture" +type="StreamTexture" +path="res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.png" +dest_files=[ "res://.import/icon.png-487276ed1e3a0c39cad0279d744ee560.stex" ] + +[params] + +compress/mode=0 +compress/lossy_quality=0.7 +compress/hdr_mode=0 +compress/bptc_ldr=0 +compress/normal_map=0 +flags/repeat=0 +flags/filter=true +flags/mipmaps=false +flags/anisotropic=false +flags/srgb=2 +process/fix_alpha_border=true +process/premult_alpha=false +process/HDR_as_SRGB=false +process/invert_color=false +process/normal_map_invert_y=false +stream=false +size_limit=0 +detect_3d=true +svg/scale=1.0 diff --git a/meshes.meshlib b/meshes.meshlib new file mode 100644 index 0000000000000000000000000000000000000000..e65f9db5be035eb6fff558be5dd32aa9ecf9bbf8 GIT binary patch literal 202609 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