feat: added end and main menu screens
This commit is contained in:
		
							parent
							
								
									ba1545333a
								
							
						
					
					
						commit
						9d9acc51d5
					
				| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
[gd_scene load_steps=2 format=3 uid="uid://yrr5jjbpt60l"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://e3dmisrrgqq7" path="res://testmap.tscn" id="1_3f7mp"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://73cn4swq2gc7" path="res://game_ui.tscn" id="1_g28e3"]
 | 
			
		||||
 | 
			
		||||
[node name="GameRoot3D" type="GameRoot3D"]
 | 
			
		||||
first_boot_level = ExtResource("1_3f7mp")
 | 
			
		||||
first_boot_level = ExtResource("1_g28e3")
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										40
									
								
								godot/game_end_screen.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								godot/game_end_screen.tscn
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
[gd_scene load_steps=3 format=3 uid="uid://05prvqpy0r6m"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://73cn4swq2gc7" path="res://game_ui.tscn" id="1_c4p6k"]
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://e3dmisrrgqq7" path="res://testmap.tscn" id="2_qhspd"]
 | 
			
		||||
 | 
			
		||||
[node name="Level3D" type="Level3D"]
 | 
			
		||||
 | 
			
		||||
[node name="EndScreen" type="EndScreen" parent="."]
 | 
			
		||||
main_menu_scene = ExtResource("1_c4p6k")
 | 
			
		||||
game_scene = ExtResource("2_qhspd")
 | 
			
		||||
 | 
			
		||||
[node name="RestartButton" type="Button" parent="EndScreen"]
 | 
			
		||||
anchors_preset = 8
 | 
			
		||||
anchor_left = 0.5
 | 
			
		||||
anchor_top = 0.5
 | 
			
		||||
anchor_right = 0.5
 | 
			
		||||
anchor_bottom = 0.5
 | 
			
		||||
offset_left = -78.5
 | 
			
		||||
offset_top = -29.0
 | 
			
		||||
offset_right = 78.5
 | 
			
		||||
offset_bottom = 29.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
focus_neighbor_bottom = NodePath("../MainMenuButton")
 | 
			
		||||
text = "Restart"
 | 
			
		||||
 | 
			
		||||
[node name="MainMenuButton" type="Button" parent="EndScreen"]
 | 
			
		||||
anchors_preset = 8
 | 
			
		||||
anchor_left = 0.5
 | 
			
		||||
anchor_top = 0.5
 | 
			
		||||
anchor_right = 0.5
 | 
			
		||||
anchor_bottom = 0.5
 | 
			
		||||
offset_left = -78.0
 | 
			
		||||
offset_top = 55.0
 | 
			
		||||
offset_right = 79.0
 | 
			
		||||
offset_bottom = 113.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
focus_neighbor_top = NodePath("../RestartButton")
 | 
			
		||||
text = "Menu"
 | 
			
		||||
							
								
								
									
										46
									
								
								godot/game_ui.tscn
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								godot/game_ui.tscn
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,46 @@
 | 
			
		|||
[gd_scene load_steps=2 format=3 uid="uid://73cn4swq2gc7"]
 | 
			
		||||
 | 
			
		||||
[ext_resource type="PackedScene" uid="uid://e3dmisrrgqq7" path="res://testmap.tscn" id="1_kul4y"]
 | 
			
		||||
 | 
			
		||||
[node name="Level3D" type="Level3D"]
 | 
			
		||||
 | 
			
		||||
[node name="GameUI" type="MenuUI" parent="."]
 | 
			
		||||
game_scene = ExtResource("1_kul4y")
 | 
			
		||||
 | 
			
		||||
[node name="StartButton" type="Button" parent="GameUI"]
 | 
			
		||||
anchors_preset = 8
 | 
			
		||||
anchor_left = 0.5
 | 
			
		||||
anchor_top = 0.5
 | 
			
		||||
anchor_right = 0.5
 | 
			
		||||
anchor_bottom = 0.5
 | 
			
		||||
offset_left = -115.0
 | 
			
		||||
offset_top = -57.0
 | 
			
		||||
offset_right = 115.0
 | 
			
		||||
offset_bottom = 57.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
focus_neighbor_bottom = NodePath("../ControlsButton")
 | 
			
		||||
text = "Start"
 | 
			
		||||
 | 
			
		||||
[node name="ControlsButton" type="Button" parent="GameUI"]
 | 
			
		||||
anchors_preset = 8
 | 
			
		||||
anchor_left = 0.5
 | 
			
		||||
anchor_top = 0.5
 | 
			
		||||
anchor_right = 0.5
 | 
			
		||||
anchor_bottom = 0.5
 | 
			
		||||
offset_left = -115.0
 | 
			
		||||
offset_top = 111.0
 | 
			
		||||
offset_right = 115.0
 | 
			
		||||
offset_bottom = 225.0
 | 
			
		||||
grow_horizontal = 2
 | 
			
		||||
grow_vertical = 2
 | 
			
		||||
focus_neighbor_top = NodePath("../StartButton")
 | 
			
		||||
text = "Controls"
 | 
			
		||||
 | 
			
		||||
[node name="ControlsScreen" type="Panel" parent="GameUI"]
 | 
			
		||||
offset_left = 32.0
 | 
			
		||||
offset_top = 30.0
 | 
			
		||||
offset_right = 437.0
 | 
			
		||||
offset_bottom = 339.0
 | 
			
		||||
 | 
			
		||||
[node name="Camera3D" type="Camera3D" parent="."]
 | 
			
		||||
							
								
								
									
										47
									
								
								src/end_screen.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										47
									
								
								src/end_screen.cpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,47 @@
 | 
			
		|||
#include "end_screen.hpp"
 | 
			
		||||
#include "godot_cpp/classes/button.hpp"
 | 
			
		||||
#include "godot_cpp/classes/global_constants.hpp"
 | 
			
		||||
#include "utils/game_root.hpp"
 | 
			
		||||
#include "utils/godot_macros.h"
 | 
			
		||||
 | 
			
		||||
namespace godot {
 | 
			
		||||
void EndScreen::_bind_methods() {
 | 
			
		||||
#define CLASSNAME EndScreen
 | 
			
		||||
    GDPROPERTY_HINTED(main_menu_scene, Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene");
 | 
			
		||||
    GDPROPERTY_HINTED(game_scene, Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EndScreen::_enter_tree() { GDGAMEONLY();
 | 
			
		||||
    Button *restart_button = this->get_node<Button>("RestartButton");
 | 
			
		||||
    restart_button->connect("button_down", callable_mp(this, &EndScreen::restart));
 | 
			
		||||
    restart_button->grab_focus();
 | 
			
		||||
    Button *main_button = this->get_node<Button>("MainMenuButton");
 | 
			
		||||
    main_button->connect("button_down", callable_mp(this, &EndScreen::return_to_main));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EndScreen::return_to_main() {
 | 
			
		||||
    this->get_owner()->queue_free();
 | 
			
		||||
    GameRoot3D::get_singleton()->load_level(this->main_menu_scene);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EndScreen::restart() {
 | 
			
		||||
    this->get_owner()->queue_free();
 | 
			
		||||
    GameRoot3D::get_singleton()->load_level(this->game_scene);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EndScreen::set_main_menu_scene(Ref<PackedScene> scene) {
 | 
			
		||||
    this->main_menu_scene = scene;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Ref<PackedScene> EndScreen::get_main_menu_scene() const {
 | 
			
		||||
    return this->main_menu_scene;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void EndScreen::set_game_scene(Ref<PackedScene> scene) {
 | 
			
		||||
    this->game_scene = scene;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Ref<PackedScene> EndScreen::get_game_scene() const {
 | 
			
		||||
    return this->game_scene;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										26
									
								
								src/end_screen.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								src/end_screen.hpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,26 @@
 | 
			
		|||
#ifndef END_SCREEN_HPP
 | 
			
		||||
#define END_SCREEN_HPP
 | 
			
		||||
 | 
			
		||||
#include "godot_cpp/classes/canvas_layer.hpp"
 | 
			
		||||
#include "godot_cpp/classes/packed_scene.hpp"
 | 
			
		||||
namespace godot {
 | 
			
		||||
class EndScreen : public CanvasLayer {
 | 
			
		||||
    GDCLASS(EndScreen, CanvasLayer);
 | 
			
		||||
    static void _bind_methods();
 | 
			
		||||
public:
 | 
			
		||||
    virtual void _enter_tree() override;
 | 
			
		||||
 | 
			
		||||
    void return_to_main();
 | 
			
		||||
    void restart();
 | 
			
		||||
 | 
			
		||||
    void set_main_menu_scene(Ref<PackedScene> scene);
 | 
			
		||||
    Ref<PackedScene> get_main_menu_scene() const;
 | 
			
		||||
 | 
			
		||||
    void set_game_scene(Ref<PackedScene> scene);
 | 
			
		||||
    Ref<PackedScene> get_game_scene() const;
 | 
			
		||||
private:
 | 
			
		||||
    Ref<PackedScene> game_scene{};
 | 
			
		||||
    Ref<PackedScene> main_menu_scene{};
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
#endif // !END_SCREEN_HPP
 | 
			
		||||
							
								
								
									
										41
									
								
								src/menu_ui.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/menu_ui.cpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
#include "menu_ui.hpp"
 | 
			
		||||
#include "utils/game_root.hpp"
 | 
			
		||||
#include "utils/godot_macros.h"
 | 
			
		||||
#include <godot_cpp/classes/button.hpp>
 | 
			
		||||
#include <godot_cpp/classes/control.hpp>
 | 
			
		||||
#include <godot_cpp/classes/global_constants.hpp>
 | 
			
		||||
#include <godot_cpp/classes/packed_scene.hpp>
 | 
			
		||||
 | 
			
		||||
namespace godot {
 | 
			
		||||
void MenuUI::_bind_methods() {
 | 
			
		||||
#define CLASSNAME MenuUI
 | 
			
		||||
    GDPROPERTY_HINTED(game_scene, Variant::OBJECT, PROPERTY_HINT_RESOURCE_TYPE, "PackedScene");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MenuUI::_enter_tree() { GDGAMEONLY();
 | 
			
		||||
    Button *start_button = this->get_node<Button>("StartButton");
 | 
			
		||||
    start_button->connect("button_down", callable_mp(this, &MenuUI::start_game));
 | 
			
		||||
    start_button->grab_focus();
 | 
			
		||||
    Button *controls_button = this->get_node<Button>("ControlsButton");
 | 
			
		||||
    controls_button->connect("button_down", callable_mp(this, &MenuUI::toggle_controls));
 | 
			
		||||
    this->controls = this->get_node<Control>("ControlsScreen");
 | 
			
		||||
    this->controls->set_visible(false);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MenuUI::start_game() {
 | 
			
		||||
    this->get_parent()->queue_free();
 | 
			
		||||
    GameRoot3D::get_singleton()->load_level(this->game_scene);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MenuUI::toggle_controls() {
 | 
			
		||||
    this->controls->set_visible(true);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void MenuUI::set_game_scene(Ref<PackedScene> scene) {
 | 
			
		||||
    this->game_scene = scene;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Ref<PackedScene> MenuUI::get_game_scene() const {
 | 
			
		||||
    return this->game_scene;
 | 
			
		||||
}
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										27
									
								
								src/menu_ui.hpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								src/menu_ui.hpp
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,27 @@
 | 
			
		|||
#ifndef MENU_UI_HPP
 | 
			
		||||
#define MENU_UI_HPP
 | 
			
		||||
 | 
			
		||||
#include "godot_cpp/classes/control.hpp"
 | 
			
		||||
#include <godot_cpp/classes/canvas_layer.hpp>
 | 
			
		||||
#include <godot_cpp/classes/node3d.hpp>
 | 
			
		||||
#include <godot_cpp/classes/packed_scene.hpp>
 | 
			
		||||
 | 
			
		||||
namespace godot {
 | 
			
		||||
class MenuUI : public CanvasLayer {
 | 
			
		||||
    GDCLASS(MenuUI, CanvasLayer);
 | 
			
		||||
    static void _bind_methods();
 | 
			
		||||
public:
 | 
			
		||||
    virtual void _enter_tree() override;
 | 
			
		||||
 | 
			
		||||
    void start_game();
 | 
			
		||||
    void toggle_controls();
 | 
			
		||||
 | 
			
		||||
    void set_game_scene(Ref<PackedScene> scene);
 | 
			
		||||
    Ref<PackedScene> get_game_scene() const;
 | 
			
		||||
private:
 | 
			
		||||
    Control *controls{nullptr};
 | 
			
		||||
    Ref<PackedScene> game_scene{};
 | 
			
		||||
};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#endif // !MENU_UI_HPP
 | 
			
		||||
		Loading…
	
		Reference in a new issue