diff options
-rw-r--r-- | scenes/Main.tscn | 9 | ||||
-rw-r--r-- | scenes/UI/cursor.gd | 29 | ||||
-rw-r--r-- | scenes/grid_manager.gd | 16 | ||||
-rw-r--r-- | scenes/grid_manager.gd.uid | 1 |
4 files changed, 45 insertions, 10 deletions
diff --git a/scenes/Main.tscn b/scenes/Main.tscn index 59c5e82..dccce73 100644 --- a/scenes/Main.tscn +++ b/scenes/Main.tscn @@ -1,8 +1,9 @@ -[gd_scene load_steps=6 format=4 uid="uid://chwnewu8l45kj"] +[gd_scene load_steps=7 format=4 uid="uid://chwnewu8l45kj"] [ext_resource type="Texture2D" uid="uid://di2vybjsniag4" path="res://assets/tilemap.png" id="1_rvslj"] [ext_resource type="Script" uid="uid://i5bjnah05h14" path="res://path_spawner.gd" id="2_0bbpv"] [ext_resource type="PackedScene" uid="uid://cq6d7gmjbwl14" path="res://scenes/UI/cursor.tscn" id="4_rarhs"] +[ext_resource type="Script" uid="uid://c8p74tnba8rs8" path="res://scenes/grid_manager.gd" id="4_vcsgt"] [sub_resource type="TileSetAtlasSource" id="TileSetAtlasSource_tjuek"] texture = ExtResource("1_rvslj") @@ -1083,6 +1084,7 @@ texture = ExtResource("1_rvslj") 46:21/0 = 0 47:21/0 = 0 48:21/0 = 0 +0:0/0 = 0 [sub_resource type="TileSet" id="TileSet_47enk"] sources/0 = SubResource("TileSetAtlasSource_tjuek") @@ -1090,7 +1092,7 @@ sources/0 = SubResource("TileSetAtlasSource_tjuek") [node name="Main" type="Node2D"] [node name="L1" type="TileMapLayer" parent="."] -tile_map_data = PackedByteArray("AAAAAAoAAAAIAAEAAGABAAoAAAAIAAEAAGACAAoAAAAIAAEAAGADAAoAAAAIAAEAAGAEAAoAAAAIAAEAAGAFAAoAAAAIAAEAAGAGAAoAAAAIAAEAAGAHAAoAAAAIAAEAAGAIAAoAAAAIAAEAAGAJAAoAAAAIAAEAAGAKAAoAAAAIAAEAAGALAAoAAAAIAAEAAGAMAAoAAAAIAAEAAGANAAoAAAAIAAEAAGAOAAoAAAAIAAEAAGAPAAoAAAAJAAEAADAPAAkAAAAIAAEAAAAPAAgAAAAIAAEAAAAPAAcAAAAIAAEAAAAPAAYAAAAJAAEAAFAOAAYAAAAIAAEAAGANAAYAAAAIAAEAAGAMAAYAAAAIAAEAAGALAAYAAAAIAAEAAGAKAAYAAAAIAAEAAGAJAAYAAAAIAAEAAGAIAAYAAAAIAAEAAGAHAAYAAAAIAAEAAGAGAAYAAAAIAAEAAGAFAAYAAAAIAAEAAGAEAAMAAAAJAAEAAAAEAAUAAAAIAAEAADAEAAQAAAAIAAEAADAFAAMAAAAIAAEAAGAGAAMAAAAIAAEAAGAHAAMAAAAIAAEAAGAIAAMAAAAIAAEAAGAJAAMAAAAIAAEAAGAKAAMAAAAIAAEAAGALAAMAAAAIAAEAAGAMAAMAAAAIAAEAAGANAAMAAAAIAAEAAGAOAAMAAAAIAAEAAGAPAAMAAAAIAAEAAGAQAAMAAAAIAAEAAGARAAMAAAAIAAEAAGASAAMAAAAIAAEAAGATAAMAAAAIAAEAAGAEAAYAAAAJAAEAAGAHAAAAAAASABQAAAAGAAAAAAAAAAEAAAAFAAAAAAASABUAAAAEAAAAAAARABUAAAADAAAAAAAQABUAAAACAAAAAAAQABQAAAACAAEAAAAQABUAAAAHAAEAAAASABUAAAAGAAEAAAARABUAAAAFAAEAAAARABUAAAAEAAEAAAARABUAAAADAAEAAAARABUAAAAPAA4AAAALAAUAAAAQAA4AAAAIAAUAAAARAA4AAAAIAAUAAAASAA4AAAAIAAUAAAATAA0AAAAIAAUAAAATAA4AAAAIAAUAAAALAA4AAAAKAAUAAAAMAA4AAAAJAAUAAFANAA4AAAAJAAUAAFAOAA4AAAAJAAUAAFAPAA0AAAAKAAUAAAAQAA0AAAAJAAUAAFARAA0AAAAJAAUAAFASAAsAAAAKAAUAAAASAAwAAAAJAAUAAAASAA0AAAALAAUAAAATAAsAAAAJAAUAAFATAAwAAAAIAAUAAAATAAQAAAARAAkAAAATAAIAAAARAAkAAAAKAA4AAAATAAYAAAAMAA0AAAATAAYAAAAOAA0AAAABAAEAAAANAA0AAAASAAYAAAAQAAwAAAASAAYAAAALAA0AAAADAAIAAAARAAsAAAABAAEAAAARAAwAAAABAAEAAAAPAAwAAAAEAAEAAAASAAoAAAAEAAEAAAAMAAwAAAAGAAIAAAANAAwAAAACAAEAAAAJAA4AAAABAAEAAAAKAAwAAAABAAEAAAAOAAsAAAABAAEAAAARAAkAAAABAAEAAAARAAoAAAACAAEAAAAPAAsAAAACAAEAAAAIAA4AAAADAAEAAAAIAA0AAAAAAAEAAAAHAA0AAAACAAEAAAAHAA4AAAABAAMAAAAGAA4AAAABAAMAAAAFAA4AAAABAAMAAAAEAA4AAAABAAMAAAADAA4AAAABAAMAAAACAA4AAAABAAMAAAABAA4AAAABAAMAAAAAAA4AAAABAAMAAAAKAA0AAAAFAAIAAAAQAAcAAAADAAAAAAARAAcAAAADAAAAAAASAAcAAAADAAAAAAATAAcAAAADAAAAAAALAAwAAAAAAAIAAAACAAcAAAAAAAIAAAAGAAIAAAAAAAIAAAANAAQAAAAAAAIAAAABAAsAAAAAAAIAAAABAAEAAAAAAAIAAAAMAAAAAAAAAAIAAAARAAUAAAAAAAIAAAAEAAwAAAABAAEAAAAHAAcAAAABAAEAAAALAAEAAAABAAEAAAASAAgAAAABAAEAAAASAAEAAAABAAEAAAABAAUAAAABAAEAAAABAAkAAAATAAYAAAAOAAQAAAATAAYAAAATAAkAAAATAAYAAAABAA0AAAAdAAcAAAASAAkAAAAOAAoAAAABAAAAAAAOAAoAAAAAAAwAAAADAAEAAAACAAkAAAADAAEAAAACAAsAAAADAAEAAAAAAAgAAAADAAEAAAAAAAsAAAAEAAEAAAABAAgAAAAEAAEAAAAAAAYAAAAEAAEAAAAAAAcAAAAEAAEAAAACAAwAAAAEAAEAAAABAAwAAAAEAAIAAAAAAA0AAAAEAAIAAAABAAYAAAADAAIAAAACAAgAAAADAAIAAAAEAA0AAAADAAIAAAAGAAsAAAAEAAIAAAAGAA0AAAADAAEAAAAFAAwAAAABAAEAAAADAA0AAAABAAEAAAADAAwAAAAGAAIAAAANAAAAAAAQAA8AAAAOAAAAAAARAA8AAAAPAAAAAAARAA8AAAAQAAAAAAARAA8AAAARAAAAAAARAA8AAAASAAAAAAARAA8AAAATAAAAAAARAA8AAAACAAIAAAABAAEAAAADAAIAAAABAAEAAAABAAMAAAABAAEAAAAIAAEAAAABAAEAAAACAAUAAAADAAIAAAAAAAIAAAADAAIAAAABAAIAAAAGAAIAAAAIAAAAAAAFAAEAAAAKAAAAAAAFAAEAAAAIAAIAAAAFAAEAAAAAAAMAAAAAAAEAAAAAAAAAAAAAAAEAAAACAAQAAAAAAAEAAAACAAYAAAAFAAIAAAAJAAAAAAATAAYAAAALAAAAAAASAAYAAAAAAAQAAAAOAAYAAAAAAAkAAAAOAAYAAAAKAAsAAAAOAAYAAAAFAA0AAAAPAAYAAAATAAoAAAAPAAYAAAAMAAEAAAAPAAYAAAA=") +tile_map_data = PackedByteArray("AAAAAAoAAAAIAAEAAGABAAoAAAAIAAEAAGACAAoAAAAIAAEAAGADAAoAAAAIAAEAAGAEAAoAAAAIAAEAAGAFAAoAAAAIAAEAAGAGAAoAAAAIAAEAAGAHAAoAAAAIAAEAAGAIAAoAAAAIAAEAAGAJAAoAAAAIAAEAAGAKAAoAAAAIAAEAAGALAAoAAAAIAAEAAGAMAAoAAAAIAAEAAGANAAoAAAAIAAEAAGAOAAoAAAAIAAEAAGAPAAoAAAAJAAEAADAPAAkAAAAIAAEAAAAPAAgAAAAIAAEAAAAPAAcAAAAIAAEAAAAPAAYAAAAJAAEAAFAOAAYAAAAIAAEAAGANAAYAAAAIAAEAAGAMAAYAAAAIAAEAAGALAAYAAAAIAAEAAGAKAAYAAAAIAAEAAGAJAAYAAAAIAAEAAGAIAAYAAAAIAAEAAGAHAAYAAAAIAAEAAGAGAAYAAAAIAAEAAGAFAAYAAAAIAAEAAGAEAAMAAAAJAAEAAAAEAAUAAAAIAAEAADAEAAQAAAAIAAEAADAFAAMAAAAIAAEAAGAGAAMAAAAIAAEAAGAHAAMAAAAIAAEAAGAIAAMAAAAIAAEAAGAJAAMAAAAIAAEAAGAKAAMAAAAIAAEAAGALAAMAAAAIAAEAAGAMAAMAAAAIAAEAAGANAAMAAAAIAAEAAGAOAAMAAAAIAAEAAGAPAAMAAAAIAAEAAGAQAAMAAAAIAAEAAGARAAMAAAAIAAEAAGASAAMAAAAIAAEAAGATAAMAAAAIAAEAAGAEAAYAAAAJAAEAAGAHAAAAAAASABQAAAAGAAAAAAAAAAEAAAAFAAAAAAASABUAAAAEAAAAAAARABUAAAADAAAAAAAQABUAAAACAAAAAAAQABQAAAACAAEAAAAQABUAAAAHAAEAAAASABUAAAAGAAEAAAARABUAAAAFAAEAAAARABUAAAAEAAEAAAARABUAAAADAAEAAAARABUAAAAPAA4AAAALAAUAAAAQAA4AAAAIAAUAAAARAA4AAAAIAAUAAAASAA4AAAAIAAUAAAATAA0AAAAIAAUAAAATAA4AAAAIAAUAAAALAA4AAAAKAAUAAAAMAA4AAAAJAAUAAFANAA4AAAAJAAUAAFAOAA4AAAAJAAUAAFAPAA0AAAAKAAUAAAAQAA0AAAAJAAUAAFARAA0AAAAJAAUAAFASAAsAAAAKAAUAAAASAAwAAAAJAAUAAAASAA0AAAALAAUAAAATAAsAAAAJAAUAAFATAAwAAAAIAAUAAAATAAQAAAARAAkAAAATAAIAAAARAAkAAAAKAA4AAAATAAYAAAAMAA0AAAATAAYAAAAOAA0AAAABAAEAAAANAA0AAAASAAYAAAAQAAwAAAASAAYAAAALAA0AAAADAAIAAAARAAsAAAABAAEAAAARAAwAAAABAAEAAAAPAAwAAAAEAAEAAAASAAoAAAAEAAEAAAAMAAwAAAAGAAIAAAANAAwAAAACAAEAAAAJAA4AAAABAAEAAAAKAAwAAAABAAEAAAAOAAsAAAABAAEAAAARAAkAAAABAAEAAAARAAoAAAACAAEAAAAPAAsAAAACAAEAAAAIAA4AAAADAAEAAAAIAA0AAAAAAAEAAAAHAA0AAAACAAEAAAAHAA4AAAABAAMAAAAGAA4AAAABAAMAAAAFAA4AAAABAAMAAAAEAA4AAAABAAMAAAADAA4AAAABAAMAAAACAA4AAAABAAMAAAABAA4AAAABAAMAAAAAAA4AAAABAAMAAAAKAA0AAAAFAAIAAAAQAAcAAAADAAAAAAARAAcAAAADAAAAAAASAAcAAAADAAAAAAATAAcAAAADAAAAAAALAAwAAAAAAAIAAAACAAcAAAAAAAIAAAANAAQAAAAAAAIAAAABAAsAAAAAAAIAAAABAAEAAAAAAAIAAAAMAAAAAAAAAAIAAAARAAUAAAAAAAIAAAAEAAwAAAABAAEAAAAHAAcAAAABAAEAAAALAAEAAAABAAEAAAASAAgAAAABAAEAAAASAAEAAAABAAEAAAABAAUAAAABAAEAAAABAAkAAAATAAYAAAAOAAQAAAATAAYAAAATAAkAAAATAAYAAAABAA0AAAAdAAcAAAASAAkAAAAOAAoAAAABAAAAAAAOAAoAAAAAAAwAAAADAAEAAAACAAkAAAADAAEAAAACAAsAAAADAAEAAAAAAAgAAAADAAEAAAAAAAsAAAAEAAEAAAABAAgAAAAEAAEAAAAAAAYAAAAEAAEAAAAAAAcAAAAEAAEAAAACAAwAAAAEAAEAAAABAAwAAAAEAAIAAAAAAA0AAAAEAAIAAAABAAYAAAADAAIAAAACAAgAAAADAAIAAAAEAA0AAAADAAIAAAAGAAsAAAAEAAIAAAAGAA0AAAADAAEAAAADAA0AAAABAAEAAAADAAwAAAAGAAIAAAANAAAAAAAQAA8AAAAOAAAAAAARAA8AAAAPAAAAAAARAA8AAAAQAAAAAAARAA8AAAARAAAAAAARAA8AAAASAAAAAAARAA8AAAATAAAAAAARAA8AAAACAAIAAAABAAEAAAADAAIAAAABAAEAAAABAAMAAAABAAEAAAAIAAEAAAABAAEAAAACAAUAAAADAAIAAAAAAAIAAAADAAIAAAABAAIAAAAGAAIAAAAIAAAAAAAFAAEAAAAKAAAAAAAFAAEAAAAIAAIAAAAFAAEAAAAAAAMAAAAAAAEAAAAAAAAAAAAAAAEAAAACAAQAAAAAAAEAAAACAAYAAAAFAAIAAAAJAAAAAAATAAYAAAALAAAAAAASAAYAAAAAAAQAAAAOAAYAAAAAAAkAAAAOAAYAAAAKAAsAAAAOAAYAAAAFAA0AAAAPAAYAAAATAAoAAAAPAAYAAAAMAAEAAAAPAAYAAAAFAAwAAAABAAEAAAAGAAIAAAAAAAIAAAA=") tile_set = SubResource("TileSet_47enk") [node name="PathSpawner" type="Node2D" parent="."] @@ -1104,4 +1106,7 @@ autostart = true [node name="Cursor" parent="." instance=ExtResource("4_rarhs")] +[node name="GridManager" type="Node" parent="."] +script = ExtResource("4_vcsgt") + [connection signal="timeout" from="PathSpawner/Timer" to="PathSpawner" method="_on_timer_timeout"] diff --git a/scenes/UI/cursor.gd b/scenes/UI/cursor.gd index 158a2a4..7f9a7ae 100644 --- a/scenes/UI/cursor.gd +++ b/scenes/UI/cursor.gd @@ -1,8 +1,11 @@ extends Node2D -var tile_size = 16.0 -var max_x = 20 * tile_size -var max_y = 15 * tile_size +@onready var grid_manager = get_node("../GridManager") +@onready var tilemap = get_node("../L1") + +var tile_size : float +var max_x : float +var max_y : float var dirs = {"move_right": Vector2.RIGHT, "move_left": Vector2.LEFT, @@ -11,9 +14,13 @@ var dirs = {"move_right": Vector2.RIGHT, var towers : Dictionary func _ready(): + tile_size = grid_manager.tile_size + max_x = 20 * tile_size + max_y = 15 * tile_size + towers["place_warlock"] = preload("res://scenes/defenders/warlock.tscn") position = position.snapped(Vector2.ONE * tile_size) - position += Vector2.ONE * tile_size/2 + position += Vector2.ONE * tile_size / 2 func _unhandled_input(event): for dir in dirs.keys(): @@ -26,10 +33,12 @@ func _unhandled_input(event): return func handle_tower(tower): - var tmp = tower.instantiate() - var path = get_tree().get_root().get_node("Main/Defenders") - path.add_child(tmp) - tmp.global_position = position + if is_valid_placement_tile(): + var tmp = tower.instantiate() + var path = get_tree().get_root().get_node("Main/Defenders") + path.add_child(tmp) + tmp.global_position = position + grid_manager.occupy_tile(position) func handle_move(dir): position += dir * tile_size @@ -37,3 +46,7 @@ func handle_move(dir): position.y = max(position.y, tile_size / 2) position.x = min(position.x, max_x - (tile_size / 2)) position.y = min(position.y, max_y - (tile_size / 2)) + +func is_valid_placement_tile(): + var tile_coords = tilemap.get_cell_atlas_coords(tilemap.local_to_map(global_position)) + return (tile_coords == (Vector2i(-1, -1))) && (!grid_manager.is_tile_occupied(position)) diff --git a/scenes/grid_manager.gd b/scenes/grid_manager.gd new file mode 100644 index 0000000..8fa59e5 --- /dev/null +++ b/scenes/grid_manager.gd @@ -0,0 +1,16 @@ +extends Node + +var occupied_tiles = {} + +@export var tile_size = 16.0 +@export var grid_width = 20 +@export var grid_height = 15 + +func is_tile_occupied(tile_position): + return occupied_tiles.has(tile_position) + +func occupy_tile(tile_position): + occupied_tiles[tile_position] = true + +func free_tile(tile_position): + occupied_tiles.erase(tile_position) diff --git a/scenes/grid_manager.gd.uid b/scenes/grid_manager.gd.uid new file mode 100644 index 0000000..424fc40 --- /dev/null +++ b/scenes/grid_manager.gd.uid @@ -0,0 +1 @@ +uid://c8p74tnba8rs8 |