diff options
author | bd <bdunahu@operationnull.com> | 2025-05-22 23:05:36 -0400 |
---|---|---|
committer | bd <bdunahu@operationnull.com> | 2025-05-22 23:05:36 -0400 |
commit | 834685c53554f831118a84207708cfd428d09fd9 (patch) | |
tree | 6bd8bd85c28d055c5947d554f9a99bc57aeaf1ae | |
parent | 69013e2a35969fbb52cd0c3db07787698eb8c5a3 (diff) |
Use a noise texture to randomly generate obstacles onto map
-rw-r--r-- | resources/map_generator_resource.tres | 6 | ||||
-rw-r--r-- | resources/obstacle_noise.tres | 8 | ||||
-rw-r--r-- | scripts/map_generator.gd | 5 | ||||
-rw-r--r-- | scripts/map_generator_resource.gd | 37 | ||||
-rw-r--r-- | scripts/obstacle_generator.gd | 34 | ||||
-rw-r--r-- | scripts/obstacle_generator.gd.uid | 1 | ||||
-rw-r--r-- | scripts/path_generator.gd | 14 |
7 files changed, 73 insertions, 32 deletions
diff --git a/resources/map_generator_resource.tres b/resources/map_generator_resource.tres index f767c1c..7c4a742 100644 --- a/resources/map_generator_resource.tres +++ b/resources/map_generator_resource.tres @@ -1,7 +1,11 @@ -[gd_resource type="Resource" load_steps=2 format=3 uid="uid://cdqqg7ni517ol"] +[gd_resource type="Resource" script_class="MapGeneratorResource" load_steps=2 format=3 uid="uid://cdqqg7ni517ol"] [ext_resource type="Script" uid="uid://bsc3qt5tyv2fc" path="res://scripts/map_generator_resource.gd" id="1_xlatm"] [resource] script = ExtResource("1_xlatm") +grid_width = 20 +grid_height = 15 +tile_size = 16 +min_path_size = 45 metadata/_custom_type_script = "uid://bsc3qt5tyv2fc" diff --git a/resources/obstacle_noise.tres b/resources/obstacle_noise.tres new file mode 100644 index 0000000..841e628 --- /dev/null +++ b/resources/obstacle_noise.tres @@ -0,0 +1,8 @@ +[gd_resource type="NoiseTexture2D" load_steps=2 format=3 uid="uid://c3eb1usff1duj"] + +[sub_resource type="FastNoiseLite" id="FastNoiseLite_4qtv4"] +noise_type = 0 +frequency = 0.1545 + +[resource] +noise = SubResource("FastNoiseLite_4qtv4") diff --git a/scripts/map_generator.gd b/scripts/map_generator.gd index 0b92ab1..35ade43 100644 --- a/scripts/map_generator.gd +++ b/scripts/map_generator.gd @@ -6,7 +6,12 @@ var _path : Array[Vector2i] var _pg : PathGenerator func _ready() -> void: + _make_obstables() _make_path() + +func _make_obstables(): + var _og : ObstacleGenerator = ObstacleGenerator.new($TileMapLayer) + _og.generate_obstacles() func _make_path(): _pg = PathGenerator.new($TileMapLayer) diff --git a/scripts/map_generator_resource.gd b/scripts/map_generator_resource.gd index 9bd8a57..fee187a 100644 --- a/scripts/map_generator_resource.gd +++ b/scripts/map_generator_resource.gd @@ -6,29 +6,18 @@ class_name MapGeneratorResource @export var tile_size : int = 16 @export var min_path_size : int = 45 -var path_straight_atlas_coords : Vector2i = Vector2i(8, 1) -var path_corner_atlas_coords : Vector2i = Vector2i(9, 1) -var path_empty_atlas_coords : Vector2i = Vector2i(0, 0) +var atlas_coords : Dictionary = { + "PATH_EMPTY": Vector2i(0, 0), + "PATH_STRAIGHT": Vector2i(8, 1), + "PATH_CORNER": Vector2i(9, 1), -var water_middle_atlas_coords : Vector2i = Vector2i(8, 5) -var water_shore_atlas_coords : Vector2i = Vector2i(9, 5) -var water_bend_outer_atlas_coords : Vector2i = Vector2i(10, 5) -var water_bend_inner_atlas_coords : Vector2i = Vector2i(11, 5) + "WATER_MIDDLE": Vector2i(8, 5), + "WATER_SHORE": Vector2i(9, 5), + "WATER_BEND_OUTER": Vector2i(10, 5), + "WATER_BEND_INNER": Vector2i(11, 5), -var obstruction_one_atlas_coords : Vector2i = Vector2i(18, 6) # dead trees -var obstruction_two_atlas_coords : Vector2i = Vector2i(19, 6) -var obstruction_three_atlas_coords : Vector2i = Vector2i(20, 6) - -var obstruction_four_atlas_coords : Vector2i = Vector2i(0, 1) # living trees -var obstruction_five_atlas_coords : Vector2i = Vector2i(1, 1) -var obstruction_six_atlas_coords : Vector2i = Vector2i(2, 1) -var obstruction_seven_atlas_coords : Vector2i = Vector2i(3, 1) -var obstruction_eight_atlas_coords : Vector2i = Vector2i(4, 1) -var obstruction_nine_atlas_coords : Vector2i = Vector2i(3, 2) - -var obstruction_ten_atlas_coords : Vector2i = Vector2i(0, 2) # grass -var obstruction_eleven_atlas_coords : Vector2i = Vector2i(1, 2) -var obstruction_twelve_atlas_coords : Vector2i = Vector2i(2, 2) - -var obstruction_thirteen_atlas_coords : Vector2i = Vector2i(5, 2) # rocks, bushes -var obstruction_fourteen_atlas_coords : Vector2i = Vector2i(6, 2) + "DEAD_TREE": [Vector2i(18, 6), Vector2i(19, 6), Vector2i(20, 6)], + "TREE": [Vector2i(0, 1), Vector2i(1, 1), Vector2i(2, 1), Vector2i(3, 1), Vector2i(4, 1), Vector2i(3, 2)], + "GRASS": [Vector2i(0, 2), Vector2i(5, 2), Vector2i(6, 2)], + "CAMPSITE": [Vector2i(2, 20), Vector2i(29, 7), Vector2i(14, 10), Vector2i(27, 7)] +} diff --git a/scripts/obstacle_generator.gd b/scripts/obstacle_generator.gd new file mode 100644 index 0000000..5b97820 --- /dev/null +++ b/scripts/obstacle_generator.gd @@ -0,0 +1,34 @@ +extends Object + +class_name ObstacleGenerator + +var map_config : MapGeneratorResource = preload("res://resources/map_generator_resource.tres") +var _noise_texture : NoiseTexture2D = preload("res://resources/obstacle_noise.tres") + +var _tile_map : TileMapLayer +var _noise : Noise + +func _init(tile_map_layer: TileMapLayer): + _tile_map = tile_map_layer + _noise = _noise_texture.noise + _noise.seed = randi() + +func generate_obstacles(): + for i in range(map_config.grid_width): + for j in range(map_config.grid_height): + var noise = _noise.get_noise_2d(i, j) + print(noise) + if noise < 0.25: + pass + elif noise < 0.5: + _draw_tile_from_pool(map_config.atlas_coords["TREE"], Vector2i(i, j)) + elif noise < 0.65: + _draw_tile_from_pool(map_config.atlas_coords["DEAD_TREE"], Vector2i(i, j)) + elif noise < 0.74: + _draw_tile_from_pool(map_config.atlas_coords["GRASS"], Vector2i(i, j)) + else: + _draw_tile_from_pool(map_config.atlas_coords["CAMPSITE"], Vector2i(i, j)) + +func _draw_tile_from_pool(pool : Array, pos : Vector2i): + var choice = pool[randi_range(0, pool.size() - 1)] + _tile_map.set_cell(pos, 0, choice) diff --git a/scripts/obstacle_generator.gd.uid b/scripts/obstacle_generator.gd.uid new file mode 100644 index 0000000..153591e --- /dev/null +++ b/scripts/obstacle_generator.gd.uid @@ -0,0 +1 @@ +uid://dqajkke8eqh0o diff --git a/scripts/path_generator.gd b/scripts/path_generator.gd index 30ffd3c..2b8a3a8 100644 --- a/scripts/path_generator.gd +++ b/scripts/path_generator.gd @@ -42,25 +42,25 @@ func draw_path(): for i in _path: var score : int = _get_tile_score(_path, i) - var atlas_coords : Vector2i = map_config.path_empty_atlas_coords + var atlas_coords : Vector2i = map_config.atlas_coords["PATH_EMPTY"] var rot : TileTransform = TileTransform.ROTATE_0 match score: 2, 8, 10: - atlas_coords = map_config.path_straight_atlas_coords + atlas_coords = map_config.atlas_coords["PATH_STRAIGHT"] rot = TileTransform.ROTATE_90 1, 4, 5: - atlas_coords = map_config.path_straight_atlas_coords + atlas_coords = map_config.atlas_coords["PATH_STRAIGHT"] 3: - atlas_coords = map_config.path_corner_atlas_coords + atlas_coords = map_config.atlas_coords["PATH_CORNER"] rot = TileTransform.ROTATE_270 6: - atlas_coords = map_config.path_corner_atlas_coords + atlas_coords = map_config.atlas_coords["PATH_CORNER"] 12: - atlas_coords = map_config.path_corner_atlas_coords + atlas_coords = map_config.atlas_coords["PATH_CORNER"] rot = TileTransform.ROTATE_90 9: - atlas_coords = map_config.path_corner_atlas_coords + atlas_coords = map_config.atlas_coords["PATH_CORNER"] rot = TileTransform.ROTATE_180 _display_tile(atlas_coords, rot, i) |