diff --git a/game/project.godot b/game/project.godot index d595080..d16a21f 100644 --- a/game/project.godot +++ b/game/project.godot @@ -25,6 +25,7 @@ MenuMusic="*res://scenes/UI/menu_music.tscn" MenuSfx="*res://scenes/UI/menu_sfx.tscn" AuthState="*res://scenes/UI/auth_state.gd" CharacterService="*res://scenes/UI/character_service.gd" +SelectedCharacter="*res://scenes/UI/selected_character.gd" [dotnet] diff --git a/game/scenes/Levels/location_level.gd b/game/scenes/Levels/location_level.gd new file mode 100644 index 0000000..fa67264 --- /dev/null +++ b/game/scenes/Levels/location_level.gd @@ -0,0 +1,15 @@ +extends Node3D + +@export var tile_size := 4.0 +@export var block_height := 1.0 + +@onready var _block: MeshInstance3D = $TerrainBlock +@onready var _camera: Camera3D = $Camera3D + +func _ready() -> void: + var coord := SelectedCharacter.get_coord() + var block_pos := Vector3(coord.x * tile_size, block_height * 0.5, coord.y * tile_size) + _block.position = block_pos + _block.scale = Vector3(tile_size, block_height, tile_size) + if _camera: + _camera.look_at(block_pos, Vector3.UP) diff --git a/game/scenes/Levels/location_level.gd.uid b/game/scenes/Levels/location_level.gd.uid new file mode 100644 index 0000000..6befa8a --- /dev/null +++ b/game/scenes/Levels/location_level.gd.uid @@ -0,0 +1 @@ +uid://1fico5npv6dy diff --git a/game/scenes/Levels/location_level.tscn b/game/scenes/Levels/location_level.tscn new file mode 100644 index 0000000..c62e156 --- /dev/null +++ b/game/scenes/Levels/location_level.tscn @@ -0,0 +1,23 @@ +[gd_scene load_steps=4 format=3 uid="uid://b7p7k1i4t0m2l"] + +[ext_resource type="Script" path="res://scenes/Levels/location_level.gd" id="1_6y4q1"] + +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_yu2x4"] +albedo_color = Color(0.2, 0.6, 0.2, 1) + +[sub_resource type="BoxMesh" id="BoxMesh_t2a5k"] +material = SubResource("StandardMaterial3D_yu2x4") + +[node name="LocationLevel" type="Node3D"] +script = ExtResource("1_6y4q1") + +[node name="TerrainBlock" type="MeshInstance3D" parent="."] +mesh = SubResource("BoxMesh_t2a5k") + +[node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.819152, 0.573576, 0, -0.573576, 0.819152, 0, 6, 0) +shadow_enabled = true + +[node name="Camera3D" type="Camera3D" parent="."] +transform = Transform3D(1, 0, 0, 0, 0.92388, 0.382683, 0, -0.382683, 0.92388, 0, 6, 10) +current = true diff --git a/game/scenes/UI/character_screen.gd b/game/scenes/UI/character_screen.gd index 07f2864..7723b95 100644 --- a/game/scenes/UI/character_screen.gd +++ b/game/scenes/UI/character_screen.gd @@ -69,11 +69,11 @@ func _on_add_button_pressed() -> void: else: _status_label.text = "Character created, but response was unexpected." -func _on_delete_button_pressed() -> void: - var selected := _character_list.get_selected_items() - if selected.is_empty(): - _status_label.text = "Select a character to delete." - return +func _on_delete_button_pressed() -> void: + var selected := _character_list.get_selected_items() + if selected.is_empty(): + _status_label.text = "Select a character to delete." + return var index := selected[0] if index < 0 or index >= _characters.size(): @@ -94,8 +94,23 @@ func _on_delete_button_pressed() -> void: return _characters.remove_at(index) - _character_list.remove_item(index) - _status_label.text = "Character deleted." + _character_list.remove_item(index) + _status_label.text = "Character deleted." + +func _on_select_button_pressed() -> void: + var selected := _character_list.get_selected_items() + if selected.is_empty(): + _status_label.text = "Select a character first." + return + + var index := selected[0] + if index < 0 or index >= _characters.size(): + _status_label.text = "Invalid selection." + return + + var character: Dictionary = _characters[index] + SelectedCharacter.set_character(character) + get_tree().change_scene_to_file("res://scenes/Levels/location_level.tscn") func _on_refresh_button_pressed() -> void: _load_characters() diff --git a/game/scenes/UI/character_screen.tscn b/game/scenes/UI/character_screen.tscn index 1131bd7..59e7a63 100644 --- a/game/scenes/UI/character_screen.tscn +++ b/game/scenes/UI/character_screen.tscn @@ -87,16 +87,23 @@ theme = ExtResource("4_5b3b7") text = "ADD" text_alignment = 1 -[node name="ActionHBox" type="HBoxContainer" parent="MarginContainer/ContentCenter/ContentVBox"] -layout_mode = 2 -size_flags_horizontal = 4 -theme_override_constants/separation = 10 - -[node name="RefreshButton" type="Button" parent="MarginContainer/ContentCenter/ContentVBox/ActionHBox"] -layout_mode = 2 -size_flags_horizontal = 4 -theme = ExtResource("4_5b3b7") -text = "REFRESH" +[node name="ActionHBox" type="HBoxContainer" parent="MarginContainer/ContentCenter/ContentVBox"] +layout_mode = 2 +size_flags_horizontal = 4 +theme_override_constants/separation = 10 + +[node name="SelectButton" type="Button" parent="MarginContainer/ContentCenter/ContentVBox/ActionHBox"] +layout_mode = 2 +size_flags_horizontal = 4 +theme = ExtResource("4_5b3b7") +text = "SELECT" +text_alignment = 1 + +[node name="RefreshButton" type="Button" parent="MarginContainer/ContentCenter/ContentVBox/ActionHBox"] +layout_mode = 2 +size_flags_horizontal = 4 +theme = ExtResource("4_5b3b7") +text = "REFRESH" text_alignment = 1 [node name="DeleteButton" type="Button" parent="MarginContainer/ContentCenter/ContentVBox/ActionHBox"] @@ -123,9 +130,10 @@ text_alignment = 1 [node name="LogoutRequest" type="HTTPRequest" parent="."] unique_name_in_owner = true -[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/AddHBox/AddButton" to="." method="_on_add_button_pressed"] -[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/RefreshButton" to="." method="_on_refresh_button_pressed"] -[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/DeleteButton" to="." method="_on_delete_button_pressed"] -[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/BackButton" to="." method="_on_back_button_pressed"] -[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/LogoutButton" to="." method="_on_logout_button_pressed"] +[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/AddHBox/AddButton" to="." method="_on_add_button_pressed"] +[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/SelectButton" to="." method="_on_select_button_pressed"] +[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/RefreshButton" to="." method="_on_refresh_button_pressed"] +[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/DeleteButton" to="." method="_on_delete_button_pressed"] +[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/BackButton" to="." method="_on_back_button_pressed"] +[connection signal="pressed" from="MarginContainer/ContentCenter/ContentVBox/ActionHBox/LogoutButton" to="." method="_on_logout_button_pressed"] [connection signal="request_completed" from="LogoutRequest" to="." method="_on_logout_request_completed"] diff --git a/game/scenes/UI/selected_character.gd b/game/scenes/UI/selected_character.gd new file mode 100644 index 0000000..179ac30 --- /dev/null +++ b/game/scenes/UI/selected_character.gd @@ -0,0 +1,16 @@ +extends Node + +var character: Dictionary = {} + +func set_character(data: Dictionary) -> void: + character = data + +func clear() -> void: + character = {} + +func get_coord() -> Vector2: + var coord: Dictionary = character.get("coord", {}) + return Vector2( + float(coord.get("x", 0)), + float(coord.get("y", 0)) + ) diff --git a/game/scenes/UI/selected_character.gd.uid b/game/scenes/UI/selected_character.gd.uid new file mode 100644 index 0000000..b0cb6fd --- /dev/null +++ b/game/scenes/UI/selected_character.gd.uid @@ -0,0 +1 @@ +uid://bbl0our5y4k7a